@end ignore
+@item
+The visual style of tremolo slashes (shape, style and slope)
+is now more finely controlled.
+@lilypond[quote,relative=2]
+ a8:32 b: c: d:
+ \override StemTremolo.shape = #'beam-like
+ a: b: c: d:
+ \override StemTremolo.style = #'constant
+ a: b: c: d:
+ g,2
+@end lilypond
+
+
@item
Multi-measure rests have length according to their total duration,
under the control of @code{MultiMeasureRest.space-increment}.
text-align: justify;
padding: 0;
margin: 0 auto;
+ /* fallback for IE8 which doesn't support multiple backgrounds */
+ background: url(../pictures/background-top-left.png) no-repeat top left;
background-color: rgb(245, 252, 242);
background-image: url(../pictures/background-top-right.png),
url(../pictures/background-top-left.png);
background-position: top right, top left;
background-repeat: no-repeat, no-repeat;
- /* fallback for IE8 which doesn't support multiple backgrounds */
- background: url(../pictures/background-top-left.png) no-repeat top left;
}
hr {
However, you can also use these variables (also known as
macros, or user-defined commands) for tweaks:
-@c TODO Avoid padtext - not needed with skylining
@lilypond[quote,verbatim,ragged-right]
dolce = \markup { \italic \bold dolce }
-padText = { \once \override TextScript.padding = #5.0 }
+centreText = { \once \override TextScript.self-alignment-X = #CENTER }
+
fthenp =_\markup {
\dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}
violin = \relative c'' {
\repeat volta 2 {
c4._\dolce b8 a8 g a b |
- \padText
- c4.^"hi there!" d8 e' f g d |
- c,4.\fthenp b8 c4 c-. |
+ \centreText
+ c4.^"hi there!" d8 e f g d |
+ c4.\fthenp b8 c4 c-. |
}
}
{
\violin
}
- \layout { ragged-right = ##t }
}
@end lilypond
violin = \relative c'' @{
\repeat volta 2 @{
c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
- \once \override TextScript.padding = #5.0
- c4.^"hi there!" d8 e' f g d |
- c,4.\markup @{
+ \once \override TextScript.self-alignment-X = #CENTER
+ c4.^"hi there!" d8 e f g d |
+ c4._\markup @{
\dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
@}
b8 c4 c-. |
@end example
So far we've seen static substitution -- when LilyPond
-sees @code{\padText}, it replaces it with the stuff that
+sees @code{\centreText}, it replaces it with the stuff that
we've defined it to be (ie the stuff to the right of
-@code{padtext=}).
+@code{centreText=}).
LilyPond can handle non-static substitution, too (you
can think of these as functions).
@lilypond[verbatim, quote]
SopranoMusic = \relative { a'4 a a a }
- SopranoLyricsOne = \lyricsto "Soprano" {
+ SopranoLyricsOne = \lyricmode {
\set stanza = "1."
Words to verse one
}
- SopranoLyricsTwo = \lyricsto "Soprano" {
+ SopranoLyricsTwo = \lyricmode {
\set stanza = "2."
Words to verse two
}
over the denominator of the time signature. By default, each unit of
length @code{baseMoment} is a single beat.
+Note that there are separate @code{beatStructure} and @code{baseMoment}
+values for each time signature. Changes to these variables apply only
+to the time signature that is currently in force, hence those changes
+must be placed after the @code{\time} command which starts a new time
+signature section, not before it. New values given to a particular
+time signature are retained and reinstated whenever that time signature
+is re-established.
+
@lilypond[quote,relative=2,verbatim]
\time 5/16
c16^"default" c c c c |
texidoc = "
Beat grouping within a measure is controlled by the context property
@code{beatStructure}. Values of @code{beatStructure} are established
-for many time signatures in @file{scm/time-signature-settings.scm}.
+for many time signatures in @@file@{scm/time-signature-settings.scm@}.
Values of @code{beatStructure} can be changed or set with @code{\\set}.
Alternatively, @code{\\time} can be used to both set the time signature
and establish the beat structure. For this, you specify the internal
ease reading rhythmically complex modern music. In the example, the 9/8
measure is grouped in two different patterns using the two different
methods, while the 5/8 measure is grouped according to the default
-setting in @file{scm/time-signature-settings.scm}:
+setting in @@file@{scm/time-signature-settings.scm@}:
"
doctitle = "Conducting signs measure grouping signs"
}
\alternative {
{ d1 }
- { \repeatGliss c e1 }
+ { \repeatGliss c \once \omit StringNumber e1\2 }
}
}
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.18.0"
+
+\header {
+ lsrtags = "pitches"
+
+ texidoc = "
+When a clef sign has already been displayed and it has not been changed
+to a different clef, then repeating the @code{\\clef} command will be
+ignored by LilyPond, since it is not a change of clef. It is possible
+to force the clef to be redisplayed using the command @code{\\set
+Staff.forceClef = ##t}.
+
+"
+ doctitle = "Forcing a clef symbol to be displayed"
+} % begin verbatim
+
+\relative c' {
+ \clef treble
+ c1
+ \clef treble
+ c1
+ \set Staff.forceClef = ##t
+ c1
+ \clef treble
+ c1
+}
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.18.0"
+
+\header {
+ lsrtags = "pitches, tweaks-and-overrides"
+
+ texidoc = "
+When a clef is changed, the clef sign displayed is smaller than the
+initial clef. This can be overridden with @code{full-size-change}.
+
+"
+ doctitle = "Keep change clefs full sized"
+} % begin verbatim
+
+\relative c' {
+ \clef "treble"
+ c1
+ \clef "bass"
+ c1
+ \clef "treble"
+ c1
+ \override Staff.Clef.full-size-change = ##t
+ \clef "bass"
+ c1
+ \clef "treble"
+ c1
+ \revert Staff.Clef.full-size-change
+ \clef "bass"
+ c1
+ \clef "treble"
+ c1
+}
coloring-notes-depending-on-their-pitch.ly
creating-a-sequence-of-notes-on-various-pitches.ly
creating-custom-key-signatures.ly
+forcing-a-clef-symbol-to-be-displayed.ly
generating-random-notes.ly
hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly
+keep-change-clefs-full-sized.ly
makam-example.ly
modifying-the-ottava-spanner-slope.ly
non-traditional-key-signatures.ly
+++ /dev/null
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.di.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.18.0"
-
-\header {
- lsrtags = "repeats, tweaks-and-overrides"
-
- texidoc = "
-A @code{|:} bar line can be printed at the beginning of a piece.
-
-"
- doctitle = "Printing a repeat sign at the beginning of a piece"
-} % begin verbatim
-
-\relative c'' {
- \bar ".|:"
- \repeat volta 2 {
- c1
- d1
- d4 e f g
- }
-}
percent-repeat-count-visibility.ly
percent-repeat-counter.ly
positioning-segno-and-coda-with-line-break.ly
-printing-a-repeat-sign-at-the-beginning-of-a-piece.ly
setting-the-double-repeat-default-for-volte.ly
shortening-volta-brackets.ly
volta-below-chords.ly
how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly
how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly
inserting-a-caesura.ly
+keep-change-clefs-full-sized.ly
line-arrows.ly
making-an-object-invisible-with-the-transparent-property.ly
making-glissandi-breakable.ly
positioning-arpeggios.ly
positioning-multi-measure-rests.ly
positioning-text-markups-inside-slurs.ly
-printing-a-repeat-sign-at-the-beginning-of-a-piece.ly
printing-bar-numbers-inside-boxes-or-circles.ly
printing-metronome-and-rehearsal-marks-below-the-staff.ly
printing-note-names-with-and-without-an-octave-marker.ly
texidoc = "
Alternative styles of flag on eighth and shorter notes can be displayed
by overriding the @code{stencil} property of @code{Flag}. Valid values
-are @code{modern-straight-flag} and @code{old-straight-flag}.
+are @code{modern-straight-flag}, @code{old-straight-flag} and
+@code{flat-flag}.
"
doctitle = "Using alternative flag styles"
c8 d16 c32 d64 \acciaccatura { c8 } d64 r4
}
-\relative c' {
- \time 2/4
- \testnotes
-
- \override Flag.stencil = #modern-straight-flag
- \testnotes
-
- \override Flag.stencil = #old-straight-flag
- \testnotes
-
- \revert Flag.stencil
- \testnotes
+\score {
+ \relative c' {
+ \time 2/4
+ \testnotes
+
+ \override Flag.stencil = #modern-straight-flag
+ \testnotes
+
+ \override Flag.stencil = #old-straight-flag
+ \testnotes
+
+ \override Flag.stencil = #flat-flag
+ \testnotes
+
+ \revert Flag.stencil
+ \testnotes
+ }
+ \layout {
+ indent = 0
+ \context {
+ \Score
+ \override NonMusicalPaperColumn.line-break-permission = ##f
+ }
+ }
}
@item
@uref{http://www.aurelienbello.com/,Aurélien Bello} has arranged a
-@q{reduced} version of Richard Strauss's @emph{Der Rosenkavalier} for
-four singers and a chamber orchestra of thirteen players. To be
-performed on
-@uref{http://www.festspielhaus.de/veranstaltung/der-kleine-rosenkavalier-02-04-2015-1100/,April 2nd and 6th}
-at the Festspielhaus, Baden-Baden, and then again on
+version of Richard Strauss's @emph{Der Rosenkavalier} for four singers
+and a chamber orchestra of thirteen players. This has been commissioned
+by the Berlin Philharmonic Orchestra whose members will be the performers on
+@uref{http://www.festspielhaus.de/veranstaltung/der-kleine-rosenkavalier-02-04-2015-1100/,April 2nd and 6th}
+at the Festspielhaus, Baden-Baden, and on
@uref{http://www.berliner-philharmoniker.de/konzerte/kalender/details/21070/,April 26th}
-in the @emph{Großer Saal}, Berlin. Aurélien has also re-orchestrated
-@emph{Der Ring des Nibelungen} by Richard Wagner to a
+in the @emph{Philharmonie (großer Saal)}, Berlin. We are pleased to see
+musicians of such reputation playing from LilyPond scores -- and they are
+reportedly very happy with them.
+
+Aurélien has also re-orchestrated @emph{Der Ring des Nibelungen} by Richard
+Wagner to a
@uref{http://www.rsb-online.de/content/konzerte/wagnerzyklus-10-13/wagner-fuer-kinder/index_ger.html,100-minute version for children}.
Written for a standard symphony orchestra, but with a reduced cast of
singers, it was performed by the @emph{Radio-Sinfonieorchester Berlin}
@uref{http://www.queridokinderenjeugdboeken.nl/web/Boek.htm?dbid=18954&typeofpage=134707, www.queridokinderenjeugdboeken.nl}; choir
rehearsal scores for the Dutch translation of Benjamin Britten's
@emph{Saint Nicolas} performed by @emph{Muziektheater Hollands Diep} in
-2011.
-@uref{http://www.muziektheaterhollandsdiep.nl/nl/voorstellingen/sint_nicolaas_leeft, www.muziektheaterhollandsdiep.nl}; and is currently
-working on the score and parts for an arrangement of Moussurgsky's
-@emph{Boris Godounov} for wind quartet, piano and percussion and was
-performed in 2014, again by @emph{Muziektheater Hollands Diep}.
+2011;
+@uref{http://www.muziektheaterhollandsdiep.nl/nl/voorstellingen/sint_nicolaas_leeft, www.muziektheaterhollandsdiep.nl}.
+He has also worked on the score and parts for an arrangement of
+Moussurgsky’s @emph{Boris Godounov} for wind quartet, piano and
+percussion which was performed in 2014, again by
+@emph{Muziektheater Hollands Diep}.
@item
A critical edition of Tommaso Traetta's @emph{Enea nel Lazio (1760)},
@c used for news about the upcoming release; see CG 10.2
@newsItem
-@subheading LilyPond 2.19.17 released @emph{March 15, 2015}
+@subheading LilyPond 2.19.19 released @emph{April 26, 2015}
We are happy to announce the release of LilyPond
-2.19.17. This release includes a number of enhancements, and contains some
+2.19.19. 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
* don't duplicate entries from news-front.itexi
@end ignore
+@newsItem
+@subheading LilyPond 2.19.18 released @emph{April 5, 2015}
+
+We are happy to announce the release of LilyPond
+2.19.18. 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.17 released @emph{March 15, 2015}
+
+We are happy to announce the release of LilyPond
+2.19.17. 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.16 released @emph{February 28, 2015}
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=19
-PATCH_LEVEL=18
+PATCH_LEVEL=20
MY_PATCH_LEVEL=
VERSION_STABLE=2.18.2
-VERSION_DEVEL=2.19.17
+VERSION_DEVEL=2.19.19
warn="Python.h (python-devel, python-dev or libpython-dev package)"
STEPMAKE_ADD_ENTRY($1, $warn)
fi
+ AC_SUBST(PYTHON_CFLAGS)
+ AC_SUBST(PYTHON_LDFLAGS)
])
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
GUILE_CFLAGS = @GUILE_CFLAGS@
PANGO_FT2_CFLAGS = @PANGO_FT2_CFLAGS@
+PYTHON_CFLAGS = @PYTHON_CFLAGS@
CONFIG_CPPFLAGS = @CPPFLAGS@
CONFIG_DEFINES = @DEFINES@
GUILE_LIBS = @GUILE_LDFLAGS@
FREETYPE2_LIBS = @FREETYPE2_LIBS@
PANGO_FT2_LIBS = @PANGO_FT2_LIBS@
+PYTHON_LIBS = @PYTHON_LDFLAGS@
CXXABI_LIBS = @CXXABI_LIBS@
CONFIG_LIBS = @LIBS@ @EXTRA_LIBS@ $(GUILE_LIBS) $(PANGO_FT2_LIBS) $(FONTCONFIG_LIBS) $(FREETYPE2_LIBS)
NCSB_SOURCE_FILES = @NCSB_SOURCE_FILES@
NCSB_DIR = @NCSB_DIR@
+HELV_SOURCE_FILES = @HELV_SOURCE_FILES@
+COUR_SOURCE_FILES = @COUR_SOURCE_FILES@
################################################################
## PROGRAMS
[highly experimental GUILE 2 support. Default: off])],
[GUILEv2=$enableval])
-AC_ARG_WITH(ncsb-dir,
- [AS_HELP_STRING([--with-ncsb-dir=DIR],
- [location of Century Schoolbook fonts.])],
+AC_ARG_WITH(fonts-dir,
+ [AS_HELP_STRING([--with-fonts-dir=DIR],
+ [location of URW++ fonts.])],
[NCSB_DIR=$withval],
[NCSB_DIR=""])
STEPMAKE_COMPILE
AC_CHECK_PROG(FCLIST, fc-list, fc-list)
-AC_MSG_CHECKING([for New Century Schoolbook PFB files])
+AC_MSG_CHECKING([for Century Schoolbook L PFB files])
AC_SUBST(NCSB_SOURCE_FILES)
AC_SUBST(NCSB_DIR)
if test "$NCSB_DIR" = ""; then
fi
if test "$NCSB_DIR" = "" -o "$MISSING_NCSB_SOURCE_FILES" != "$INCOMPLETE_NCSB_SOURCE_FILES"; then
AC_MSG_RESULT(no)
- STEPMAKE_ADD_ENTRY(REQUIRED,International New Century Schoolbook fonts)
+ STEPMAKE_ADD_ENTRY(REQUIRED,International Century Schoolbook L fonts)
if test "$NCSB_DIR" = ""; then
if test "$FCLIST" = ""; then
- STEPMAKE_ADD_ENTRY(REQUIRED,'(install the fc-list utility from FontConfig, or use --with-ncsb-dir)')
+ STEPMAKE_ADD_ENTRY(REQUIRED,'(install the fc-list utility from FontConfig, or use --with-fonts-dir)')
else
- STEPMAKE_ADD_ENTRY(REQUIRED,'(make sure the fc-list utility can see them, or use --with-ncsb-dir)')
+ STEPMAKE_ADD_ENTRY(REQUIRED,'(make sure the fc-list utility can see them, or use --with-fonts-dir)')
fi
fi
if test "$MISSING_NCSB_SOURCE_FILES" != ""; then
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)')
+ fi
+else
+ AC_MSG_RESULT(yes)
+fi
+
AC_LANG([C++])
STEPMAKE_PYTHON(REQUIRED, 2.4, 3.0)
#include <sys/stat.h>
#endif
-#ifdef __CYGWIN__
-#include <sys/cygwin.h>
-#endif
-
#ifndef ROOTSEP
#define ROOTSEP ':'
#endif
#define EXTSEP '.'
#endif
-#ifdef __CYGWIN__
-static string
-dos_to_posix (const string &file_name)
-{
- char buf[PATH_MAX] = "";
- char s[PATH_MAX] = {0};
- file_name.copy (s, PATH_MAX - 1);
- /* ugh: char const* argument gets modified. */
- int fail = cygwin_conv_to_posix_path (s, buf);
- if (!fail)
- return buf;
- return file_name;
-}
-#endif /* __CYGWIN__ */
-
/** Use slash as directory separator. On Windows, they can pretty
much be exchanged. */
#if 0
File_name::File_name (string file_name)
{
-#ifdef __CYGWIN__
- /* All system functions would work, even if we do not convert to
- posix file_name, but we would think that \foe\bar\baz.ly is in
- the cwd. */
- file_name = dos_to_posix (file_name);
-#endif
#ifdef __MINGW32__
file_name = slashify (file_name);
#endif
TEXI2HTML_FLAGS += --nomenu
-TMP = $(sort $(ABC_FILES) $(TEXINFO_SOURCES) )
-COLLATED_FILES = ${TMP:%.abc=$(outdir)/%.ly}
+TMP_FILES = $(sort $(ABC_FILES) $(TEXINFO_SOURCES) )
+COLLATED_FILES = ${TMP_FILES:%.abc=$(outdir)/%.ly}
include $(depth)/make/stepmake.make
-\version "2.16.0"
+\version "2.19.19"
\header {
texidoc = "Ambitus for pieces beginning with @code{\\cueDuringWithClef}.
@code{\\cueDuringWithClef} command is handy. Using this command at
the beginning of a piece should leave the ambitus displayed based
on the main clef.
+
+An @code{Ambitus_engraver} should ignore notes in @code{CueVoice}
+contexts.
"
}
\layout {
\context {
- \Voice
+ \Staff
\consists "Ambitus_engraver"
}
}
%% \partcombine
\test ##[ \partcombine { c4 e4 }
-{ d4 f4 } #] % PartCombineMusic UnrelativableMusic
+{ d4 f4 } #]
+\test ##[ \partcombineUp { c2 e2 }
+{ d2 f2 } #]
+\test ##[ \partcombineDown { c1 e1 }
+{ d1 f1 } #]
%% Cue notes
\test ##[ \cueDuring #"foo" #1 { c4 d4 } #]
TEXI2HTML_FLAGS += --nomenu
-TMP = $(sort $(LY_FILES) $(TEXINFO_SOURCES) )
-COLLATED_FILES = ${TMP:%.ly=$(outdir)/%-midi.ly}
+TMP_FILES = $(sort $(LY_FILES) $(TEXINFO_SOURCES) )
+COLLATED_FILES = ${TMP_FILES:%.ly=$(outdir)/%-midi.ly}
include $(depth)/make/stepmake.make
--- /dev/null
+\version "2.19.19"
+
+\header {
+ texidoc = "Parentheses around notes also include accidentals and dots;
+they are centered on the vertical center of the combined enclosed items."
+}
+
+\score {
+ \new Staff {
+ \parenthesize ais'4. \parenthesize des''4
+ }
+}
+
--- /dev/null
+\version "2.19.19"
+\header {
+ texidoc = "Test some transitions that might be found in string parts produced with \\partcombine."
+}
+
+vone = \relative a' { a2 <a e> | r2 <a e> | r r | r2 a4 r4 | g2 r | <b g> }
+vtwo = \relative a' { e2 <e a> | r2 r | <d g> r | r2 f4 r4 | g2 r | <g d> }
+combined = \partcombine \vone \vtwo
+
+% The part combiner does not yet support all of these labels.
+expectedText = \relative c' {
+ s2_"div." s2_"unis." | s2 s2_"solo" | s2_"solo 2" s2 |
+ s2 s4_\markup \column { tutti, div. } s4 | s2_"unis." s | s_"div."
+}
+
+\layout { ragged-right = ##t }
+
+\new Staff \with {
+ aDueText = "unis."
+ soloText = "solo"
+ soloIIText = "solo 2"
+} <<
+ \set Score.skipBars = ##t
+ \combined
+ \expectedText
+>>
--- /dev/null
+\version "2.19.19"
+
+\header {
+ texidoc ="This should produce an SATB score on two staves
+with 5 verses and piano accompaniment."
+
+}
+
+TwoVoicesPerStaff = ##t
+
+SopranoMusic = \relative { c''4 c c c }
+AltoMusic = \relative { g'4 g g g }
+VerseOne = \lyricmode { \set stanza = "1." First _ stan -- za }
+VerseTwo = \lyricmode { \set stanza = "2." Se -- cond stan -- za }
+VerseThree = \lyricmode { \set stanza = "3." Third _ stan -- za }
+VerseFour = \lyricmode { \set stanza = "4." Fourth _ stan -- za }
+VerseFive = \lyricmode { \set stanza = "5." Fifth _ stan -- za }
+TenorMusic = \relative { c'4 c c c }
+BassMusic = \relative { g2 g4 g }
+
+PianoRHMusic = \relative { c''4 c c c }
+PianoLHMusic = \relative { c2 c }
+
+\layout {
+ ragged-right = ##t
+}
+
+\include "satb.ly"
--- /dev/null
+\version "2.19.19"
+
+\header {
+ texidoc ="Soprano and tenor voices may be omitted without
+error, even when TwoVoicesPerStaff is specified and Alto
+and Bass lyrics are provided."
+}
+TwoVoicesPerStaff = ##t
+
+AltoMusic = \relative { g'4 g g g }
+AltoLyrics = \lyricmode { Al -- to ly -- rics }
+BassMusic = \relative { g2 g4 g }
+BassLyrics = \lyricmode { Bass ly -- rics }
+
+\layout {
+ ragged-right = ##t
+}
+
+\include "satb.ly"
--- /dev/null
+\version "2.19.19"
+
+\header {
+ texidoc ="Instrument names and short instrument names
+can be changed when using the satb built-in template."
+}
+
+Time = { s1 \break s1 }
+TwoVoicesPerStaff = ##t
+
+SopranoInstrumentName = "Soprani"
+SopranoShortInstrumentName = "Sop"
+AltoInstrumentName = "Contralti"
+AltoShortInstrumentName = "Con"
+MenDividedInstrumentName = "Men Div"
+MenDividedShortInstrumentName = "M Div"
+MenInstrumentName = "Men Uni"
+MenShortInstrumentName = "M Uni"
+TenorInstrumentName = "Tenori"
+BassInstrumentName = "Bassi"
+PianoInstrumentName = "Organ"
+
+MenMusic = \relative { s1 | c4 c c c }
+SopranoMusic = \relative { c''4 c c c | c c c c }
+AltoMusic = \relative { g'4 g g g | g g g g }
+TenorMusic = \relative { c'4 c c c | s1 }
+BassMusic = \relative { g2 g4 g | s1 }
+
+PianoRHMusic = \relative { c''4 c c c | c c c c }
+PianoLHMusic = \relative { c2 c c c }
+
+\layout {
+ ragged-right = ##t
+}
+
+\paper { left-margin = 15 }
+
+\include "satb.ly"
--- /dev/null
+\version "2.19.19"
+
+\header {
+ texidoc ="This should produce an SATB score with piano
+accompaniment, with four voices in the first system, unison
+women voices with descant in the second system and unison
+women and unison men voices in the third system. "
+}
+
+Time = { s1 \break s1 \break }
+
+DescantMusic = \relative { s1 | e''4 e e e | s1 }
+DescantLyrics = \lyricmode { Des -- cant ly -- rics }
+SopranoMusic = \relative { c''8 c c4 c c | s1*2 | }
+SopranoLyrics = \lyricmode { So -- pra -- no ly -- rics }
+AltoMusic = \relative { g'4 g g g | s1*2 | }
+AltoLyrics = \lyricmode { Al -- to ly -- rics }
+WomenMusic = \relative { s1 | g'4 g g g | g g g g | }
+WomenLyrics = \lyricmode { Wo -- men ly -- rics Wo -- men ly -- rics }
+MenMusic = \relative { s1*2 | e2 e4 e | }
+MenLyrics = \lyricmode { Men ly -- rics }
+TenorMusic = \relative { c'4 c c c | s1*2 | }
+TenorLyrics = \lyricmode { Te -- nor ly -- rics }
+BassMusic = \relative { g2 g4 g | s1*2 }
+BassLyrics = \lyricmode { Bass ly -- rics }
+
+PianoRHMusic = \relative { c''4 c c c | c c c c | c c c c | }
+PianoLHMusic = \relative { c2 c | c c | c c | }
+
+\layout {
+ ragged-right = ##t
+}
+
+\include "satb.ly"
(SchemeTextSpanEvent
. ((description . "Used to signal where scheme text spanner brackets
start and stop.")
- (types . (general-music scheme-text-span-event span-event event))
+ (types . (scheme-text-span-event span-event event))
))
))
--- /dev/null
+\header {
+
+ texidoc = "When the vertical positions of ledger lines have been
+customized by setting the @code{ledger-positions} property of the
+StaffSymbol, and a dotted note falls on a ledger line, the dot is shifted
+up to avoid the ledger line (just as with uncustomized ledger lines)."
+}
+
+\version "2.19.17"
+
+\new Staff \relative c' {
+ \override Staff.StaffSymbol.line-positions = #'(-3 0 3)
+ \override Staff.StaffSymbol.ledger-positions = #'(-3 0)
+ \override Staff.StaffSymbol.ledger-extra = #1
+ f,4. g a b c d g' a b c d e
+}
--- /dev/null
+\version "2.19.8"
+
+\header {
+ texidoc = "Controlling the appearance of tremolo slashes. Property
+ @code{slope} is self-explanatory. Property @code{shape} determines
+ whether slashes look like rectangles or like very small beams. Setting
+ these properties directly cause all slashes behave in the specified way.
+ However, one usually wants the slashes to behave differently depending on
+ whether the note has flags, beams or only a plain stem. That's what the
+ @code{style} property is used for: it sets shape and slope depending on
+ the situation. There are two styles defined: @code{default} and
+ @code{constant}."
+}
+
+music = {
+ a''4:32 a':
+ e''8: \noBeam e':
+ a'': [ a': ]
+ f': [ g':]
+ d': [ d': ]
+}
+
+\markup \wordwrap { default. First three notes should have beam-like slashes.
+Slash of the third note should be more sloped than first two notes.
+Slashes on beamed notes should be rectangular and parallel to the beams. }
+\new Staff {
+ \music
+}
+
+\markup \wordwrap { style=constant. All slashes should be rectangular.
+All slashes should have the same slope except for downstem flagged notes. }
+\new Staff {
+ \override StemTremolo.style = #'constant
+ \music
+}
+
+\markup \wordwrap { shape=rectangle. All slashes should be rectangular.
+Slope like in default. }
+\new Staff {
+ \override StemTremolo.shape = #'rectangle
+ \music
+}
+
+\markup \wordwrap { shape=beam-like. All slashes should be beam-like.
+Slope like in default. }
+\new Staff {
+ \override StemTremolo.shape = #'beam-like
+ \music
+}
+
+\markup \wordwrap { slope=-0.2 All slashes should have the same downward slope.
+ Shape like in default. }
+\new Staff {
+ \override StemTremolo.slope = #-0.2
+ \music
+}
*/
for (vsize i = 0; i < left_objects_.size (); i++)
{
- if (left_objects_[i]->get_property ("side-axis") == scm_from_int (X_AXIS))
+ if (scm_is_eq (left_objects_[i]->get_property ("side-axis"), scm_from_int (X_AXIS)))
Side_position_interface::add_support (left_objects_[i], a);
}
Accidental_placement::add_accidental
(accidental_placement_, a,
- get_property ("accidentalGrouping") == ly_symbol2scm ("voice"),
+ scm_is_eq (get_property ("accidentalGrouping"), ly_symbol2scm ("voice")),
(long) trans);
note_head->set_object ("accidental-grob", a->self_scm ());
|| note->in_event_class ("trill-span-event"))
// option to skip accidentals on string harmonics
&& (to_boolean (get_property ("harmonicAccidentals"))
- || info.grob ()->get_property ("style") != ly_symbol2scm ("harmonic"))
+ || !scm_is_eq (info.grob ()->get_property ("style"),
+ ly_symbol2scm ("harmonic")))
// ignore accidentals in non-printing voices like NullVoice
&& !to_boolean (info.context ()->get_property ("nullAccidentals")))
{
SCM key = scm_cons (scm_from_int (n), scm_from_long (stagger ? context_hash : 1));
// assoc because we're dealing with pairs
SCM entry = scm_assoc (key, accs);
- if (entry == SCM_BOOL_F)
+ if (scm_is_false (entry))
entry = SCM_EOL;
else
entry = scm_cdr (entry);
for (vsize i = ret.size (); i--;)
if (Grob *s = Rhythmic_head::get_stem (ret[i]))
ret.push_back (s);
-
+
uniquify (ret);
return ret;
}
SCM fv = ly_assoc_get (scm_cons (scm_from_int (start), scm_from_int (end)),
me->get_property ("minimum-translations-alist"),
SCM_EOL);
- if (fv != SCM_EOL)
+ if (!scm_is_null (fv))
return ly_scm2floatvector (fv);
}
Ambitus_engraver::acknowledge_note_head (Grob_info info)
{
Stream_event *nr = info.event_cause ();
- if (nr && nr->in_event_class ("note-event"))
+ if (nr && nr->in_event_class ("note-event")
+ && !to_boolean (info.grob ()->get_property ("ignore-ambitus")))
{
SCM p = nr->get_property ("pitch");
/*
scm_from_int (p.get_notename ())),
start_key_sig_);
- if (handle == SCM_BOOL_F)
+ if (scm_is_false (handle))
handle = scm_assoc (scm_from_int (p.get_notename ()),
start_key_sig_);
- Rational sig_alter = (handle != SCM_BOOL_F)
+ Rational sig_alter = (scm_is_true (handle))
? robust_scm2rational (scm_cdr (handle), Rational (0))
: Rational (0);
bool
Auto_beam_engraver::test_moment (Direction dir, Moment test_mom, Moment dur)
{
- return scm_call_4 (get_property ("autoBeamCheck"),
- context ()->self_scm (),
- scm_from_int (dir),
- test_mom.smobbed_copy (),
- dur.smobbed_copy ())
- != SCM_BOOL_F;
+ return scm_is_true (scm_call_4 (get_property ("autoBeamCheck"),
+ context ()->self_scm (),
+ scm_from_int (dir),
+ test_mom.smobbed_copy (),
+ dur.smobbed_copy ()));
}
void
durlog - 2,
Stem::is_invisible (stem),
stem_duration->factor (),
- (stem->get_property ("tuplet-start") == SCM_BOOL_T));
+ (to_boolean (stem->get_property ("tuplet-start"))));
stems_->push_back (stem);
last_add_mom_ = now;
extend_mom_ = max (extend_mom_, now) + get_event_length (ev, now);
{
SCM directive = me->get_property ("outside-staff-placement-directive");
- if ((directive == ly_symbol2scm ("left-to-right-greedy"))
- || (directive == ly_symbol2scm ("left-to-right-polite"))
- || (directive == ly_symbol2scm ("right-to-left-greedy"))
- || (directive == ly_symbol2scm ("right-to-left-polite")))
+ if (scm_is_eq (directive, ly_symbol2scm ("left-to-right-greedy"))
+ || scm_is_eq (directive, ly_symbol2scm ("left-to-right-polite"))
+ || scm_is_eq (directive, ly_symbol2scm ("right-to-left-greedy"))
+ || scm_is_eq (directive, ly_symbol2scm ("right-to-left-polite")))
return directive;
me->warning (_f ("\"%s\" is not a valid outside-staff-placement-directive",
SCM directive
= valid_outside_staff_placement_directive (me);
- bool l2r = ((directive == ly_symbol2scm ("left-to-right-greedy"))
- || (directive == ly_symbol2scm ("left-to-right-polite")));
+ bool l2r = (scm_is_eq (directive, ly_symbol2scm ("left-to-right-greedy"))
+ || scm_is_eq (directive, ly_symbol2scm ("left-to-right-polite")));
- bool polite = ((directive == ly_symbol2scm ("left-to-right-polite"))
- || (directive == ly_symbol2scm ("right-to-left-polite")));
+ bool polite = (scm_is_eq (directive, ly_symbol2scm ("left-to-right-polite"))
+ || scm_is_eq (directive, ly_symbol2scm ("right-to-left-polite")));
vector<Box> boxes;
vector<Skyline_pair> skylines_to_merge;
{
bar_ = make_item ("BarLine", SCM_EOL);
SCM gl = get_property ("whichBar");
- if (scm_equal_p (gl, bar_->get_property ("glyph")) != SCM_BOOL_T)
+ if (!ly_is_equal (gl, bar_->get_property ("glyph")))
bar_->set_property ("glyph", gl);
}
}
alternative_event_ = ev;
int current_barnumber = robust_scm2int (get_property ("currentBarNumber"), 0);
Direction alternative_dir = robust_scm2dir (ev->get_property ("alternative-dir"), CENTER);
- bool make_alternative = get_property ("alternativeNumberingStyle") == ly_symbol2scm ("numbers")
- || get_property ("alternativeNumberingStyle") == ly_symbol2scm ("numbers-with-letters");
+ bool make_alternative = scm_is_eq (get_property ("alternativeNumberingStyle"),
+ ly_symbol2scm ("numbers"))
+ || scm_is_eq (get_property ("alternativeNumberingStyle"),
+ ly_symbol2scm ("numbers-with-letters"));
if (make_alternative)
{
/*
create_items ();
SCM alternative_style = get_property ("alternativeNumberingStyle");
string text_tag = "";
- if (alternative_style == ly_symbol2scm ("numbers-with-letters"))
+ if (scm_is_eq (alternative_style, ly_symbol2scm ("numbers-with-letters")))
{
if (alternative_event_)
{
max (durlog - 2, 0),
Stem::is_invisible (stem),
stem_duration->factor (),
- (stem->get_property ("tuplet-start") == SCM_BOOL_T));
+ (to_boolean (stem->get_property ("tuplet-start"))));
Beam::add_stem (beam_, stem);
}
placing this here avoids warnings downstream */
if (heads.size())
{
- if (heads[0]->get_property ("style") == ly_symbol2scm ("kievan"))
+ if (scm_is_eq (heads[0]->get_property ("style"),
+ ly_symbol2scm ("kievan")))
{
if (dir == CENTER)
dir = DOWN;
for (SCM s = scm_car (right_beaming); scm_is_pair (s); s = scm_cdr (s))
{
int k = -right_dir * scm_to_int (scm_car (s)) + i;
- if (scm_c_memq (scm_from_int (k), left_beaming) != SCM_BOOL_F)
+ if (scm_is_true (scm_c_memq (scm_from_int (k), left_beaming)))
count++;
}
int beam_count = get_beam_count (me);
SCM shorten_list = me->get_property ("beamed-stem-shorten");
- if (shorten_list == SCM_EOL)
+ if (scm_is_null (shorten_list))
return scm_from_int (0);
Real staff_space = Staff_symbol_referencer::staff_space (me);
for (SCM s = scm_car (beaming); scm_is_pair (s); s = scm_cdr (s))
{
- if (scm_c_memq (scm_car (s), scm_cdr (beaming)) != SCM_BOOL_F)
+ if (scm_is_true (scm_c_memq (scm_car (s), scm_cdr (beaming))))
l.add_point (scm_to_int (scm_car (s)));
}
{
Grob *stem = stems[i];
SCM beaming_prop = stem->get_property ("beaming");
- if (beaming_prop == SCM_EOL
- || index_get_cell (beaming_prop, d) == SCM_EOL)
+ if (scm_is_null (beaming_prop)
+ || scm_is_null (index_get_cell (beaming_prop, d)))
{
int count = beaming->beamlet_count (i, d);
if (i > 0
SCM s = scm_assoc (align_name, column_alist_);
Item *group = 0;
- if (s != SCM_BOOL_F)
+ if (scm_is_true (s))
{
Grob *e = Grob::unsmob (scm_cdr (s));
group = dynamic_cast<Item *> (e);
SCM order = break_align_order (me);
- if (order == SCM_BOOL_F)
+ if (scm_is_false (order))
return elts;
vector<Grob *> writable_elts (elts);
Grob *elt = elts[i];
if (edge_idx == VPOS
- && (elt->get_property ("break-align-symbol")
- == ly_symbol2scm ("left-edge")))
+ && scm_is_eq (elt->get_property ("break-align-symbol"),
+ ly_symbol2scm ("left-edge")))
edge_idx = idx;
SCM l = elt->get_property ("space-alist");
}
}
- if (rsym == ly_symbol2scm ("left-edge"))
+ if (scm_is_eq (rsym, ly_symbol2scm ("left-edge")))
edge_idx = next_idx;
SCM entry = SCM_EOL;
if (r)
{
- if (type == ly_symbol2scm ("extra-space"))
+ if (scm_is_eq (type, ly_symbol2scm ("extra-space")))
offsets[next_idx] = extents[idx][RIGHT] + distance
- extents[next_idx][LEFT];
/* should probably junk minimum-space */
- else if (type == ly_symbol2scm ("minimum-space"))
+ else if (scm_is_eq (type, ly_symbol2scm ("minimum-space")))
offsets[next_idx] = max (extents[idx][RIGHT], distance);
}
else
SCM newcar = do_break_substitution (scm_car (src));
SCM oldcdr = scm_cdr (src);
- if (newcar == SCM_UNDEFINED
- && (scm_is_pair (oldcdr) || oldcdr == SCM_EOL))
+ if (SCM_UNBNDP (newcar)
+ && (scm_is_pair (oldcdr) || scm_is_null (oldcdr)))
{
/*
This is tail-recursion, ie.
else
val = do_break_substitution (val);
- if (val != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (val))
{
/*
for ly:grob? properties, SCM_UNDEFINED could leak out
if (!Pitch::is_smob (p))
continue;
- if (n->get_property ("bass") == SCM_BOOL_T)
+ if (to_boolean (n->get_property ("bass")))
bass = p;
else
{
}
else
pitches = scm_cons (p, pitches);
- if (n->get_property ("inversion") == SCM_BOOL_T)
+ if (to_boolean (n->get_property ("inversion")))
{
inversion = p;
if (!scm_is_number (oct))
SCM transposition = get_property ("clefTransposition");
SCM force_clef = get_property ("forceClef");
- if (clefpos == SCM_EOL
- || scm_equal_p (glyph, prev_glyph_) == SCM_BOOL_F
- || scm_equal_p (clefpos, prev_cpos_) == SCM_BOOL_F
- || scm_equal_p (transposition, prev_transposition_) == SCM_BOOL_F
+ if (scm_is_null (clefpos)
+ || !ly_is_equal (glyph, prev_glyph_)
+ || !ly_is_equal (clefpos, prev_cpos_)
+ || !ly_is_equal (transposition, prev_transposition_)
|| to_boolean (force_clef))
{
apply_on_children (context (),
ly_lily_module_constant ("invalidate-alterations"));
set_glyph ();
- if (prev_cpos_ != SCM_BOOL_F || to_boolean (get_property ("firstClef")))
+ if (scm_is_true (prev_cpos_) || to_boolean (get_property ("firstClef")))
create_clef ();
if (clef_)
static SCM
min_permission (SCM perm1, SCM perm2)
{
- if (perm1 == ly_symbol2scm ("force"))
+ if (scm_is_eq (perm1, ly_symbol2scm ("force")))
return perm2;
- if (perm1 == ly_symbol2scm ("allow")
- && perm2 != ly_symbol2scm ("force"))
+ if (scm_is_eq (perm1, ly_symbol2scm ("allow"))
+ && !scm_is_eq (perm2, ly_symbol2scm ("force")))
return perm2;
return SCM_EOL;
}
Context_def::add_context_mod (SCM mod)
{
SCM tag = scm_car (mod);
- if (ly_symbol2scm ("description") == tag)
+ if (scm_is_eq (tag, ly_symbol2scm ("description")))
{
description_ = scm_cadr (mod);
return;
if (scm_is_string (sym))
sym = scm_string_to_symbol (sym);
- if (ly_symbol2scm ("default-child") == tag)
+ if (scm_is_eq (tag, ly_symbol2scm ("default-child")))
default_child_ = sym;
- else if (ly_symbol2scm ("consists") == tag
- || ly_symbol2scm ("remove") == tag)
+ else if (scm_is_eq (tag, ly_symbol2scm ("consists"))
+ || scm_is_eq (tag, ly_symbol2scm ("remove")))
{
translator_mods_ = scm_cons (scm_list_2 (tag, sym), translator_mods_);
}
- else if (ly_symbol2scm ("accepts") == tag
- || ly_symbol2scm ("denies") == tag)
+ else if (scm_is_eq (tag, ly_symbol2scm ("accepts"))
+ || scm_is_eq (tag, ly_symbol2scm ("denies")))
accept_mods_ = scm_cons (scm_list_2 (tag, sym), accept_mods_);
- else if (ly_symbol2scm ("pop") == tag
- || ly_symbol2scm ("push") == tag
- || ly_symbol2scm ("assign") == tag
- || ly_symbol2scm ("unset") == tag
- || ly_symbol2scm ("apply") == tag)
+ else if (scm_is_eq (tag, ly_symbol2scm ("pop"))
+ || scm_is_eq (tag, ly_symbol2scm ("push"))
+ || scm_is_eq (tag, ly_symbol2scm ("assign"))
+ || scm_is_eq (tag, ly_symbol2scm ("unset"))
+ || scm_is_eq (tag, ly_symbol2scm ("apply")))
property_ops_ = scm_cons (mod, property_ops_);
- else if (ly_symbol2scm ("alias") == tag)
+ else if (scm_is_eq (tag, ly_symbol2scm ("alias")))
context_aliases_ = scm_cons (sym, context_aliases_);
- else if (ly_symbol2scm ("translator-type") == tag)
+ else if (scm_is_eq (tag, ly_symbol2scm ("translator-type")))
translator_group_type_ = sym;
- else if (ly_symbol2scm ("context-name") == tag)
+ else if (scm_is_eq (tag, ly_symbol2scm ("context-name")))
context_name_ = sym;
else
programming_error ("unknown context mod tag");
{
SCM tag = scm_caar (s);
SCM sym = scm_cadar (s);
- if (tag == ly_symbol2scm ("accepts"))
+ if (scm_is_eq (tag, ly_symbol2scm ("accepts")))
acc = scm_cons (sym, acc);
- else if (tag == ly_symbol2scm ("denies"))
+ else if (scm_is_eq (tag, ly_symbol2scm ("denies")))
acc = scm_delete_x (sym, acc);
}
for (SCM s = user_mod; scm_is_pair (s); s = scm_cdr (s))
{
SCM entry = scm_car (s);
- if (scm_car (entry) == ly_symbol2scm ("default-child"))
+ if (scm_is_eq (scm_car (entry), ly_symbol2scm ("default-child")))
{
name = scm_cadr (entry);
break;
if (scm_is_string (arg))
arg = scm_string_to_symbol (arg);
- if (ly_symbol2scm ("consists") == tag)
+ if (scm_is_eq (tag, ly_symbol2scm ("consists")))
l1 = scm_cons (arg, l1);
- else if (ly_symbol2scm ("remove") == tag
+ else if (scm_is_eq (tag, ly_symbol2scm ("remove"))
&& (scm_is_pair (arg)
|| ly_is_procedure (arg)
|| get_translator (arg)))
"Creates a context modification, optionally initialized"
" via the list of modifications @var{mod-list}.")
{
- if (mod_list != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (mod_list))
{
LY_ASSERT_TYPE (ly_cheap_is_list, mod_list, 1);
return Context_mod (mod_list).smobbed_copy ();
SCM type = scm_car (entry);
entry = scm_cdr (entry);
- if (type == ly_symbol2scm ("push"))
+ if (scm_is_eq (type, ly_symbol2scm ("push")))
{
SCM context_prop = scm_car (entry);
SCM val = scm_cadr (entry);
SCM grob_prop_path = scm_cddr (entry);
Grob_property_info (tg, context_prop).push (grob_prop_path, val);
}
- else if (type == ly_symbol2scm ("pop"))
+ else if (scm_is_eq (type, ly_symbol2scm ("pop")))
{
SCM context_prop = scm_car (entry);
SCM grob_prop_path = scm_cdr (entry);
Grob_property_info (tg, context_prop).pop (grob_prop_path);
}
- else if (type == ly_symbol2scm ("assign"))
+ else if (scm_is_eq (type, ly_symbol2scm ("assign")))
tg->set_property (scm_car (entry), scm_cadr (entry));
- else if (type == ly_symbol2scm ("apply"))
+ else if (scm_is_eq (type, ly_symbol2scm ("apply")))
scm_apply_1 (scm_car (entry), tg->self_scm (), scm_cdr (entry));
- else if (type == ly_symbol2scm ("unset"))
+ else if (scm_is_eq (type, ly_symbol2scm ("unset")))
tg->unset_property (scm_car (entry));
}
}
Context *t = Context::unsmob (context);
SCM result = t->get_property (sym);
- return def != SCM_UNDEFINED && scm_is_null (result) ? def : result;
+ return !SCM_UNBNDP (def) && scm_is_null (result) ? def : result;
}
LY_DEFINE (ly_context_set_property_x, "ly:context-set-property!",
bool
Context::is_removable () const
{
- return context_list_ == SCM_EOL && ! client_count_
+ return scm_is_null (context_list_) && ! client_count_
&& !dynamic_cast<Global_context const *> (daddy_context_);
}
if (Context *existing = find_context_below (this, n, id))
return existing;
- if (n == ly_symbol2scm ("Bottom"))
+ if (scm_is_eq (n, ly_symbol2scm ("Bottom")))
{
Context *tg = get_default_interpreter (id);
return tg;
unset_property (sym);
return;
}
-
+
bool ok = true;
ok = type_check_assignment (sym, val, ly_symbol2scm ("translation-type?"));
// but the Context_def expects to see elements of the form ('accepts symbol).
SCM accepts = SCM_EOL;
for (SCM s = definition_mods_; scm_is_pair (s); s = scm_cdr (s))
- if (scm_caar (s) == ly_symbol2scm ("accepts"))
+ if (scm_is_eq (scm_caar (s), ly_symbol2scm ("accepts")))
{
SCM elt = scm_list_2 (scm_caar (s), scm_string_to_symbol (scm_cadar (s)));
accepts = scm_cons (elt, accepts);
if (scm_is_eq (sym, context_name_symbol ()))
return true;
- return scm_c_memq (sym, aliases_) != SCM_BOOL_F;
+ return scm_is_true (scm_c_memq (sym, aliases_));
}
void
SCM clefpos = get_property ("cueClefPosition");
SCM transposition = get_property ("cueClefTransposition");
- if (scm_equal_p (glyph, prev_glyph_) == SCM_BOOL_F
- || scm_equal_p (clefpos, prev_cpos_) == SCM_BOOL_F
- || scm_equal_p (transposition, prev_transposition_) == SCM_BOOL_F)
+ if (!ly_is_equal (glyph, prev_glyph_)
+ || !ly_is_equal (clefpos, prev_cpos_)
+ || !ly_is_equal (transposition, prev_transposition_))
{
set_glyph ();
if (scm_is_string (glyph))
get_grob_direction (Grob *me)
{
SCM d = me->get_property ("direction");
- if (d == ly_symbol2scm ("calculation-in-progress"))
+ if (scm_is_eq (d, ly_symbol2scm ("calculation-in-progress")))
{
programming_error ("Grob direction requested while calculation in"
" progress.");
{
SCM list = scm_hashq_ref (listeners_, ev_class, SCM_EOL);
- if (list == SCM_EOL)
+ if (scm_is_null (list))
{
programming_error ("remove_listener called with incorrect class.");
return;
int priority = ++disp->priority_count_;
// Don't register twice to the same dispatcher.
- if (scm_assq (disp->self_scm (), dispatchers_) != SCM_BOOL_F)
+ if (scm_is_true (scm_assq (disp->self_scm (), dispatchers_)))
{
warning (_ ("Already listening to dispatcher, ignoring request"));
return;
cfg.remove_collision (p);
cfg[p] = dp;
- if (Staff_symbol_referencer::on_line (dp.dot_, p) &&
- dp.dot_->get_property ("style") != ly_symbol2scm ("kievan"))
+ if (Staff_symbol_referencer::on_line (dp.dot_, p)
+ && !scm_is_eq (dp.dot_->get_property ("style"),
+ ly_symbol2scm ("kievan")))
cfg.remove_collision (p);
}
percent_event_->self_scm ());
SCM count = percent_event_->get_property ("repeat-count");
- if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats"))
+ if (!scm_is_null (count) && to_boolean (get_property ("countPercentRepeats"))
&& check_repeat_count_visibility (context (), count))
{
Item *double_percent_counter
SCM defn = SCM_EOL;
- if (scm_hash_table_p (tab) == SCM_BOOL_T)
+ if (to_boolean (scm_hash_table_p (tab)))
defn = scm_hashq_ref (tab, drum_type, SCM_EOL);
if (scm_is_pair (defn))
SCM style = scm_car (defn);
SCM script = scm_cadr (defn);
- if (scm_integer_p (pos) == SCM_BOOL_T)
+ if (scm_is_integer (pos))
note->set_property ("staff-position", pos);
if (scm_is_symbol (style))
note->set_property ("style", style);
SCM defn = SCM_EOL;
if (scm_is_symbol (sym)
- && (scm_hash_table_p (tab) == SCM_BOOL_T))
+ && to_boolean (scm_hash_table_p (tab)))
defn = scm_hashq_ref (tab, sym, SCM_EOL);
if (Pitch *pit = Pitch::unsmob (defn))
LY_ASSERT_TYPE (scm_is_integer, length, 1);
int dots = 0;
- if (dotcount != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (dotcount))
{
LY_ASSERT_TYPE (scm_is_integer, dotcount, 2);
dots = scm_to_int (dotcount);
char const *ctxprop)
{
SCM spanner_type = evt->get_property (evprop);
- if (spanner_type == SCM_EOL)
+ if (scm_is_null (spanner_type))
spanner_type = get_property (ctxprop);
return spanner_type;
}
SCM cresc_type = get_property_setting (current_span_event_, "span-type",
(start_type + "Spanner").c_str ());
- if (cresc_type == ly_symbol2scm ("text"))
+ if (scm_is_eq (cresc_type, ly_symbol2scm ("text")))
{
current_spanner_
= make_spanner ("DynamicTextSpanner",
early: this allows dynamics to be spaced individually instead of
being linked together.
*/
- if (current_spanner_->get_property ("style") == ly_symbol2scm ("none"))
+ if (scm_is_eq (current_spanner_->get_property ("style"),
+ ly_symbol2scm ("none")))
current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
}
else
{
- if (cresc_type != ly_symbol2scm ("hairpin"))
+ if (!scm_is_eq (cresc_type, ly_symbol2scm ("hairpin")))
{
string as_string = ly_scm_write_string (cresc_type);
current_span_event_
string type;
SCM start_sym = scm_car (ev->get_property ("class"));
- if (start_sym == ly_symbol2scm ("decrescendo-event"))
+ if (scm_is_eq (start_sym, ly_symbol2scm ("decrescendo-event")))
type = "decrescendo";
- else if (start_sym == ly_symbol2scm ("crescendo-event"))
+ else if (scm_is_eq (start_sym, ly_symbol2scm ("crescendo-event")))
type = "crescendo";
else
programming_error ("unknown dynamic spanner type");
s = get_property ("instrumentName");
if (!scm_is_string (s))
- s = scm_from_locale_string ("piano");
+ s = scm_from_ascii_string ("piano");
SCM eq = get_property ("instrumentEqualizer");
if (ly_is_procedure (eq))
Engraver_dispatch_list *dispatch
= Engraver_dispatch_list::unsmob (acklist);
- if (acklist == SCM_BOOL_F)
+ if (scm_is_false (acklist))
{
SCM ifaces
= scm_cdr (scm_assoc (ly_symbol2scm ("interfaces"), meta));
{
cause = m->to_event ()->unprotect ();
}
- if (e->get_property ("cause") == SCM_EOL
+ if (scm_is_null (e->get_property ("cause"))
&& (Stream_event::is_smob (cause) || Grob::is_smob (cause)))
e->set_property ("cause", cause);
SCM handle = scm_sloppy_assq (ly_symbol2scm ("meta"), props);
SCM klass = scm_cdr (scm_sloppy_assq (ly_symbol2scm ("class"), scm_cdr (handle)));
- if (klass == ly_symbol2scm ("Item"))
+ if (scm_is_eq (klass, ly_symbol2scm ("Item")))
grob = new Item (props);
- else if (klass == ly_symbol2scm ("Spanner"))
+ else if (scm_is_eq (klass, ly_symbol2scm ("Spanner")))
grob = new Spanner (props);
- else if (klass == ly_symbol2scm ("Paper_column"))
+ else if (scm_is_eq (klass, ly_symbol2scm ("Paper_column")))
grob = new Paper_column (props);
assert (grob);
#ifndef NDEBUG
if (ly_is_procedure (creation_callback))
scm_apply_0 (creation_callback,
- scm_list_n (grob->self_scm (), scm_from_locale_string (file),
- scm_from_int (line), scm_from_locale_string (fun), SCM_UNDEFINED));
+ scm_list_n (grob->self_scm (), scm_from_utf8_string (file),
+ scm_from_int (line), scm_from_ascii_string (fun), SCM_UNDEFINED));
#endif
return grob;
bool
ly_is_grob_cause (SCM obj)
{
- return Grob::is_smob (obj) || Stream_event::is_smob (obj) || (obj == SCM_EOL);
+ return Grob::is_smob (obj) || Stream_event::is_smob (obj) || scm_is_null (obj);
}
#include "translator.icc"
Align_interface::add_element (alignment_, group.group_);
}
- if (scm_memq (group.number_, get_property ("implicitBassFigures")) != SCM_BOOL_F)
+ if (scm_is_true (scm_memq (group.number_, get_property ("implicitBassFigures"))))
{
item->set_property ("transparent", SCM_BOOL_T);
item->set_property ("implicit", SCM_BOOL_T);
pat = FcFontMatch (NULL, pat, &result);
FcChar8 *str = 0;
if (FcPatternGetString (pat, FC_FILE, 0, &str) == FcResultMatch)
- scm_result = scm_from_locale_string ((char const *)str);
+ scm_result = scm_from_utf8_string ((char const *)str);
FcPatternDestroy (pat);
{
SCM defaults
= g->layout ()->lookup_variable (ly_symbol2scm ("font-defaults"));
- if (defaults == SCM_UNDEFINED)
+ if (SCM_UNBNDP (defaults))
defaults = SCM_EOL;
return g->get_property_alist_chain (defaults);
}
{
SCM defaults
= g->layout ()->lookup_variable (ly_symbol2scm ("text-font-defaults"));
- if (defaults == SCM_UNDEFINED)
+ if (SCM_UNBNDP (defaults))
defaults = SCM_EOL;
return g->get_property_alist_chain (defaults);
}
{
SCM entry = scm_c_vector_ref (font_vector, i);
- if (scm_promise_p (entry) == SCM_BOOL_T)
+ if (to_boolean (scm_promise_p (entry)))
{
Font_metric *fm = Font_metric::unsmob (scm_force (entry));
size = fm->design_size ();
{
LY_ASSERT_TYPE (scm_is_string, name, 1);
int sz = INT_MAX;
- if (size != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (size))
{
LY_ASSERT_TYPE (scm_is_number, size, 2);
sz = scm_to_int (size);
}
string contents = gulp_file_to_string (ly_scm2string (name), true, sz);
- return scm_from_locale_stringn (contents.c_str (), contents.length ());
+ return scm_from_latin1_stringn (contents.c_str (), contents.length ());
}
LY_DEFINE (ly_dir_p, "ly:dir?",
if (scm_is_pair (handle))
return scm_cdr (handle);
- if (default_value == SCM_UNDEFINED)
+ if (SCM_UNBNDP (default_value))
default_value = SCM_BOOL_F;
- if (strict_checking == SCM_BOOL_T)
+ if (to_boolean (strict_checking))
{
string key_string = ly_scm2string
(scm_object_to_string (key, SCM_UNDEFINED));
char str[400]; // ugh.
- if (scm_exact_p (s) == SCM_BOOL_F)
+ if (scm_is_false (scm_exact_p (s)))
{
Real r (scm_to_double (s));
if (isinf (r) || isnan (r))
else
snprintf (str, sizeof (str), "%d", int (scm_to_int (s)));
- return scm_from_locale_string (str);
+ return scm_from_ascii_string (str);
}
LY_DEFINE (ly_version, "ly:version", 0, 0, 0, (),
LY_DEFINE (ly_unit, "ly:unit", 0, 0, 0, (),
"Return the unit used for lengths as a string.")
{
- return scm_from_locale_string (INTERNAL_UNIT);
+ return scm_from_ascii_string (INTERNAL_UNIT);
}
LY_DEFINE (ly_dimension_p, "ly:dimension?", 1, 0, 0, (SCM d),
}
*p = 0;
- return scm_from_locale_string (buf);
+ return scm_from_utf8_string (buf);
}
LY_DEFINE (ly_effective_prefix, "ly:effective-prefix",
return ly_chain_assoc_get (key, scm_cdr (achain), default_value);
}
- if (strict_checking == SCM_BOOL_T)
+ if (to_boolean (strict_checking))
{
string key_string = ly_scm2string
(scm_object_to_string (key, SCM_UNDEFINED));
+ default_value_string + "'.");
}
- return default_value == SCM_UNDEFINED ? SCM_BOOL_F : default_value;
+ return SCM_UNBNDP (default_value) ? SCM_BOOL_F : default_value;
}
LY_DEFINE (ly_stderr_redirect, "ly:stderr-redirect",
string
format_single_argument (SCM arg, int precision, bool escape = false)
{
- if (scm_is_integer (arg) && scm_exact_p (arg) == SCM_BOOL_T)
+ if (scm_is_integer (arg) && scm_is_true (scm_exact_p (arg)))
return (String_convert::int_string (scm_to_int (arg)));
else if (scm_is_number (arg))
{
return (ly_symbol2string (arg));
else
{
- ly_progress (scm_from_locale_string ("\nUnsupported SCM value for format: ~a"),
+ ly_progress (scm_from_ascii_string ("\nUnsupported SCM value for format: ~a"),
scm_list_1 (arg));
}
for (; scm_is_pair (s); s = scm_cdr (s))
{
results.push_back (format_single_argument (scm_car (s), precision));
- if (scm_cdr (s) != SCM_EOL)
+ if (!scm_is_null (scm_cdr (s)))
results.push_back (" ");
}
- if (s != SCM_EOL)
+ if (!scm_is_null (s))
results.push_back (format_single_argument (s, precision));
}
{
extract_grob_set (g, "note-heads", note_heads);
SCM map = get_property ("glissandoMap");
- if (map == SCM_EOL)
+ if (scm_is_null (map))
for (vsize i = 0; i < note_heads.size (); i++)
{
note_column_1.push_back (i);
lispy_name += suffix;
SCM s = ly_symbol2scm (lispy_name.c_str ());
- SCM d = scm_from_locale_string (descr);
+ SCM d = scm_from_utf8_string (descr);
SCM l = parse_symbol_list (vars);
internal_add_interface (s, d, l);
void
check_interfaces_for_property (Grob const *me, SCM sym)
{
- if (sym == ly_symbol2scm ("meta"))
+ if (scm_is_eq (sym, ly_symbol2scm ("meta")))
{
/*
otherwise we get in a nasty recursion loop.
for (; !found && scm_is_pair (ifs); ifs = scm_cdr (ifs))
{
SCM iface = scm_hashq_ref (all_ifaces, scm_car (ifs), SCM_BOOL_F);
- if (iface == SCM_BOOL_F)
+ if (scm_is_false (iface))
{
string msg = to_string (_f ("Unknown interface `%s'",
ly_symbol2string (scm_car (ifs)).c_str ()));
continue;
}
- found = found || (scm_c_memq (sym, scm_caddr (iface)) != SCM_BOOL_F);
+ found = found || scm_is_true (scm_c_memq (sym, scm_caddr (iface)));
}
if (!found)
scm_list_n (self_scm (),
scm_from_locale_string (file),
scm_from_int (line),
- scm_from_locale_string (fun),
+ scm_from_ascii_string (fun),
sym, v, SCM_UNDEFINED));
#else
(void) file;
if (!ly_is_procedure (v)
&& !Simple_closure::is_smob (v)
&& !Unpure_pure_container::is_smob (v)
- && v != ly_symbol2scm ("calculation-in-progress"))
+ && !scm_is_eq (v, ly_symbol2scm ("calculation-in-progress")))
type_check_assignment (sym, v, ly_symbol2scm ("backend-type?"));
check_interfaces_for_property (this, sym);
#endif
SCM handle = scm_sloppy_assq (sym, mutable_property_alist_);
- if (handle != SCM_BOOL_F)
+ if (scm_is_true (handle))
return scm_cdr (handle);
handle = scm_sloppy_assq (sym, immutable_property_alist_);
check_interfaces_for_property (this, sym);
}
- return (handle == SCM_BOOL_F) ? SCM_EOL : scm_cdr (handle);
+ return scm_is_false (handle) ? SCM_EOL : scm_cdr (handle);
}
SCM
SCM val = get_property_data (sym);
#ifndef NDEBUG
- if (val == ly_symbol2scm ("calculation-in-progress"))
+ if (scm_is_eq (val, ly_symbol2scm ("calculation-in-progress")))
{
programming_error (to_string ("cyclic dependency: calculation-in-progress encountered for #'%s (%s)",
ly_symbol2string (sym).c_str (),
grob_property_callback_stack = scm_cdr (grob_property_callback_stack);
#endif
- if (value == SCM_UNSPECIFIED)
+ if (scm_is_eq (value, SCM_UNSPECIFIED))
{
value = get_property_data (sym);
- assert (value == SCM_EOL || value == marker);
- if (value == marker)
+ assert (scm_is_null (value) || scm_is_eq (value, marker));
+ if (scm_is_eq (value, marker))
*alist = scm_assq_remove_x (*alist, sym);
}
else
SCM s = scm_sloppy_assq (sym, object_alist_);
- if (s != SCM_BOOL_F)
+ if (scm_is_true (s))
{
SCM val = scm_cdr (s);
if (ly_is_procedure (val)
bool
Grob::internal_has_interface (SCM k)
{
- return scm_c_memq (k, interfaces_) != SCM_BOOL_F;
+ return scm_is_true (scm_c_memq (k, interfaces_));
}
SCM
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
LY_ASSERT_TYPE (scm_is_integer, beg, 3);
LY_ASSERT_TYPE (scm_is_integer, end, 4);
- if (val == SCM_UNDEFINED)
+ if (SCM_UNBNDP (val))
val = SCM_EOL;
SCM retval = sc->internal_get_pure_property (sym, scm_to_int (beg), scm_to_int (end));
- if (retval == SCM_EOL)
+ if (scm_is_null (retval))
retval = val;
return retval;
LY_ASSERT_SMOB (Grob, refp, 2);
LY_ASSERT_TYPE (scm_is_integer, beg, 3);
LY_ASSERT_TYPE (scm_is_integer, end, 4);
- if (val == SCM_UNDEFINED)
+ if (SCM_UNBNDP (val))
val = SCM_EOL;
Interval retval = sc->pure_height (ref, scm_to_int (beg), scm_to_int (end));
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
- if (val == SCM_UNDEFINED)
+ if (SCM_UNBNDP (val))
val = SCM_EOL;
SCM retval = sc->get_property (sym);
- if (retval == SCM_EOL)
+ if (scm_is_null (retval))
retval = val;
return retval;
LY_ASSERT_SMOB (Grob, grob, 1);
- if (global == SCM_UNDEFINED)
+ if (SCM_UNBNDP (global))
{
global = sc->layout ()->lookup_variable (ly_symbol2scm ("font-defaults"));
- if (global == SCM_UNDEFINED)
+ if (SCM_UNBNDP (global))
global = SCM_EOL;
}
}
}
- if (get_property_data ("X-extent") == SCM_EOL)
+ if (scm_is_null (get_property_data ("X-extent")))
set_property ("X-extent", Grob::stencil_width_proc);
- if (get_property_data ("Y-extent") == SCM_EOL)
+ if (scm_is_null (get_property_data ("Y-extent")))
set_property ("Y-extent",
Unpure_pure_container::make_smob (Grob::stencil_height_proc,
Grob::pure_stencil_height_proc));
- if (get_property_data ("vertical-skylines") == SCM_EOL)
+ if (scm_is_null (get_property_data ("vertical-skylines")))
set_property ("vertical-skylines",
Unpure_pure_container::make_smob (Grob::simple_vertical_skylines_from_extents_proc,
Grob::pure_simple_vertical_skylines_from_extents_proc));
- if (get_property_data ("horizontal-skylines") == SCM_EOL)
+ if (scm_is_null (get_property_data ("horizontal-skylines")))
set_property ("horizontal-skylines",
Unpure_pure_container::make_smob (Grob::simple_horizontal_skylines_from_extents_proc,
Grob::pure_simple_horizontal_skylines_from_extents_proc));
"meta "
"minimum-X-extent "
"minimum-Y-extent "
+ "parenthesis-friends "
"pure-Y-offset-in-progress "
"rotation "
"skyline-horizontal-padding "
debug_output ("]\n", false);
}
- scm_primitive_load_path (scm_from_locale_string ("lily.scm"));
+ scm_primitive_load_path (scm_from_ascii_string ("lily.scm"));
}
SCM global_lily_module;
#include "config.hh"
+#if GUILEV2
+// if Guile's internal representation switches to utf8, this should be
+// changed accordingly for efficiency's sake. This is used for
+// strings known to be in ASCII entirely, including any string
+// constants in the C code.
+#define scm_from_ascii_string scm_from_latin1_string
+#define scm_from_ascii_stringn scm_from_latin1_stringn
+#define scm_from_ascii_symbol scm_from_latin1_symbol
+#else
+#define scm_from_ascii_string scm_from_locale_string
+#define scm_from_ascii_stringn scm_from_locale_stringn
+#define scm_from_ascii_symbol scm_from_locale_symbol
+#define scm_from_latin1_string scm_from_locale_string
+#define scm_from_latin1_stringn scm_from_locale_stringn
+#define scm_from_utf8_string scm_from_locale_string
+#define scm_from_utf8_symbol scm_from_locale_symbol
+#define scm_to_utf8_string scm_to_locale_string
+#endif
+
#ifndef SMOB_FREE_RETURN_VAL
#define SMOB_FREE_RETURN_VAL(CL) 0
#endif
/* this lets us "overload" macros such as get_property to take
symbols as well as strings */
inline SCM
-scm_or_str2symbol (char const *c) { return scm_from_locale_symbol (c); }
+scm_or_str2symbol (char const *c) { return scm_from_utf8_symbol (c); }
inline SCM
scm_or_str2symbol (SCM s)
SCM value = cached; \
if (__builtin_constant_p ((x))) \
{ \
- if (!cached) \
+ if (!SCM_UNPACK (cached)) \
value = cached = scm_gc_protect_object (scm_or_str2symbol (x)); \
} \
else \
value; \
})
#else
-inline SCM ly_symbol2scm (char const *x) { return scm_from_locale_symbol ((x)); }
+inline SCM ly_symbol2scm (char const *x) { return scm_from_utf8_symbol ((x)); }
#endif
/*
SCM value = cached; \
if (__builtin_constant_p ((x))) \
{ \
- if (!cached) \
+ if (!SCM_UNPACK (cached)) \
value = cached = \
scm_variable_ref (scm_c_module_lookup (global_lily_module, (x))); \
} \
SCM ly_assoc_prepend_x (SCM alist, SCM key, SCM val);
inline bool ly_is_list (SCM x) { return scm_is_true (scm_list_p (x)); }
-inline bool ly_cheap_is_list (SCM x) { return scm_is_pair (x) || x == SCM_EOL; }
+inline bool ly_cheap_is_list (SCM x) { return scm_is_pair (x) || scm_is_null (x); }
inline bool ly_is_procedure (SCM x) { return scm_is_true (scm_procedure_p (x)); }
inline bool ly_is_port (SCM x) { return scm_is_true (scm_port_p (x)); }
#include "flower-proto.hh"
+class Acknowledge_information;
class All_font_metrics;
class Audio_column;
class Audio_control_function_value_change;
class Translator;
class Translator_group;
-typedef void (Engraver::*Engraver_void_function_engraver_grob_info) (Grob_info);
-typedef void (Translator::*Translator_void_method_ptr) ();
-
#endif /* LILY_PROTO_HH */
DECLARE_SCHEME_CALLBACK (pure_calc_y_offset, (SCM, SCM, SCM));
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (width, (SCM));
- DECLARE_SCHEME_CALLBACK (calc_style, (SCM));
+ DECLARE_SCHEME_CALLBACK (calc_shape, (SCM));
DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
static Stencil raw_stencil (Grob *, Real slope, Direction stemdir);
#include "lily-proto.hh"
#include "std-vector.hh"
#include "smobs.hh"
+#include "translator.hh"
struct Engraver_dispatch_entry
{
Engraver *engraver_;
- Engraver_void_function_engraver_grob_info function_;
+ Translator::Grob_info_callback function_;
};
class Engraver_dispatch_list : public Simple_smob<Engraver_dispatch_list>
struct Translator_method_binding
{
Translator *translator_;
- Translator_void_method_ptr method_;
+ Translator::Callback method_;
Translator_method_binding ()
{
}
- Translator_method_binding (Translator *tr, Translator_void_method_ptr ptr)
+ Translator_method_binding (Translator *tr, Translator::Callback ptr)
{
translator_ = tr;
method_ = ptr;
#include "std-vector.hh"
#include "protected-scm.hh"
-struct Acknowledge_information
-{
- SCM symbol_;
- Engraver_void_function_engraver_grob_info function_;
-
- Acknowledge_information ()
- {
- symbol_ = SCM_EOL;
- function_ = 0;
- }
-};
-
/*
Each translator class has a static list of listener records. Each
record makes one explains how to register one of the class's stream event
} translator_listener_record;
#define TRANSLATOR_DECLARATIONS_NO_LISTENER(NAME) \
-private: \
public: \
NAME (); \
VIRTUAL_COPY_CONSTRUCTOR (Translator, NAME); \
static SCM static_description_; \
static Drul_array<vector<Acknowledge_information> > acknowledge_static_array_drul_; \
- virtual void fetch_precomputable_methods (Translator_void_method_ptr methods[]); \
+ virtual void fetch_precomputable_methods (Callback methods[]); \
virtual SCM static_translator_description () const; \
virtual SCM translator_description () const; \
- static Engraver_void_function_engraver_grob_info static_get_acknowledger (SCM sym); \
- static Engraver_void_function_engraver_grob_info static_get_end_acknowledger(SCM); \
- virtual Engraver_void_function_engraver_grob_info get_acknowledger (SCM sym) \
+ static Grob_info_callback static_get_acknowledger (SCM sym); \
+ static Grob_info_callback static_get_end_acknowledger(SCM); \
+ virtual Grob_info_callback get_acknowledger (SCM sym) \
{ \
return static_get_acknowledger (sym); \
} \
- virtual Engraver_void_function_engraver_grob_info get_end_acknowledger (SCM sym) \
+ virtual Grob_info_callback get_end_acknowledger (SCM sym) \
{ \
return static_get_end_acknowledger (sym); \
} \
class Translator : public Smob<Translator>
{
public:
+ // We don't make Grob_info_callback specific to Engraver since we
+ // otherwise get into a circular mess with regard to the definitions
+ // as the timing of Engraver is exercised from within Translator
+ typedef void (Translator::*Grob_info_callback) (Grob_info);
+ typedef void (Translator::*Callback) (void);
int print_smob (SCM, scm_print_state *);
SCM mark_smob ();
static const char type_p_name_[];
friend class Translator_group;
};
+struct Acknowledge_information
+{
+ SCM symbol_;
+ Translator::Grob_info_callback function_;
+
+ Acknowledge_information ()
+ {
+ symbol_ = SCM_EOL;
+ function_ = 0;
+ }
+};
+
+
void add_translator (Translator *trans);
Translator *get_translator (SCM s);
-/*
+/* -*- c++ -*-
This file is part of LilyPond, the GNU music typesetter.
Copyright (C) 2005--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
#define DEFINE_ACKNOWLEDGERS(classname) \
Drul_array< vector<Acknowledge_information> > classname::acknowledge_static_array_drul_; \
- Engraver_void_function_engraver_grob_info \
+ Translator::Grob_info_callback \
classname::static_get_acknowledger (SCM sym) \
{ \
return generic_get_acknowledger (sym, &acknowledge_static_array_drul_[START]); \
} \
- Engraver_void_function_engraver_grob_info \
- classname::static_get_end_acknowledger (SCM sym) \
+ Translator::Grob_info_callback \
+ classname::static_get_end_acknowledger (SCM sym) \
{ \
return generic_get_acknowledger (sym, &acknowledge_static_array_drul_[STOP]); \
} \
DEFINE_TRANSLATOR_DOC(classname, desc, grobs, read, write) \
DEFINE_ACKNOWLEDGERS(classname) \
DEFINE_TRANSLATOR_LISTENER_LIST(classname) \
-
+
#define IMPLEMENT_FETCH_PRECOMPUTABLE_METHODS(T) \
void \
- T::fetch_precomputable_methods (Translator_void_method_ptr ptrs[]) \
+ T::fetch_precomputable_methods (Translator::Callback ptrs[]) \
{ \
ptrs[START_TRANSLATION_TIMESTEP] = \
- ((Translator_void_method_ptr) & T::start_translation_timestep == \
- (Translator_void_method_ptr) & Translator::start_translation_timestep) \
- ? 0 \
- : (Translator_void_method_ptr) & T::start_translation_timestep; \
- \
- ptrs[STOP_TRANSLATION_TIMESTEP] = \
- ((Translator_void_method_ptr) & T::stop_translation_timestep == (Translator_void_method_ptr) & Translator::stop_translation_timestep) \
- ? 0 \
- : (Translator_void_method_ptr) & T::stop_translation_timestep; \
- \
- ptrs[PROCESS_MUSIC] = \
- ((Translator_void_method_ptr) & T::process_music == (Translator_void_method_ptr) & Translator::process_music) \
- ? 0 \
- : (Translator_void_method_ptr) & T::process_music; \
- \
- ptrs[PROCESS_ACKNOWLEDGED] = \
- ((Translator_void_method_ptr) & T::process_acknowledged == (Translator_void_method_ptr) & Translator::process_acknowledged) \
- ? 0 \
- : (Translator_void_method_ptr) & T::process_acknowledged; \
+ (&T::start_translation_timestep \
+ == &Translator::start_translation_timestep) \
+ ? 0 \
+ : static_cast<Callback> (&T::start_translation_timestep); \
+ \
+ ptrs[STOP_TRANSLATION_TIMESTEP] = \
+ (& T::stop_translation_timestep == & Translator::stop_translation_timestep) \
+ ? 0 \
+ : static_cast<Callback> (&T::stop_translation_timestep); \
+ \
+ ptrs[PROCESS_MUSIC] = \
+ (&T::process_music == &Translator::process_music) \
+ ? 0 \
+ : static_cast<Callback> (&T::process_music); \
+ \
+ ptrs[PROCESS_ACKNOWLEDGED] = \
+ (&T::process_acknowledged == &Translator::process_acknowledged) \
+ ? 0 \
+ : static_cast<Callback> (&T::process_acknowledged); \
}
-void add_acknowledger (Engraver_void_function_engraver_grob_info ptr,
+void add_acknowledger (Translator::Grob_info_callback ptr,
char const *func_name,
vector<Acknowledge_information> *ack_array);
-Engraver_void_function_engraver_grob_info
+Translator::Grob_info_callback
generic_get_acknowledger (SCM sym,
vector<Acknowledge_information> const *ack_array);
#define ADD_ACKNOWLEDGER(CLASS, NAME) \
void CLASS ## NAME ## _ack_adder () \
{ \
- add_acknowledger ((Engraver_void_function_engraver_grob_info) & CLASS::acknowledge_ ## NAME, #NAME, &CLASS::acknowledge_static_array_drul_[START]); \
+ add_acknowledger (static_cast<Translator::Grob_info_callback> (&CLASS::acknowledge_ ## NAME), #NAME, &CLASS::acknowledge_static_array_drul_[START]); \
} \
ADD_SCM_INIT_FUNC (CLASS ## NAME ## _ack_adder_initclass, CLASS ## NAME ## _ack_adder);
#define ADD_END_ACKNOWLEDGER(CLASS, NAME) \
void CLASS ## NAME ## _end_ack_adder () \
{ \
- add_acknowledger ((Engraver_void_function_engraver_grob_info) & CLASS::acknowledge_end_ ## NAME, #NAME, &CLASS::acknowledge_static_array_drul_[STOP]); \
+ add_acknowledger (static_cast<Translator::Grob_info_callback> (&CLASS::acknowledge_end_ ## NAME), #NAME, &CLASS::acknowledge_static_array_drul_[STOP]); \
} \
ADD_SCM_INIT_FUNC (CLASS ## NAME ## _end_ack_adder_initclass, CLASS ## NAME ## _end_ack_adder);
if ((Text_interface::is_markup (long_text)
|| Text_interface::is_markup (short_text))
&& (!text_spanner_
- || short_text_ != short_text
- || long_text_ != long_text))
+ || !scm_is_eq (short_text_, short_text)
+ || !scm_is_eq (long_text_, long_text)))
{
if (text_spanner_)
stop_spanner ();
SCM key = get_property ("keyAlterations");
if ((to_boolean (get_property ("printKeyCancellation"))
- || key == SCM_EOL)
+ || scm_is_null (key))
&& !scm_is_eq (last, key))
{
SCM restore = SCM_EOL;
{
SCM new_alter_pair = scm_assoc (scm_caar (s), key);
Rational old_alter = robust_scm2rational (scm_cdar (s), 0);
- if (new_alter_pair == SCM_BOOL_F
+ if (scm_is_false (new_alter_pair)
|| ((ly_scm2rational (scm_cdr (new_alter_pair)) - old_alter) * old_alter
< Rational (0)))
{
void
Key_engraver::acknowledge_bar_line (Grob_info /* info */)
{
- if (scm_is_pair (get_property ("keyAlterations")))
- create_key (true);
+ create_key (true);
}
void
/*
backup rules
- after making a change to the lexer rules, run
+ after making a change to the lexer rules, run
flex -b <this lexer file>
- and make sure that
+ and make sure that
lex.backup
contains no backup states, but only the reminder
Compressed tables always back up.
%option debug
%option yyclass="Lily_lexer"
%option stack
-%option never-interactive
+%option never-interactive
%option warn
%x chords
yy_pop_state ();
} else {
LexerError (_ ("string expected after \\include").c_str ());
- if (sval != SCM_UNDEFINED) {
+ if (!SCM_UNBNDP (sval)) {
SCM err = scm_current_error_port ();
scm_puts ("This value was found instead: ", err);
scm_display (sval, err);
<chords,notes,figures>{RESTNAME}/[-_] | // pseudo backup rule
<chords,notes,figures>{RESTNAME} {
char const *s = YYText ();
- yylval = scm_from_locale_string (s);
+ yylval = scm_from_ascii_string (s);
return RESTNAME;
}
<chords,notes,figures>q/[-_] | // pseudo backup rule
hi.step_forward ();
SCM sval = ly_parse_scm (hi, be_safe_global && is_main_input_, parser_);
- if (sval == SCM_UNDEFINED)
+ if (SCM_UNBNDP (sval))
error_level_ = 1;
int n = hi.end () - hi.start ();
<quote,commandquote>{
\\{ESCAPED} {
char c = escaped_char (YYText ()[1]);
- yylval = scm_cons (scm_from_locale_stringn (&c, 1),
+ yylval = scm_cons (scm_from_ascii_stringn (&c, 1),
yylval);
}
[^\\""]+ {
- yylval = scm_cons (scm_from_locale_string (YYText_utf8 ()),
+ yylval = scm_cons (scm_from_utf8_string (YYText_utf8 ()),
yylval);
}
\" {
return STRING;
}
\\ {
- yylval = scm_cons (scm_from_locale_string (YYText ()),
+ yylval = scm_cons (scm_from_ascii_string (YYText ()),
yylval);
}
}
%%
-/* Make the lexer generate a token of the given type as the next token.
+/* Make the lexer generate a token of the given type as the next token.
TODO: make it possible to define a value for the token as well */
void
Lily_lexer::push_extra_token (Input const &where, int token_type, SCM scm)
m->set_spot (override_input (here_input ()));
}
- if (sid != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (sid))
return scan_scm_id (sid);
- string msg (_f ("unknown escaped string: `\\%s'", str));
+ string msg (_f ("unknown escaped string: `\\%s'", str));
LexerError (msg.c_str ());
yylval = ly_string2scm (str);
m->set_spot (override_input (here_input ()));
}
- if (sid != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (sid))
return scan_scm_id (sid);
- string msg (_f ("undefined character or shorthand: %s", str));
+ string msg (_f ("undefined character or shorthand: %s", str));
LexerError (msg.c_str ());
yylval = ly_string2scm (str);
optional = SCM_CDR (cs);
cs = SCM_CAR (cs);
}
-
+
if (ly_is_procedure (cs))
push_extra_token (here_input (), EXPECT_SCM, cs);
else
SCM handle = SCM_BOOL_F;
if (scm_is_pair (pitchname_tab_stack_))
handle = scm_hashq_get_handle (scm_cdar (pitchname_tab_stack_), sym);
-
+
if (scm_is_pair (handle)) {
yylval = scm_cdr (handle);
if (Pitch::is_smob (yylval))
return DRUM_PITCH;
}
else if ((YYSTATE == chords)
- && (handle = scm_hashq_get_handle (chordmodifier_tab_, sym))!= SCM_BOOL_F)
+ && scm_is_true (handle = scm_hashq_get_handle (chordmodifier_tab_, sym)))
{
yylval = scm_cdr (handle);
return CHORD_MODIFIER;
if (!Input::is_smob (m->get_property ("origin")))
m->set_spot (override_input (here_input ()));
}
-
+
int token;
switch (extra_token) {
case '$':
/*
urg, belong to string (_convert)
- and should be generalised
+ and should be generalised
*/
void
strip_leading_white (string&s)
void
strip_trailing_white (string&s)
{
- ssize i = s.length ();
- while (i--)
+ ssize i = s.length ();
+ while (i--)
if (!isspace (s[i]))
break;
return false;
}
if (ver < oldest_version)
- {
+ {
non_fatal_error (_f ("file too old: %s (oldest supported: %s)", ver.to_string (), oldest_version.to_string ()));
non_fatal_error (_ ("consider updating the input with the convert-ly script"));
return false;
}
return true;
}
-
+
/*
substitute _
if (ligature_)
{
primitives_.push_back (info);
- if (info.grob () && brew_ligature_primitive_proc != SCM_EOL)
+ if (info.grob () && !scm_is_null (brew_ligature_primitive_proc))
info.grob ()->set_property ("stencil", brew_ligature_primitive_proc);
}
}
char *
ly_scm2str0 (SCM str)
{
- return scm_to_locale_string (str);
+ return scm_to_utf8_string (str);
}
/*
{
// If undefined, some internal function caused it...should never happen.
- assert (val != SCM_UNDEFINED);
+ assert (!SCM_UNBNDP (val));
if (!scm_is_symbol (sym))
return false;
SCM type = scm_object_property (sym, type_symbol);
- if (type != SCM_EOL && !ly_is_procedure (type))
+ if (!scm_is_null (type) && !ly_is_procedure (type))
{
warning (_f ("cannot find property type-check for `%s' (%s).",
ly_symbol2string (sym).c_str (),
TODO: should remove #f from allowed vals?
*/
- if (val == SCM_EOL || val == SCM_BOOL_F)
+ if (scm_is_null (val) || scm_is_false (val))
return true;
- if (val != SCM_EOL
+ if (!scm_is_null (val)
&& ly_is_procedure (type)
- && scm_call_1 (type, val) == SCM_BOOL_F)
+ && scm_is_false (scm_call_1 (type, val)))
{
SCM typefunc = ly_lily_module_constant ("type-name");
SCM type_name = scm_call_1 (typefunc, type);
-
+
warning (_f ("type check for `%s' failed; value `%s' must be of type `%s'",
ly_symbol2string (sym).c_str (),
print_scm_val (val),
int
robust_scm2int (SCM k, int o)
{
- if (scm_integer_p (k) == SCM_BOOL_T)
+ if (scm_is_integer (k))
o = scm_to_int (k);
return o;
}
vsize
robust_scm2vsize (SCM k, vsize o)
{
- if (scm_integer_p (k) == SCM_BOOL_T)
+ if (scm_is_integer (k))
{
int i = scm_to_int (k);
if (i >= 0)
SCM *tail = &l;
for (vsize i = 0; i < keytable_->table_.size (); i++)
{
- *tail = scm_acons (scm_from_locale_string (keytable_->table_[i].name_),
+ *tail = scm_acons (scm_from_utf8_string (keytable_->table_[i].name_),
scm_from_int (keytable_->table_[i].tokcode_),
SCM_EOL);
for (SCM s = scopes_; scm_is_pair (s); s = scm_cdr (s))
{
SCM var = ly_module_lookup (scm_car (s), sym);
- if (var != SCM_BOOL_F)
+ if (scm_is_true (var))
return scm_variable_ref (var);
}
if (scm_is_pair (path))
{
SCM prev = ly_module_lookup (mod, sym);
- if (prev != SCM_BOOL_F)
+ if (scm_is_true (prev))
val = nested_property_alist (scm_variable_ref (prev), path, val);
}
scm_module_define (mod, sym, val);
out_file_name.ext_ = "";
out_file_name.root_ = "";
- if (ly_get_option (ly_symbol2scm ("gui")) != SCM_BOOL_T
- && ly_get_option (ly_symbol2scm ("strip-output-dir")) == SCM_BOOL_T)
+ if (!to_boolean (ly_get_option (ly_symbol2scm ("gui")))
+ && to_boolean (ly_get_option (ly_symbol2scm ("strip-output-dir"))))
{
out_file_name.dir_ = "";
}
LY_ASSERT_TYPE (ly_is_symbol, symbol, 2);
SCM val = parser->lexer_->lookup_identifier (ly_symbol2string (symbol));
- if (val != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (val))
return val;
else
return SCM_EOL;
get_paper (Lily_parser *parser)
{
SCM papers = parser->lexer_->lookup_identifier ("$papers");
- Output_def *layout = ((papers == SCM_UNDEFINED) || scm_is_null (papers))
+ Output_def *layout = (SCM_UNBNDP (papers) || scm_is_null (papers))
? 0 : Output_def::unsmob (scm_car (papers));
SCM default_paper = parser->lexer_->lookup_identifier ("$defaultpaper");
layout = layout ? layout : Output_def::unsmob (default_paper);
* robust_scm2double (me->get_property ("thickness"), 1);
SCM type = me->get_property ("style");
- if (type == ly_symbol2scm ("zigzag"))
+ if (scm_is_eq (type, ly_symbol2scm ("zigzag")))
return make_zigzag_line (me, from, to);
- else if (type == ly_symbol2scm ("trill"))
+ else if (scm_is_eq (type, ly_symbol2scm ("trill")))
return make_trill_line (me, from, to);
- else if (type == ly_symbol2scm ("none"))
+ else if (scm_is_eq (type, ly_symbol2scm ("none")))
return Stencil ();
Stencil stencil;
- if (type == ly_symbol2scm ("dashed-line") || type == ly_symbol2scm ("dotted-line"))
+ if (scm_is_eq (type, ly_symbol2scm ("dashed-line"))
+ || scm_is_eq (type, ly_symbol2scm ("dotted-line")))
{
Real fraction
- = type == ly_symbol2scm ("dotted-line")
+ = scm_is_eq (type, ly_symbol2scm ("dotted-line"))
? 0.0
: robust_scm2double (me->get_property ("dash-fraction"), 0.4);
SCM bound_details = me->get_property ("bound-details");
SCM details = SCM_BOOL_F;
- if (details == SCM_BOOL_F)
+ if (scm_is_false (details))
details = ly_assoc_get ((dir == LEFT)
? ly_symbol2scm ("left")
: ly_symbol2scm ("right"), bound_details, SCM_BOOL_F);
details = scm_append (scm_list_2 (extra, details));
}
- if (details == SCM_BOOL_F)
+ if (scm_is_false (details))
details = ly_assoc_get (ly_symbol2scm ("default"), bound_details, SCM_EOL);
SCM text = ly_assoc_get (ly_symbol2scm ("text"), details, SCM_BOOL_F);
SCM text = me->get_property ("text");
if (Text_interface::is_markup (text)
&& me->get_bound (LEFT)->break_status_dir () == CENTER
- && ly_assoc_get (ly_symbol2scm ("stencil"), alist, SCM_BOOL_F) == SCM_BOOL_F)
+ && scm_is_false (ly_assoc_get (ly_symbol2scm ("stencil"), alist, SCM_BOOL_F)))
{
Output_def *layout = me->layout ();
SCM properties = Font_interface::text_font_alist_chain (me);
Stencil
Lookup::blank (Box b)
{
- return Stencil (b, scm_from_locale_string (""));
+ return Stencil (b, scm_string (SCM_EOL));
}
Stencil
SCM val,
SCM result)
{
- if (scm_variable_bound_p (val) == SCM_BOOL_T)
+ if (to_boolean (scm_variable_bound_p (val)))
return scm_cons (scm_cons (key, scm_variable_ref (val)), result);
programming_error ("unbound variable in module");
return result;
{
SCM text = event_->get_property ("text");
- if (ly_is_equal (text, scm_from_locale_string (" ")))
+ if (ly_is_equal (text, scm_from_ascii_string (" ")))
{
if (last_text_)
last_text_->set_property ("self-alignment-X",
// " \"" + lilypond_datadir + "/scm/out\")";
//scm_c_eval_string (scm_pct_set_fallback.c_str() );
scm_primitive_eval
- (scm_list_3 (scm_from_locale_symbol ("set!"),
- scm_from_locale_symbol ("%compile-fallback-path"),
+ (scm_list_3 (scm_from_latin1_symbol ("set!"),
+ scm_from_latin1_symbol ("%compile-fallback-path"),
scm_from_locale_string (ly_scm_go_dir.c_str())));
#endif
if (!scm_is_number (m))
m = get_property ("rehearsalMark");
- if (scm_integer_p (m) == SCM_BOOL_T
- && scm_exact_p (m) == SCM_BOOL_T)
+ if (scm_is_integer (m)
+ && scm_is_true (scm_exact_p (m)))
{
int mark_count = scm_to_int (m);
mark_count++;
/*
TODO: use line interface
*/
- if (which == ly_symbol2scm ("bracket"))
+ if (scm_is_eq (which, ly_symbol2scm ("bracket")))
m = Lookup::bracket (X_AXIS, iv, t, -height, t);
- else if (which == ly_symbol2scm ("triangle"))
+ else if (scm_is_eq (which, ly_symbol2scm ("triangle")))
m = Lookup::triangle (iv, t, height);
m.align_to (Y_AXIS, DOWN);
internal_brew_primitive (Grob *me)
{
SCM primitive_scm = me->get_property ("primitive");
- if (primitive_scm == SCM_EOL)
+ if (scm_is_null (primitive_scm))
{
programming_error ("Mensural_ligature:"
" undefined primitive -> ignoring grob");
static bool
safe_is_member (SCM scm, SCM lst)
{
- return scm_list_p (lst) == SCM_BOOL_T
- && scm_member (scm, lst) != SCM_BOOL_F;
+ return ly_is_list (lst) && scm_is_true (scm_member (scm, lst));
}
void
Grob *g = info.grob ();
if (text_
- && g->get_property ("break-align-symbol")
- == ly_symbol2scm ("staff-bar"))
+ && scm_is_eq (g->get_property ("break-align-symbol"),
+ ly_symbol2scm ("staff-bar")))
bar_ = g;
else if (text_
&& !support_
SCM proc = ly_lily_module_constant ("midi-program");
SCM program = scm_call_1 (proc, ly_symbol2scm (audio_->str_.c_str ()));
- found = (program != SCM_BOOL_F);
+ found = (scm_is_true (program));
if (found)
program_byte = (Byte) scm_to_int (program);
else
SCM /* result */)
{
SCM module = (SCM) closure;
- if (scm_variable_bound_p (val) == SCM_BOOL_T)
+ if (to_boolean (scm_variable_bound_p (val)))
scm_module_define (module, key, scm_variable_ref (val));
return SCM_EOL;
}
{
SCM mod = scm_car (s);
SCM v = ly_module_lookup (mod, sym);
- if (SCM_VARIABLEP (v) && SCM_VARIABLE_REF (v) != SCM_UNDEFINED)
+ if (SCM_VARIABLEP (v) && !SCM_UNBNDP (SCM_VARIABLE_REF (v)))
return scm_variable_ref (v);
}
- if (def != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (def))
return def;
return SCM_BOOL_F;
}
Grob *last = 0;
for (vsize i = 0; i < numbers_.size (); i++)
{
- if (scm_from_int (d) == numbers_[i]->get_property ("direction"))
+ if (scm_is_eq (scm_from_int (d),
+ numbers_[i]->get_property ("direction")))
{
if (last)
Side_position_interface::add_support (numbers_[i], last);
numbers_.clear ();
Grob *last = last_numbers_.size () ? last_numbers_[0] : 0;
- if (last && last->get_property ("text") == SCM_EOL)
+ if (last && scm_is_null (last->get_property ("text")))
{
SCM thres = get_property ("restNumberThreshold");
int t = 1;
if (measure_count == 1)
{
- if (me->get_property ("staff-position") == SCM_EOL)
+ if (scm_is_null (me->get_property ("staff-position")))
{
int dir = get_grob_direction (me);
Real pos = Rest::staff_position_internal (me, mdl, dir);
{
SCM ifs = get_property ("types");
- return scm_c_memq (k, ifs) != SCM_BOOL_F;
+ return scm_is_true (scm_c_memq (k, ifs));
}
Music::Music (SCM init)
{
Pitch transposed = p->transposed (delta);
- if (prop == ly_symbol2scm ("tonic"))
+ if (scm_is_eq (prop, ly_symbol2scm ("tonic")))
transposed = Pitch (-1, transposed.get_notename (),
transposed.get_alteration ());
new_val = transposed.smobbed_copy ();
}
- else if (prop == ly_symbol2scm ("element"))
+ else if (scm_is_eq (prop, ly_symbol2scm ("element")))
{
if (Music *m = Music::unsmob (val))
m->transpose (delta);
}
- else if (prop == ly_symbol2scm ("elements")
- || prop == ly_symbol2scm ("articulations"))
+ else if (scm_is_eq (prop, ly_symbol2scm ("elements"))
+ || scm_is_eq (prop, ly_symbol2scm ("articulations")))
transpose_music_list (val, delta);
- else if (prop == ly_symbol2scm ("pitch-alist")
+ else if (scm_is_eq (prop, ly_symbol2scm ("pitch-alist"))
&& scm_is_pair (val))
new_val = ly_transpose_key_alist (val, delta.smobbed_copy ());
// when we don't want them displayed. So don't make space
// for them if 'stencil is #f
Grob *g = make_item ("StringNumber", ev->self_scm ());
- if (g->get_property ("stencil") != SCM_BOOL_F)
+ if (scm_is_true (g->get_property ("stencil")))
add_fingering (inf.grob (),
ly_symbol2scm ("StringNumber"), &string_numbers_,
ev, note_ev);
vector_sort (*scripts, less<Finger_tuple> ());
- bool up_p = scm_c_memq (ly_symbol2scm ("up"), orientations) != SCM_BOOL_F;
- bool down_p = scm_c_memq (ly_symbol2scm ("down"), orientations) != SCM_BOOL_F;
- bool left_p = scm_c_memq (ly_symbol2scm ("left"), orientations) != SCM_BOOL_F;
- bool right_p = scm_c_memq (ly_symbol2scm ("right"), orientations) != SCM_BOOL_F;
+ bool up_p = scm_is_true (scm_c_memq (ly_symbol2scm ("up"), orientations));
+ bool down_p = scm_is_true (scm_c_memq (ly_symbol2scm ("down"), orientations));
+ bool left_p = scm_is_true (scm_c_memq (ly_symbol2scm ("left"), orientations));
+ bool right_p = scm_is_true (scm_c_memq (ly_symbol2scm ("right"), orientations));
Direction hordir = (right_p) ? RIGHT : LEFT;
if (left_p || right_p)
{
SCM up_style = head_up->get_property ("style");
SCM down_style = head_down->get_property ("style");
if (merge_possible
- && (up_style == ly_symbol2scm ("fa") || up_style == ly_symbol2scm ("faThin"))
- && (down_style == ly_symbol2scm ("fa") || down_style == ly_symbol2scm ("faThin")))
+ && (scm_is_eq (up_style, ly_symbol2scm ("fa"))
+ || scm_is_eq (up_style, ly_symbol2scm ("faThin")))
+ && (scm_is_eq (down_style, ly_symbol2scm ("fa"))
+ || scm_is_eq (down_style, ly_symbol2scm ("faThin"))))
{
Offset att = Offset (0.0, -1.0);
head_up->set_property ("stem-attachment", ly_offset2scm (att));
"duration-log "
"note-names "
"accidental-grob "
+ "ignore-ambitus "
"glyph-name "
"stem-attachment "
"style "
string tab = otf->get_otf_table (string (ctag));
- return scm_from_locale_stringn ((char const *) tab.data (), tab.length ());
+ return scm_from_latin1_stringn ((char const *) tab.data (), tab.length ());
}
LY_DEFINE (ly_otf_font_p, "ly:otf-font?", 1, 0, 0,
string contents ((char const *)buffer, length);
contents = "(quote (" + contents + "))";
+#if GUILEV2
+ tab = scm_eval_string (scm_from_utf8_string (contents.c_str ()));
+#else
tab = scm_c_eval_string (contents.c_str ());
+#endif
free (buffer);
}
return tab;
SCM entry = scm_hashq_ref (lily_character_table_, sym, SCM_BOOL_F);
Offset o;
- if (entry == SCM_BOOL_F)
+ if (scm_is_false (entry))
return o;
SCM char_alist = entry;
SCM sym = ly_symbol2scm (name);
SCM alist = scm_hashq_ref (lily_character_table_, sym, SCM_BOOL_F);
- if (alist != SCM_BOOL_F)
+ if (scm_is_true (alist))
{
SCM bbox = scm_cdr (scm_assq (ly_symbol2scm ("bbox"), alist));
warning (_f ("FT_Get_Glyph_Name () error: %s",
freetype_error_string (code).c_str ()));
- *tail = scm_cons (scm_from_locale_string (name), SCM_EOL);
+ *tail = scm_cons (scm_from_ascii_string (name), SCM_EOL);
tail = SCM_CDRLOC (*tail);
}
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
SCM answer = op->lookup_variable (sym);
- if (answer == SCM_UNDEFINED)
+ if (SCM_UNBNDP (answer))
{
- if (val == SCM_UNDEFINED)
+ if (SCM_UNBNDP (val))
val = SCM_EOL;
answer = val;
SCM tab2 = b->lookup_variable (ly_symbol2scm ("pango-fonts"));
SCM alist1 = SCM_EOL;
- if (scm_hash_table_p (tab1) == SCM_BOOL_T)
+ if (to_boolean (scm_hash_table_p (tab1)))
{
alist1 = scm_append (ly_alist_vals (ly_hash2alist (tab1)));
Output_def::lookup_variable (SCM sym) const
{
SCM var = ly_module_lookup (scope_, sym);
- if (SCM_VARIABLEP (var) && SCM_VARIABLE_REF (var) != SCM_UNDEFINED)
+ if (SCM_VARIABLEP (var) && !SCM_UNBNDP (SCM_VARIABLE_REF (var)))
return SCM_VARIABLE_REF (var);
if (parent_)
? c_variable ("inner-margin")
: c_variable ("right-margin"));
- if (scm_paper_width == SCM_UNDEFINED
- || scm_left_margin_default == SCM_UNDEFINED
- || scm_right_margin_default == SCM_UNDEFINED)
+ if (SCM_UNBNDP (scm_paper_width)
+ || SCM_UNBNDP (scm_left_margin_default)
+ || SCM_UNBNDP (scm_right_margin_default))
{
programming_error ("called normalize () on paper with missing settings");
return;
if (twosided)
binding_offset = robust_scm2double (c_variable ("binding-offset"), 0);
- if (scm_line_width == SCM_UNDEFINED)
+ if (SCM_UNBNDP (scm_line_width))
{
- left_margin = ((scm_left_margin == SCM_UNDEFINED)
+ left_margin = (SCM_UNBNDP (scm_left_margin)
? left_margin_default
: scm_to_double (scm_left_margin));
- right_margin = ((scm_right_margin == SCM_UNDEFINED)
+ right_margin = (SCM_UNBNDP (scm_right_margin)
? right_margin_default
: scm_to_double (scm_right_margin)) + binding_offset;
line_width = paper_width - left_margin - right_margin;
else
{
line_width = scm_to_double (scm_line_width);
- if (scm_left_margin == SCM_UNDEFINED)
+ if (SCM_UNBNDP (scm_left_margin))
{
// Vertically center systems if only line-width is given
- if (scm_right_margin == SCM_UNDEFINED)
+ if (SCM_UNBNDP (scm_right_margin))
{
left_margin = (paper_width - line_width) / 2;
right_margin = left_margin;
else
{
left_margin = scm_to_double (scm_left_margin);
- right_margin = ((scm_right_margin == SCM_UNDEFINED)
+ right_margin = (SCM_UNBNDP (scm_right_margin)
? (paper_width - line_width - left_margin)
: scm_to_double (scm_right_margin)) + binding_offset;
}
SCM ret = SCM_EOL;
bool reset_footnotes_on_new_page = to_boolean (book_->top_paper ()->c_variable ("reset-footnotes-on-new-page"));
SCM label_page_table = book_->top_paper ()->c_variable ("label-page-table");
- if (label_page_table == SCM_UNDEFINED)
+ if (SCM_UNBNDP (label_page_table))
label_page_table = SCM_EOL;
// Build a list of (systems configuration . footnote-count) triples.
if ((!too_few_lines (line_count) && (next_height > cur_page_height && cur_rod_height > 0))
|| too_many_lines (next_line_count)
- || (prev && prev->page_permission_ == ly_symbol2scm ("force")))
+ || prev && scm_is_eq (prev->page_permission_, ly_symbol2scm ("force")))
{
line_count = cur.compressed_nontitle_lines_count_;
cur_rod_height = cur.full_height ();
system_count_on_this_page += cur_line.compressed_nontitle_lines_count_;
line++;
- if (cur_line.page_permission_ == ly_symbol2scm ("force"))
+ if (scm_is_eq (cur_line.page_permission_, ly_symbol2scm ("force")))
break;
}
if ((line > page_first_line)
&& (isinf (space.force_)
|| ((line > 0)
- && (cached_line_details_[line - 1].page_permission_ == ly_symbol2scm ("force")))))
+ && scm_is_eq (cached_line_details_[line - 1].page_permission_,
+ ly_symbol2scm ("force")))))
{
res.systems_per_page_.push_back (line - page_first_line);
res.force_.push_back (prev_force);
/* if there is a forced break, this reduces to 2 1-page problems */
cache_line_details (configuration);
for (vsize i = 0; i + 1 < cached_line_details_.size (); i++)
- if (cached_line_details_[i].page_permission_ == ly_symbol2scm ("force"))
+ if (scm_is_eq (cached_line_details_[i].page_permission_,
+ ly_symbol2scm ("force")))
{
vector<Line_details> lines1 (cached_line_details_.begin (), cached_line_details_.begin () + i + 1);
vector<Line_details> lines2 (cached_line_details_.begin () + i + 1, cached_line_details_.end ());
else if (Prob *p = Prob::unsmob (scm_car (s)))
{
SCM stencils = p->get_property ("footnotes");
- if (stencils == SCM_EOL)
+ if (scm_is_null (stencils))
continue;
for (SCM st = stencils; scm_is_pair (st); st = scm_cdr (st))
footnotes.push_back (0);
}
if (page_start > 0
- && lines_[page_start - 1].page_permission_ == ly_symbol2scm ("force"))
+ && scm_is_eq (lines_[page_start - 1].page_permission_,
+ ly_symbol2scm ("force")))
break;
}
return !isinf (cur.demerits_);
if (duration_[LEFT] < penalty.duration_[LEFT])
ret.push_back (Page_turn_event (duration_[LEFT], penalty.duration_[LEFT], permission_, penalty_));
- if (penalty.permission_ != SCM_EOL)
+ if (!scm_is_null (penalty.permission_))
ret.push_back (Page_turn_event (intersect[LEFT], intersect[RIGHT], permission_, new_pen));
if (penalty.duration_[RIGHT] < duration_[RIGHT])
for (; scm_is_pair (cs); cs = scm_cdr (cs))
{
SCM command = scm_car (cs);
- if (command == ly_symbol2scm ("start-repeat"))
+ if (scm_is_eq (command, ly_symbol2scm ("start-repeat")))
start = true;
- else if (command == ly_symbol2scm ("end-repeat"))
+ else if (scm_is_eq (command, ly_symbol2scm ("end-repeat")))
end = true;
}
SCM
Page_turn_engraver::max_permission (SCM perm1, SCM perm2)
{
- if (perm1 == SCM_EOL)
+ if (scm_is_null (perm1))
return perm2;
- if (perm1 == ly_symbol2scm ("allow") && perm2 == ly_symbol2scm ("force"))
+ if (scm_is_eq (perm1, ly_symbol2scm ("allow"))
+ && scm_is_eq (perm2, ly_symbol2scm ("force")))
return perm2;
return perm1;
}
for (vsize start = end; start--;)
{
if (start < end - 1
- && breakpoint_property (start + 1, "page-turn-permission") == ly_symbol2scm ("force"))
+ && scm_is_eq (breakpoint_property (start + 1, "page-turn-permission"),
+ ly_symbol2scm ("force")))
break;
if (start > 0 && best.demerits_ < state_[start - 1].demerits_)
char_id = scm_from_uint32 (pg);
}
else
- char_id = scm_from_locale_string (glyph_name);
+ char_id = scm_from_utf8_string (glyph_name);
PangoRectangle logical_sub_rect;
PangoRectangle ink_sub_rect;
variable that is bound to a *named* procedure, i.e. not a
lambda expression.
*/
- if (utf8_string != SCM_BOOL_F
- && scm_procedure_name (SCM_VARIABLE_REF (utf8_string)) != SCM_BOOL_F)
+ if (scm_is_true (utf8_string)
+ && scm_is_true (scm_procedure_name (SCM_VARIABLE_REF (utf8_string))))
has_utf8_string = true;
}
symbol_to_pango_style (SCM style)
{
PangoStyle pstyle = PANGO_STYLE_NORMAL;
- if (style == ly_symbol2scm ("italic"))
+ if (scm_is_eq (style, ly_symbol2scm ("italic")))
pstyle = PANGO_STYLE_ITALIC;
- else if (style == ly_symbol2scm ("oblique")
- || style == ly_symbol2scm ("slanted"))
+ else if (scm_is_eq (style, ly_symbol2scm ("oblique"))
+ || scm_is_eq (style, ly_symbol2scm ("slanted")))
pstyle = PANGO_STYLE_OBLIQUE;
return pstyle;
symbol_to_pango_variant (SCM variant)
{
PangoVariant pvariant = PANGO_VARIANT_NORMAL;
- if (variant == ly_symbol2scm ("caps"))
+ if (scm_is_eq (variant, ly_symbol2scm ("caps")))
pvariant = PANGO_VARIANT_SMALL_CAPS;
return pvariant;
}
symbol_to_pango_weight (SCM weight)
{
PangoWeight pw = PANGO_WEIGHT_NORMAL;
- if (weight == ly_symbol2scm ("bold"))
+ if (scm_is_eq (weight, ly_symbol2scm ("bold")))
pw = PANGO_WEIGHT_BOLD;
- if (weight == ly_symbol2scm ("heavy"))
+ if (scm_is_eq (weight, ly_symbol2scm ("heavy")))
pw = PANGO_WEIGHT_HEAVY;
- if (weight == ly_symbol2scm ("ultrabold"))
+ if (scm_is_eq (weight, ly_symbol2scm ("ultrabold")))
pw = PANGO_WEIGHT_ULTRABOLD;
- if (weight == ly_symbol2scm ("light"))
+ if (scm_is_eq (weight, ly_symbol2scm ("light")))
pw = PANGO_WEIGHT_LIGHT;
- if (weight == ly_symbol2scm ("ultralight"))
+ if (scm_is_eq (weight, ly_symbol2scm ("ultralight")))
pw = PANGO_WEIGHT_ULTRALIGHT;
return pw;
}
else
{
- if (scores_ == SCM_EOL)
+ if (scm_is_null (scores_))
return 0;
paper_->set_variable (ly_symbol2scm ("first-page-number"),
scm_from_long (*first_page_number));
with different line-widths) and why we need it at all.
*/
- if (paper_->c_variable ("line-width") == SCM_UNDEFINED)
+ if (SCM_UNBNDP (paper_->c_variable ("line-width")))
paper_->set_variable (ly_symbol2scm ("line-width"),
paper_->c_variable ("paper-width"));
SCM framework = ly_module_lookup (mod,
ly_symbol2scm ("output-framework"));
- if (framework != SCM_BOOL_F)
+ if (scm_is_true (framework))
{
SCM func = scm_variable_ref (framework);
scm_call_4 (func,
SCM framework
= ly_module_lookup (mod, ly_symbol2scm ("output-preview-framework"));
- if (framework != SCM_BOOL_F)
+ if (scm_is_true (framework))
{
SCM func = scm_variable_ref (framework);
scm_call_4 (func,
if (ly_is_module (scm_car (s)))
{
header = scm_car (s);
- if (header_0_ == SCM_EOL)
+ if (scm_is_null (header_0_))
header_0_ = header;
}
else if (Page_marker *page_marker = Page_marker::unsmob (scm_car (s)))
SCM
Paper_book::systems ()
{
- if (systems_ != SCM_BOOL_F)
+ if (scm_is_true (systems_))
return systems_;
systems_ = SCM_EOL;
{
SCM perm = ps->get_property ("page-break-permission");
Prob *next = Prob::unsmob (scm_cadr (s));
- if (perm == SCM_EOL)
+ if (scm_is_null (perm))
next->set_property ("penalty", scm_from_int (10001));
- else if (perm == ly_symbol2scm ("force"))
+ else if (scm_is_eq (perm, ly_symbol2scm ("force")))
next->set_property ("penalty", scm_from_int (-10001));
}
}
SCM
Paper_book::pages ()
{
- if (SCM_BOOL_F != pages_)
+ if (scm_is_true (pages_))
return pages_;
pages_ = SCM_EOL;
scm_call_2 (post_process, paper_->self_scm (), pages_);
/* set systems_ from the pages */
- if (systems_ == SCM_BOOL_F)
+ if (scm_is_false (systems_))
{
systems_ = SCM_EOL;
for (SCM p = pages_; scm_is_pair (p); p = scm_cdr (p))
for (vsize i = 0; i < break_events_.size (); i++)
{
SCM perm = break_events_[i]->get_property ("break-permission");
- if (perm == ly_symbol2scm ("force") || perm == ly_symbol2scm ("allow"))
+ if (scm_is_eq (perm, ly_symbol2scm ("force"))
+ || scm_is_eq (perm, ly_symbol2scm ("allow")))
warning (_ ("forced break was overridden by some other event, "
"should you be using bar checks?"));
}
for (;!align && scm_is_pair (align_syms); align_syms = scm_cdr (align_syms))
{
SCM align_sym = scm_car (align_syms);
- if (align_sym == ly_symbol2scm ("staff-bar")
- || align_sym == ly_symbol2scm ("break-alignment"))
+ if (scm_is_eq (align_sym, ly_symbol2scm ("staff-bar"))
+ || scm_is_eq (align_sym, ly_symbol2scm ("break-alignment")))
align = Pointer_group_interface::find_grob
(me, ly_symbol2scm ("elements"),
- (align_sym == ly_symbol2scm ("staff-bar")
+ (scm_is_eq (align_sym, ly_symbol2scm ("staff-bar"))
? Bar_line::non_empty_barline
: Break_alignment_interface::has_interface));
else
get_font_table (Output_def *def)
{
SCM font_table = def->lookup_variable (ly_symbol2scm ("scaled-fonts"));
- if (scm_hash_table_p (font_table) != SCM_BOOL_T)
+ if (!to_boolean (scm_hash_table_p (font_table)))
{
font_table = scm_c_make_hash_table (11);
def->set_variable (ly_symbol2scm ("scaled-fonts"), font_table);
get_pango_font_table (Output_def *def)
{
SCM font_table = def->lookup_variable (ly_symbol2scm ("pango-fonts"));
- if (scm_hash_table_p (font_table) != SCM_BOOL_T)
+ if (!to_boolean (scm_hash_table_p (font_table)))
{
font_table = scm_c_make_hash_table (11);
def->set_variable (ly_symbol2scm ("pango-fonts"), font_table);
void
Paper_outputter::close ()
{
- if (scm_port_p (file_) == SCM_BOOL_T)
+ if (ly_is_port (file_))
{
scm_close_port (file_);
/*
SCM
Paper_score::get_paper_systems ()
{
- if (paper_systems_ == SCM_BOOL_F)
+ if (scm_is_false (paper_systems_))
{
vector<Column_x_positions> breaking = calc_breaking ();
system_->break_into_pieces (breaking);
SCM head = scm_car (expr);
- if (head == ly_symbol2scm ("delay-stencil-evaluation"))
+ if (scm_is_eq (head, ly_symbol2scm ("delay-stencil-evaluation")))
{
// we likely need to do something here...just don't know what...
return SCM_EOL;
}
- if (head == ly_symbol2scm ("combine-stencil"))
+ if (scm_is_eq (head, ly_symbol2scm ("combine-stencil")))
{
SCM out = SCM_EOL;
SCM *tail = &out;
for (SCM x = scm_cdr (expr); scm_is_pair (x); x = scm_cdr (x))
{
SCM footnote = get_footnotes (scm_car (x));
- if (SCM_EOL != footnote)
+ if (!scm_is_null (footnote))
{
*tail = scm_cons (footnote, SCM_EOL);
tail = SCM_CDRLOC (*tail);
}
return scm_append (out);
}
- if (head == ly_symbol2scm ("translate-stencil"))
+ if (scm_is_eq (head, ly_symbol2scm ("translate-stencil")))
return get_footnotes (scm_caddr (expr));
- if (head == ly_symbol2scm ("footnote"))
+ if (scm_is_eq (head, ly_symbol2scm ("footnote")))
return scm_list_1 (scm_cdr (expr));
return SCM_EOL;
if (ps->safe_)
{
static SCM module = SCM_BOOL_F;
- if (module == SCM_BOOL_F)
+ if (scm_is_false (module))
{
SCM function = ly_lily_module_constant ("make-safe-lilypond-module");
module = scm_gc_protect_object (scm_call_0 (function));
} else if (Output_def * od = Output_def::unsmob ($1)) {
SCM id = SCM_EOL;
- if (od->c_variable ("is-paper") == SCM_BOOL_T)
+ if (to_boolean (od->c_variable ("is-paper")))
id = ly_symbol2scm ("$defaultpaper");
- else if (od->c_variable ("is-midi") == SCM_BOOL_T)
+ else if (to_boolean (od->c_variable ("is-midi")))
id = ly_symbol2scm ("$defaultmidi");
- else if (od->c_variable ("is-layout") == SCM_BOOL_T)
+ else if (to_boolean (od->c_variable ("is-layout")))
id = ly_symbol2scm ("$defaultlayout");
parser->lexer_->set_identifier (id, $1);
SCM id = SCM_EOL;
Output_def * od = Output_def::unsmob ($1);
- if (od->c_variable ("is-paper") == SCM_BOOL_T)
+ if (to_boolean (od->c_variable ("is-paper")))
id = ly_symbol2scm ("$defaultpaper");
- else if (od->c_variable ("is-midi") == SCM_BOOL_T)
+ else if (to_boolean (od->c_variable ("is-midi")))
id = ly_symbol2scm ("$defaultmidi");
- else if (od->c_variable ("is-layout") == SCM_BOOL_T)
+ else if (to_boolean (od->c_variable ("is-layout")))
id = ly_symbol2scm ("$defaultlayout");
parser->lexer_->set_identifier (id, $1);
} else if (Output_def *od = Output_def::unsmob ($2)) {
SCM id = SCM_EOL;
- if (od->c_variable ("is-paper") == SCM_BOOL_T)
+ if (to_boolean (od->c_variable ("is-paper")))
id = ly_symbol2scm ("$defaultpaper");
- else if (od->c_variable ("is-midi") == SCM_BOOL_T)
+ else if (to_boolean (od->c_variable ("is-midi")))
id = ly_symbol2scm ("$defaultmidi");
- else if (od->c_variable ("is-layout") == SCM_BOOL_T)
+ else if (to_boolean (od->c_variable ("is-layout")))
id = ly_symbol2scm ("$defaultlayout");
parser->lexer_->set_identifier (id, $2);
} else if (Output_def *od = Output_def::unsmob ($2)) {
SCM id = SCM_EOL;
- if (od->c_variable ("is-paper") == SCM_BOOL_T)
+ if (to_boolean (od->c_variable ("is-paper")))
id = ly_symbol2scm ("$defaultpaper");
- else if (od->c_variable ("is-midi") == SCM_BOOL_T)
+ else if (to_boolean (od->c_variable ("is-midi")))
id = ly_symbol2scm ("$defaultmidi");
- else if (od->c_variable ("is-layout") == SCM_BOOL_T)
+ else if (to_boolean (od->c_variable ("is-layout")))
id = ly_symbol2scm ("$defaultlayout");
parser->lexer_->set_identifier (id, $2);
{
Output_def *od = Output_def::unsmob ($2);
if (od) {
- if (od->lookup_variable (ly_symbol2scm ("is-paper")) == SCM_BOOL_T)
+ if (to_boolean (od->lookup_variable (ly_symbol2scm ("is-paper"))))
{
parser->parser_error (@2, _("\\paper cannot be used in \\score, use \\layout instead"));
od = 0;
output_def {
Output_def *od = Output_def::unsmob ($1);
- if (od->lookup_variable (ly_symbol2scm ("is-paper")) != SCM_BOOL_T)
+ if (!to_boolean (od->lookup_variable (ly_symbol2scm ("is-paper"))))
{
parser->parser_error (@1, _ ("need \\paper for paper block"));
$$ = get_paper (parser)->unprotect ();
mode_changed_music:
mode_changing_head grouped_music_list {
- if ($1 == ly_symbol2scm ("chords"))
+ if (scm_is_eq ($1, ly_symbol2scm ("chords")))
{
$$ = MAKE_SYNTAX ("unrelativable-music", @$, $2);
}
if (ctxmod)
mods = ctxmod->get_mods ();
$$ = MAKE_SYNTAX ("context-specification", @$, $1, SCM_EOL, mods, SCM_BOOL_T, $3);
- if ($1 == ly_symbol2scm ("ChordNames"))
+ if (scm_is_eq ($1, ly_symbol2scm ("ChordNames")))
{
$$ = MAKE_SYNTAX ("unrelativable-music", @$, $$);
}
script_abbreviation:
'^' {
- $$ = scm_from_locale_string ("Hat");
+ $$ = scm_from_ascii_string ("Hat");
}
| '+' {
- $$ = scm_from_locale_string ("Plus");
+ $$ = scm_from_ascii_string ("Plus");
}
| '-' {
- $$ = scm_from_locale_string ("Dash");
+ $$ = scm_from_ascii_string ("Dash");
}
| '!' {
- $$ = scm_from_locale_string ("Bang");
+ $$ = scm_from_ascii_string ("Bang");
}
| ANGLE_CLOSE {
- $$ = scm_from_locale_string ("Larger");
+ $$ = scm_from_ascii_string ("Larger");
}
| '.' {
- $$ = scm_from_locale_string ("Dot");
+ $$ = scm_from_ascii_string ("Dot");
}
| '_' {
- $$ = scm_from_locale_string ("Underscore");
+ $$ = scm_from_ascii_string ("Underscore");
}
;
SCM
get_next_unique_context_id ()
{
- return scm_from_locale_string ("$uniqueContextId");
+ return scm_from_ascii_string ("$uniqueContextId");
}
static int new_context_count;
char s[128];
snprintf (s, sizeof (s)-1, "uniqueContext%d", new_context_count++);
- return scm_from_locale_string (s);
+ return scm_from_ascii_string (s);
}
// check_scheme_arg checks one argument with a given predicate for use
{
SCM what = scm_car (ev->get_property ("class"));
SCM text = SCM_EOL;
- if (what == ly_symbol2scm ("solo-one-event"))
+ if (scm_is_eq (what, ly_symbol2scm ("solo-one-event")))
text = get_property ("soloText");
- else if (what == ly_symbol2scm ("solo-two-event"))
+ else if (scm_is_eq (what, ly_symbol2scm ("solo-two-event")))
text = get_property ("soloIIText");
- else if (what == ly_symbol2scm ("unisono-event"))
+ else if (scm_is_eq (what, ly_symbol2scm ("unisono-event")))
text = get_property ("aDueText");
if (Text_interface::is_markup (text))
Moment start_moment_;
SCM split_list_;
- SCM direction_;
- SCM directionOne_;
- SCM directionTwo_;
- SCM horizontalShiftOne_;
- SCM horizontalShiftTwo_;
Stream_event *unisono_event_;
Stream_event *solo_one_event_;
first_iter_ = 0;
second_iter_ = 0;
split_list_ = SCM_EOL;
- direction_ = SCM_BOOL_F;
- directionOne_ = scm_from_int (1);
- directionTwo_ = scm_from_int (-1);
- horizontalShiftOne_ = scm_from_int (0);
- horizontalShiftTwo_ = scm_from_int (1);
state_ = APART;
chosen_part_ = 1;
playing_state_ = PLAYING_OTHER;
{
start_moment_ = get_outlet ()->now_mom ();
split_list_ = get_music ()->get_property ("split-list");
- direction_ = get_music ()->get_property ("direction");
- if (is_direction (direction_))
- {
- directionOne_ = direction_;
- directionTwo_ = direction_;
- if (scm_is_true (scm_negative_p (direction_)))
- {
- horizontalShiftOne_ = scm_from_int (1);
- horizontalShiftTwo_ = scm_from_int (0);
- }
- }
Context *c = get_outlet ();
second_iter_ = Music_iterator::unsmob (get_iterator (Music::unsmob (scm_cadr (lst))));
Context *shared = handles_[CONTEXT_SHARED].get_context ();
set_context (shared);
-
- /* Mimic all settings of voiceOne/voiceTwo for the two separate voices...*/
- /* FIXME: Is there any way to use the definition of \voiceOne/\voiceTwo
- directly??? */
- char const *syms[]
- =
- {
- "Stem",
- "DynamicLineSpanner",
- "Tie",
- "Dots",
- "MultiMeasureRest",
- "Rest",
- "Slur",
- "TextScript",
- "Script",
- 0
- };
-
- for (char const **p = syms; *p; p++)
- {
- SCM sym = ly_symbol2scm (*p);
- execute_pushpop_property (one, sym,
- ly_symbol2scm ("direction"), directionOne_);
-
- execute_pushpop_property (two, sym,
- ly_symbol2scm ("direction"), directionTwo_);
-
- if (scm_is_number (direction_))
- execute_pushpop_property (shared, sym,
- ly_symbol2scm ("direction"), direction_);
- }
- /* Handle horizontal shifts for crossing notes */
- execute_pushpop_property (one, ly_symbol2scm ("NoteColumn"),
- ly_symbol2scm ("horizontal-shift"), horizontalShiftOne_);
- execute_pushpop_property (two, ly_symbol2scm ("NoteColumn"),
- ly_symbol2scm ("horizontal-shift"), horizontalShiftTwo_);
-
}
IMPLEMENT_LISTENER (Part_combine_iterator, set_busy);
SCM tag = scm_cdar (split_list_);
- if (tag == ly_symbol2scm ("chords"))
+ if (scm_is_eq (tag, ly_symbol2scm ("chords")))
chords_together ();
- else if (tag == ly_symbol2scm ("apart")
- || tag == ly_symbol2scm ("apart-silence")
- || tag == ly_symbol2scm ("apart-spanner"))
- apart (tag == ly_symbol2scm ("apart-silence"));
- else if (tag == ly_symbol2scm ("unisono"))
+ else if (scm_is_eq (tag, ly_symbol2scm ("apart"))
+ || scm_is_eq (tag, ly_symbol2scm ("apart-silence"))
+ || scm_is_eq (tag, ly_symbol2scm ("apart-spanner")))
+ apart (scm_is_eq (tag, ly_symbol2scm ("apart-silence")));
+ else if (scm_is_eq (tag, ly_symbol2scm ("unisono")))
{
// Continue to use the most recently used part because we might have
// killed mmrests in the other part.
unisono (false, (last_playing_ == 2) ? 2 : 1);
}
- else if (tag == ly_symbol2scm ("unisilence"))
+ else if (scm_is_eq (tag, ly_symbol2scm ("unisilence")))
{
// as for unisono
unisono (true, (last_playing_ == 2) ? 2 : 1);
}
- else if (tag == ly_symbol2scm ("silence1"))
+ else if (scm_is_eq (tag, ly_symbol2scm ("silence1")))
unisono (true, 1);
- else if (tag == ly_symbol2scm ("silence2"))
+ else if (scm_is_eq (tag, ly_symbol2scm ("silence2")))
unisono (true, 2);
- else if (tag == ly_symbol2scm ("solo1"))
+ else if (scm_is_eq (tag, ly_symbol2scm ("solo1")))
solo1 ();
- else if (tag == ly_symbol2scm ("solo2"))
+ else if (scm_is_eq (tag, ly_symbol2scm ("solo2")))
solo2 ();
else if (scm_is_symbol (tag))
{
percent_->set_bound (LEFT, col);
SCM count = percent_event_->get_property ("repeat-count");
- if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats"))
+ if (!scm_is_null (count) && to_boolean (get_property ("countPercentRepeats"))
&& check_repeat_count_visibility (context (), count))
{
percent_counter_ = make_spanner ("PercentRepeatCounter",
vector<char> pfb_string = gulp_file (file_name, 0);
char *pfa = pfb2pfa ((Byte *) &pfb_string[0], pfb_string.size ());
- SCM pfa_scm = scm_from_locale_string (pfa);
+ SCM pfa_scm = scm_from_latin1_string (pfa);
free (pfa);
debug_output ("]", false);
FT_Face face = open_ft_face (file_name, 0 /* index */);
string table = get_otf_table (face, "CFF ");
- SCM asscm = scm_from_locale_stringn ((char *) table.data (),
+ SCM asscm = scm_from_latin1_stringn ((char *) table.data (),
table.length ());
debug_output ("]", false);
be careful, as we don't want to loose references to the _sym_ members.
*/
Pedal_type_info info;
- info.event_class_sym_ = scm_from_locale_symbol ((base_ident + "-event").c_str ());
- info.style_sym_ = scm_from_locale_symbol (("pedal" + base_name + "Style").c_str ());
- info.strings_sym_ = scm_from_locale_symbol (("pedal" + base_name + "Strings").c_str ());
+ info.event_class_sym_ = scm_from_ascii_symbol ((base_ident + "-event").c_str ());
+ info.style_sym_ = scm_from_ascii_symbol (("pedal" + base_name + "Style").c_str ());
+ info.strings_sym_ = scm_from_ascii_symbol (("pedal" + base_name + "Strings").c_str ());
info.base_name_ = name;
info.pedal_c_str_ = strdup ((base_name + "Pedal").c_str ());
SCM style = get_property (p->type_->style_sym_);
- bool mixed = style == ly_symbol2scm ("mixed");
+ bool mixed = scm_is_eq (style, ly_symbol2scm ("mixed"));
bool bracket = (mixed
- || style == ly_symbol2scm ("bracket"));
- bool text = (style == ly_symbol2scm ("text")
- || mixed);
+ || scm_is_eq (style, ly_symbol2scm ("bracket")));
+ bool text = (mixed
+ || scm_is_eq (style, ly_symbol2scm ("text")));
if (text && !p->item_)
create_text_grobs (p, mixed);
int bn = measure_number (context ());
SCM handle = scm_assoc (key, keysig);
- if (handle != SCM_BOOL_F)
+ if (scm_is_true (handle))
{
bool same_bar = (bn == robust_scm2int (scm_caddr (handle), 0));
bool same_alt
handle = SCM_BOOL_F;
}
- bool print_acc
- = (handle == SCM_BOOL_F) || p->get_alteration () == Rational (0)
- || (ev->get_property ("force-accidental") == SCM_BOOL_T);
+ bool print_acc = scm_is_false (handle)
+ || p->get_alteration () == Rational (0)
+ || to_boolean (ev->get_property ("force-accidental"));
if (trill_head_)
{
Prob *ps = Prob::unsmob (prob);
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
- if (val == SCM_UNDEFINED)
+ if (SCM_UNBNDP (val))
val = SCM_EOL;
SCM retval = ps->get_property (sym);
- if (retval == SCM_EOL)
+ if (scm_is_null (retval))
return val;
else
return retval;
{
SCM aval = scm_cdar (aprop);
SCM bval = scm_cdar (bprop);
- if (scm_caar (aprop) != scm_caar (bprop)
+ if (!scm_is_eq (scm_caar (aprop), scm_caar (bprop))
|| (!(Input::is_smob (aval) && Input::is_smob (bval))
- &&
- !to_boolean (scm_equal_p (aval, bval))))
+ && !ly_is_equal (aval, bval)))
return SCM_BOOL_F;
}
/* is one list shorter? */
- if (aprop != SCM_EOL || bprop != SCM_EOL)
+ if (!scm_is_null (aprop) || !scm_is_null (bprop))
return SCM_BOOL_F;
}
TODO: type checking
*/
SCM s = scm_sloppy_assq (sym, mutable_property_alist_);
- if (s != SCM_BOOL_F)
+ if (scm_is_true (s))
return scm_cdr (s);
s = scm_sloppy_assq (sym, immutable_property_alist_);
- return (s == SCM_BOOL_F) ? SCM_EOL : scm_cdr (s);
+ return scm_is_false (s) ? SCM_EOL : scm_cdr (s);
}
/* We don't (yet) instrument probs */
" @var{sym}. Choices are @code{prob}, @code{grob}, and"
" @code{context}.")
{
- if (sym == ly_symbol2scm ("context"))
+ if (scm_is_eq (sym, ly_symbol2scm ("context")))
return context_property_lookup_table ? context_property_lookup_table
: scm_c_make_hash_table (1);
- if (sym == ly_symbol2scm ("prob"))
+ if (scm_is_eq (sym, ly_symbol2scm ("prob")))
return prob_property_lookup_table ? prob_property_lookup_table
: scm_c_make_hash_table (1);
- if (sym == ly_symbol2scm ("grob"))
+ if (scm_is_eq (sym, ly_symbol2scm ("grob")))
return grob_property_lookup_table ? grob_property_lookup_table
: scm_c_make_hash_table (1);
return scm_c_make_hash_table (1);
*table = scm_permanent_object (scm_c_make_hash_table (259));
SCM hashhandle = scm_hashq_get_handle (*table, sym);
- if (hashhandle == SCM_BOOL_F)
+ if (scm_is_false (hashhandle))
{
scm_hashq_set_x (*table, sym, scm_from_int (0));
hashhandle = scm_hashq_get_handle (*table, sym);
{
LY_ASSERT_TYPE (ly_is_symbol, var, 1);
- if (val == SCM_UNDEFINED)
+ if (SCM_UNBNDP (val))
val = SCM_BOOL_T;
string varstr = robust_symbol2string (var, "");
}
SCM handle = scm_hashq_get_handle (option_hash, var);
- if (handle == SCM_BOOL_F)
+ if (scm_is_false (handle))
warning (_f ("no such internal option: %s", varstr.c_str ()));
internal_set_option (var, val);
// for cue notes if quotedCueEventTypes is not set) use quotedEventTypes
if (is_cue)
accept = get_outlet ()->get_property ("quotedCueEventTypes");
- if (accept == SCM_EOL)
+ if (scm_is_null (accept))
accept = get_outlet ()->get_property ("quotedEventTypes");
for (; scm_is_pair (accept); accept = scm_cdr (accept))
while (scm_is_pair (cs))
{
SCM command = scm_car (cs);
- if (command == ly_symbol2scm ("start-repeat"))
+ if (scm_is_eq (command, ly_symbol2scm ("start-repeat")))
start = true;
- else if (command == ly_symbol2scm ("end-repeat"))
+ else if (scm_is_eq (command, ly_symbol2scm ("end-repeat")))
end = true;
- else if (command == ly_symbol2scm ("segno-display"))
+ else if (scm_is_eq (command, ly_symbol2scm ("segno-display")))
segno = true;
- else if (scm_is_pair (command) && scm_car (command) == ly_symbol2scm ("volta"))
+ else if (scm_is_pair (command)
+ && scm_is_eq (scm_car (command), ly_symbol2scm ("volta")))
volta_found = true;
cs = scm_cdr (cs);
}
Score_performer::finish (SCM)
{
SCM channel_mapping = context ()->get_property ("midiChannelMapping");
- bool use_ports = channel_mapping == ly_symbol2scm ("voice");
+ bool use_ports = scm_is_eq (channel_mapping, ly_symbol2scm ("voice"));
performance_->ports_ = use_ports;
recurse_over_translators (context (),
&Translator::finalize,
/* UGR, FIXME, these are default \layout blocks once again. They
suck. */
for (vsize i = 0; !score_def && i < sc->defs_.size (); i++)
- if (sc->defs_[i]->c_variable ("is-layout") == SCM_BOOL_T)
+ if (to_boolean (sc->defs_[i]->c_variable ("is-layout")))
score_def = sc->defs_[i];
if (!score_def)
Real scale = 1.0;
- if (layoutbook && layoutbook->c_variable ("is-paper") == SCM_BOOL_T)
+ if (layoutbook && to_boolean (layoutbook->c_variable ("is-paper")))
scale = scm_to_double (layoutbook->c_variable ("output-scale"));
SCM outputs = SCM_EOL;
Output_def *def = outdef_count ? defs_[i] : default_def;
SCM scaled = def->self_scm ();
- if (def->c_variable ("is-layout") == SCM_BOOL_T)
+ if (to_boolean (def->c_variable ("is-layout")))
{
def = scale_output_def (def, scale);
def->parent_ = layoutbook;
void
copy_property (Grob *g, SCM sym, SCM alist)
{
- if (g->get_property (sym) == SCM_EOL)
+ if (scm_is_null (g->get_property (sym)))
{
SCM entry = scm_assoc (sym, alist);
if (scm_is_pair (entry))
SCM alist = tg->get_property ("scriptDefinitions");
SCM art = scm_assoc (art_type, alist);
- if (art == SCM_BOOL_F)
+ if (scm_is_false (art))
{
/* FIXME: */
warning (_ ("do not know how to interpret articulation:"));
SCM val = scm_cdar (s);
- if (sym == ly_symbol2scm ("script-priority"))
+ if (scm_is_eq (sym, ly_symbol2scm ("script-priority")))
{
priority_found = true;
/* Make sure they're in order of user input by adding index i.
}
SCM preset = p->get_property_data (sym);
- if (val == SCM_EOL
- || scm_call_1 (type, preset) == SCM_BOOL_F)
+ if (scm_is_null (val)
+ || scm_is_false (scm_call_1 (type, preset)))
p->set_property (sym, val);
}
assert (scm_is_pair (s));
SCM key = scm_car (s);
- if (key == ly_symbol2scm ("feta"))
+ if (scm_is_eq (key, ly_symbol2scm ("feta")))
{
SCM name_entry = scm_cdr (s);
SCM str = ((scm_is_pair (name_entry)) ? index_get_cell (name_entry, d)
Grob *slur = Grob::unsmob (me->get_object ("slur"));
SCM avoid_slur = me->get_property ("avoid-slur");
if (slur && to_boolean (slur->get_property ("cross-staff"))
- && (avoid_slur == ly_symbol2scm ("outside")
- || avoid_slur == ly_symbol2scm ("around")))
+ && (scm_is_eq (avoid_slur, ly_symbol2scm ("outside"))
+ || scm_is_eq (avoid_slur, ly_symbol2scm ("around"))))
return SCM_BOOL_T;
return SCM_BOOL_F;
? me->get_property ("parent-alignment-X")
: me->get_property ("parent-alignment-Y");
- if (par_align == SCM_EOL)
+ if (scm_is_null (par_align))
par_align = self_align;
Real x = 0.0;
*tail = scm_cons (evaluate_with_simple_closure (delayed_argument, scm_car (s),
pure, start, end),
SCM_EOL);
- if (scm_car (*tail) == SCM_UNSPECIFIED)
+ if (scm_is_eq (scm_car (*tail), SCM_UNSPECIFIED))
return SCM_UNSPECIFIED;
tail = SCM_CDRLOC (*tail);
}
SCM args = scm_cons (delayed_argument,
evaluate_args (delayed_argument, scm_cdr (inside),
pure, start, end));
- if (scm_cdr (args) == SCM_UNSPECIFIED)
+ if (scm_is_eq (scm_cdr (args), SCM_UNSPECIFIED))
return SCM_UNSPECIFIED;
if (pure)
return call_pure_function (proc, args, start, end);
}
else if (!scm_is_pair (expr))
return expr;
- else if (scm_car (expr) == ly_symbol2scm ("quote"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("quote")))
return scm_cadr (expr);
else if (Unpure_pure_container::is_smob (scm_car (expr))
|| ly_is_procedure (scm_car (expr)))
? Unpure_pure_container::unsmob (scm_car (expr))->unpure_part ()
: scm_car (expr);
SCM args = evaluate_args (delayed_argument, scm_cdr (expr), pure, start, end);
- if (args == SCM_UNSPECIFIED)
+ if (scm_is_eq (args, SCM_UNSPECIFIED))
return SCM_UNSPECIFIED;
if (pure)
return call_pure_function (proc, args, start, end);
SCM_ASSERT_TYPE (scm_ilength (rods) > 0, rods, SCM_ARG1, __FUNCTION__, "list of rods");
LY_ASSERT_TYPE (scm_is_number, length, 3);
- bool is_ragged = ragged == SCM_BOOL_T;
+ bool is_ragged = to_boolean (ragged);
Simple_spacer spacer;
for (SCM s = springs; scm_is_pair (s); s = scm_cdr (s))
{
for (vsize i = 1; i + 1 < ret.cols_.size (); i++)
{
SCM p = ret.cols_[i]->get_property ("line-break-permission");
- if (p == ly_symbol2scm ("force"))
+ if (scm_is_eq (p, ly_symbol2scm ("force")))
ret.satisfies_constraints_ = false;
}
LY_ASSERT_SMOB (Skyline, other_skyline_scm, 1);
Real horizon_padding = 0;
- if (horizon_padding_scm != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (horizon_padding_scm))
{
LY_ASSERT_TYPE (scm_is_number, horizon_padding_scm, 3);
horizon_padding = scm_to_double (horizon_padding_scm);
LY_ASSERT_SMOB (Skyline, other_skyline_scm, 1);
Real horizon_padding = 0;
- if (horizon_padding_scm != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (horizon_padding_scm))
{
LY_ASSERT_TYPE (scm_is_number, horizon_padding_scm, 3);
horizon_padding = scm_to_double (horizon_padding_scm);
}
Real dist = 0.0;
- if (info.type_ == ly_symbol2scm ("around"))
+ if (scm_is_eq (info.type_, ly_symbol2scm ("around")))
dist = info.extents_[Y_AXIS].distance (y);
/*
Have to score too: the curve enumeration is limited in its
shape, and may produce curves which collide anyway.
*/
- else if (info.type_ == ly_symbol2scm ("inside"))
+ else if (scm_is_eq (info.type_, ly_symbol2scm ("inside")))
dist = state.dir_ * (y - info.extents_[Y_AXIS][state.dir_]);
else
programming_error ("unknown avoidance type");
end_ys[RIGHT],
end_ys[LEFT]);
Real encompass_place = extra_encompass_infos_[i].extents_[Y_AXIS][dir_];
- if (extra_encompass_infos_[i].type_ == ly_symbol2scm ("inside")
+ if (scm_is_eq (extra_encompass_infos_[i].type_,
+ 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_)
z[Y_AXIS] += dir_ * parameters_.free_slur_distance_;
avoid.push_back (z);
}
- else if (extra_encompasses[i]->get_property ("avoid-slur") == ly_symbol2scm ("inside"))
+ else if (scm_is_eq (extra_encompasses[i]->get_property ("avoid-slur"),
+ ly_symbol2scm ("inside")))
{
Grob *g = extra_encompasses [i];
Interval xe = g->extent (common_[X_AXIS], X_AXIS);
/* if we encompass a separation-item that spans multiple staves,
we filter out the grobs that don't belong to our staff */
if (me->common_refpoint (breakables[j], Y_AXIS) == me->get_parent (Y_AXIS)
- && breakables[j]->get_property ("avoid-slur") == ly_symbol2scm ("inside"))
+ && scm_is_eq (breakables[j]->get_property ("avoid-slur"),
+ ly_symbol2scm ("inside")))
new_encompasses.push_back (breakables[j]);
}
else
return offset_scm;
SCM avoid = script->get_property ("avoid-slur");
- if (avoid != ly_symbol2scm ("outside") && avoid != ly_symbol2scm ("around"))
+ if (!scm_is_eq (avoid, ly_symbol2scm ("outside"))
+ && !scm_is_eq (avoid, ly_symbol2scm ("around")))
return offset_scm;
Real offset = robust_scm2double (offset_scm, 0.0);
return offset_scm;
SCM avoid = script->get_property ("avoid-slur");
- if (avoid != ly_symbol2scm ("outside")
- && avoid != ly_symbol2scm ("around"))
+ if (!scm_is_eq (avoid, ly_symbol2scm ("outside"))
+ && !scm_is_eq (avoid, ly_symbol2scm ("around")))
return offset_scm;
Direction dir = get_grob_direction (script);
Interval exts[] = {xext, yext};
bool do_shift = false;
Real EPS = 1.0e-5;
- if (avoid == ly_symbol2scm ("outside"))
+ if (scm_is_eq (avoid, ly_symbol2scm ("outside")))
{
for (LEFT_and_RIGHT (d))
{
slur = slurs[0];
if (Tie::has_interface (e)
- || avoid == ly_symbol2scm ("inside"))
+ || scm_is_eq (avoid, ly_symbol2scm ("inside")))
{
for (vsize i = slurs.size (); i--;)
add_extra_encompass (slurs[i], e);
if (slur)
e->set_object ("slur", slur->self_scm ());
}
- else if (avoid == ly_symbol2scm ("outside")
- || avoid == ly_symbol2scm ("around"))
+ else if (scm_is_eq (avoid, ly_symbol2scm ("outside"))
+ || scm_is_eq (avoid, ly_symbol2scm ("around")))
{
if (slur)
{
e->set_object ("slur", slur->self_scm ());
}
}
- else if (avoid != ly_symbol2scm ("ignore"))
+ else if (!scm_is_eq (avoid, ly_symbol2scm ("ignore")))
e->warning (_f ("Ignoring grob for slur: %s. avoid-slur not set?",
e->name ().c_str ()));
}
SCM
Slur::outside_slur_cross_staff (SCM smob, SCM previous)
{
- if (previous == SCM_BOOL_T)
+ if (to_boolean (previous))
return previous;
Grob *me = Grob::unsmob (smob);
{
#if 0
SCM s = scm_cdr (smob_protection_list);
- while (scm_is_pair (s) && scm_car (s) == SCM_BOOL_F)
+ while (scm_is_pair (s) && scm_is_false (scm_car (s))
{
s = scm_cdr (s);
}
#else
SCM next = scm_cdr (*prot_cons);
- if (next == SCM_EOL)
+ if (scm_is_null (next)))
scm_set_car_x (*prot_cons, SCM_BOOL_F);
else
{
scm_set_car_x (*prot_cons, SCM_BOOL_F);
while (scm_is_pair (next)
- && scm_car (next) == SCM_BOOL_F)
+ && scm_is_false (scm_car (next)))
next = scm_cdr (next);
void
Source_file::init_port ()
{
- SCM str = scm_from_locale_string (c_str ());
+ // This is somewhat icky: the string will in general be in utf8, but
+ // we do our own utf8 encoding and verification in the parser, so we
+ // use the no-conversion equivalent of latin1
+ SCM str = scm_from_latin1_string (c_str ());
str_port_ = scm_mkstrport (SCM_INUM0, str, SCM_OPN | SCM_RDNG, __FUNCTION__);
scm_set_port_filename_x (str_port_, ly_string2scm (name_));
}
for (SCM s = mins; scm_is_pair (s); s = scm_cdr (s))
{
SCM dist = scm_car (s);
- if (scm_car (dist) == p->self_scm ())
+ if (scm_is_eq (scm_car (dist), p->self_scm ()))
{
scm_set_cdr_x (dist, scm_max (scm_cdr (dist),
newdist));
{
Grob *h = gelts[j];
- if (h && h->get_property ("break-align-symbol") == ly_symbol2scm ("staff-bar"))
+ if (h && scm_is_eq (h->get_property ("break-align-symbol"),
+ ly_symbol2scm ("staff-bar")))
{
extract_grob_set (h, "elements", helts);
for (vsize k = helts.size (); k--;)
// The pure property cache is indexed by (name start . end), where name is
// a symbol, and start and end are numbers referring to the starting and
// ending column ranks of the current line.
- if (scm_hash_table_p (pure_property_cache_) == SCM_BOOL_F)
+ if (scm_is_false (scm_hash_table_p (pure_property_cache_)))
return SCM_UNDEFINED;
SCM key = scm_cons (sym, scm_cons (scm_from_int (start), scm_from_int (end)));
void
Spanner::cache_pure_property (SCM sym, int start, int end, SCM val)
{
- if (scm_hash_table_p (pure_property_cache_) == SCM_BOOL_F)
+ if (scm_is_false (scm_hash_table_p (pure_property_cache_)))
pure_property_cache_ = scm_c_make_hash_table (17);
SCM key = scm_cons (sym, scm_cons (scm_from_int (start), scm_from_int (end)));
Staff_performer::get_audio_staff (const string &voice)
{
SCM channel_mapping = get_property ("midiChannelMapping");
- if (channel_mapping != ly_symbol2scm ("instrument")
+ if (!scm_is_eq (channel_mapping, ly_symbol2scm ("instrument"))
&& staff_map_.size ())
return staff_map_.begin ()->second;
audio_staff->add_audio_item (instrument_);
SCM proc = ly_lily_module_constant ("percussion?");
SCM drums = scm_call_1 (proc, ly_symbol2scm (instrument_string_.c_str ()));
- audio_staff->percussion_ = (drums == SCM_BOOL_T);
+ audio_staff->percussion_ = to_boolean (drums);
}
void
{
SCM channel_mapping = get_property ("midiChannelMapping");
map<string, int> &channel_map
- = (channel_mapping != ly_symbol2scm ("instrument"))
+ = (!scm_is_eq (channel_mapping, ly_symbol2scm ("instrument")))
? channel_map_
: static_channel_map_;
- if (channel_mapping == ly_symbol2scm ("staff")
+ if (scm_is_eq (channel_mapping, ly_symbol2scm ("staff"))
&& channel_ >= 0)
return channel_;
if (i != channel_map.end ())
return i->second;
- int channel = (channel_mapping == ly_symbol2scm ("staff"))
+ int channel = (scm_is_eq (channel_mapping, ly_symbol2scm ("staff")))
? channel_count_++
: channel_map.size ();
voice = c->id_string ();
SCM channel_mapping = get_property ("midiChannelMapping");
string str = new_instrument_string ();
- if (channel_mapping != ly_symbol2scm ("instrument"))
+ if (!scm_is_eq (channel_mapping, ly_symbol2scm ("instrument")))
channel_ = get_channel (voice);
else if (channel_ < 0 && str.empty ())
channel_ = get_channel (str);
if (str.length ())
{
- if (channel_mapping != ly_symbol2scm ("voice"))
+ if (!scm_is_eq (channel_mapping, ly_symbol2scm ("voice")))
channel_ = get_channel (str);
set_instrument (channel_, voice);
set_instrument_name (voice);
Real fixed = last_ext[RIGHT];
Real ideal = fixed + 1.0;
- if (type == ly_symbol2scm ("fixed-space"))
+ if (scm_is_eq (type, ly_symbol2scm ("fixed-space")))
{
fixed += distance;
ideal = fixed;
}
- else if (type == ly_symbol2scm ("extra-space"))
+ else if (scm_is_eq (type, ly_symbol2scm ("extra-space")))
ideal = fixed + distance;
- else if (type == ly_symbol2scm ("semi-fixed-space"))
+ else if (scm_is_eq (type, ly_symbol2scm ("semi-fixed-space")))
{
fixed += distance / 2;
ideal = fixed + distance / 2;
}
- else if (type == ly_symbol2scm ("minimum-space"))
+ else if (scm_is_eq (type, ly_symbol2scm ("minimum-space")))
ideal = last_ext[LEFT] + max (last_ext.length (), distance);
- else if (type == ly_symbol2scm ("minimum-fixed-space"))
+ else if (scm_is_eq (type, ly_symbol2scm ("minimum-fixed-space")))
{
fixed = last_ext[LEFT] + max (last_ext.length (), distance);
ideal = fixed;
bool
Staff_symbol::on_line (Grob *me, int pos, bool allow_ledger)
{
- SCM line_positions = me->get_property ("line-positions");
- if (scm_is_pair (line_positions))
- {
- Real min_line = HUGE_VAL;
- Real max_line = -HUGE_VAL;
- for (SCM s = line_positions; scm_is_pair (s); s = scm_cdr (s))
- {
- Real current_line = scm_to_double (scm_car (s));
- if (pos == current_line)
- return true;
- if (current_line > max_line)
- max_line = current_line;
- if (current_line < min_line)
- min_line = current_line;
-
- }
-
- if (allow_ledger)
- {
- if (pos < min_line)
- return (( (int) (rint (pos - min_line)) % 2) == 0);
- if (pos > max_line)
- return (( (int) (rint (pos - max_line)) % 2) == 0);
- }
-
- return false;
- }
- else
+ // standard staff lines (any line count) and standard ledger lines
+ if (!scm_is_pair (me->get_property ("line-positions"))
+ && !scm_is_pair (me->get_property ("ledger-positions")))
{
int const line_cnt = line_count (me);
bool result = abs (pos + line_cnt) % 2 == 1;
}
return result;
}
+
+ // staff lines (custom or standard)
+ vector<Real> lines = Staff_symbol::line_positions (me);
+ for (vector<Real>::const_iterator i = lines.begin (),
+ e = lines.end ();
+ i != e;
+ ++i)
+ {
+ if (pos == *i)
+ return true;
+ }
+
+ // ledger lines (custom or standard)
+ if (allow_ledger)
+ {
+ vector<Real> ledgers = Staff_symbol::ledger_positions (me, pos);
+ if (ledgers.empty ())
+ return false;
+ for (vector<Real>::const_iterator i = ledgers.begin (),
+ e = ledgers.end ();
+ i != e;
+ ++i)
+ {
+ if (pos == *i)
+ return true;
+ }
+ }
+ return false;
}
Interval
Grob *stem = Grob::unsmob (me->get_object ("stem"));
Spanner *beam = Stem::get_beam (stem);
- if (beam)
+ SCM style = me->get_property ("style");
+
+ if (beam && !scm_is_eq (style, ly_symbol2scm ("constant")))
{
Real dy = 0;
SCM s = beam->get_property ("quantized-positions");
else
/* down stems with flags should have more sloped trems (helps avoid
flag/stem collisions without making the stem very long) */
- return scm_from_double ((Stem::duration_log (stem) >= 3 && get_grob_direction (me) == DOWN)
+ return scm_from_double ((Stem::duration_log (stem) >= 3
+ && get_grob_direction (me) == DOWN && !beam)
? 0.40 : 0.25);
}
return scm_from_double (((dir == UP && flag) || beam) ? 1.0 : 1.5);
}
-MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_style, 1)
+MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_shape, 1)
SCM
-Stem_tremolo::calc_style (SCM smob)
+Stem_tremolo::calc_shape (SCM smob)
{
Grob *me = Grob::unsmob (smob);
Grob *stem = Grob::unsmob (me->get_object ("stem"));
Direction dir = get_grob_direction (me);
bool beam = Stem::get_beam (stem);
bool flag = Stem::duration_log (stem) >= 3 && !beam;
+ SCM style = me->get_property ("style");
- return ly_symbol2scm (((dir == UP && flag) || beam) ? "rectangle" : "default");
+ return ly_symbol2scm (!scm_is_eq (style, ly_symbol2scm ("constant"))
+ && ((dir == UP && flag) || beam)
+ ? "rectangle" : "beam-like");
}
Real
Real thick = robust_scm2double (me->get_property ("beam-thickness"), 1);
Real width = robust_scm2double (me->get_property ("beam-width"), 1);
Real blot = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
- SCM style = me->get_property ("style");
- if (!scm_is_symbol (style))
- style = ly_symbol2scm ("default");
+ SCM shape = me->get_property ("shape");
+ if (!scm_is_symbol (shape))
+ shape = ly_symbol2scm ("beam-like");
width *= ss;
thick *= ss;
Stencil a;
- if (style == ly_symbol2scm ("rectangle"))
+ if (scm_is_eq (shape, ly_symbol2scm ("rectangle")))
a = Lookup::rotated_box (slope, width, thick, blot);
else
a = Lookup::beam (slope, width, thick, blot);
ADD_INTERFACE (Stem_tremolo,
"A beam slashing a stem to indicate a tremolo. The property"
- " @code{style} can be @code{default} or @code{rectangle}.",
+ " @code{shape} can be @code{beam-like} or @code{rectangle}.",
/* properties */
"beam-thickness "
"flag-count "
"length-fraction "
"stem "
- "style "
+ "shape "
"slope "
);
bool is_harmonic_centered = false;
for (vsize i = 0; i < heads.size (); i++)
is_harmonic_centered = is_harmonic_centered
- || heads[i]->get_property ("style") == ly_symbol2scm ("harmonic");
+ || scm_is_eq (heads[i]->get_property ("style"),
+ ly_symbol2scm ("harmonic"));
is_harmonic_centered = is_harmonic_centered && is_invisible (me);
Real w = hed->extent (hed, X_AXIS)[dir];
bool
is_stencil_head (SCM symbol)
{
- return scm_object_property (symbol, ly_symbol2scm ("stencil-head?"))
- == SCM_BOOL_T;
+ return to_boolean (scm_object_property (symbol, ly_symbol2scm ("stencil-head?")));
}
SCM
if (scm_is_number (scm_car (l)))
return l;
SCM res = get_number_list (scm_car (l));
- if (res == SCM_BOOL_F)
+ if (scm_is_false (res))
return get_number_list (scm_cdr (l));
return res;
}
{
if (scm_is_pair (l))
{
- if (scm_memv (scm_car (l),
- scm_list_n (ly_symbol2scm ("moveto"),
- ly_symbol2scm ("rmoveto"),
- ly_symbol2scm ("lineto"),
- ly_symbol2scm ("rlineto"),
- ly_symbol2scm ("curveto"),
- ly_symbol2scm ("rcurveto"),
- ly_symbol2scm ("closepath"),
- SCM_UNDEFINED))
- != SCM_BOOL_F)
+ if (scm_is_true (scm_memv (scm_car (l),
+ scm_list_n (ly_symbol2scm ("moveto"),
+ ly_symbol2scm ("rmoveto"),
+ ly_symbol2scm ("lineto"),
+ ly_symbol2scm ("rlineto"),
+ ly_symbol2scm ("curveto"),
+ ly_symbol2scm ("rcurveto"),
+ ly_symbol2scm ("closepath"),
+ SCM_UNDEFINED))))
return l;
SCM res = get_path_list (scm_car (l));
- if (res == SCM_BOOL_F)
+ if (scm_is_false (res))
return get_path_list (scm_cdr (l));
return res;
}
bool first = true;
while (scm_is_pair (expr))
{
- if (scm_car (expr) == ly_symbol2scm ("moveto")
- || (scm_car (expr) == ly_symbol2scm ("rmoveto") && first))
+ if (scm_is_eq (scm_car (expr), ly_symbol2scm ("moveto"))
+ || (scm_is_eq (scm_car (expr), ly_symbol2scm ("rmoveto")) && first))
{
Real x = robust_scm2double (scm_cadr (expr), 0.0);
Real y = robust_scm2double (scm_caddr (expr), 0.0);
current = start;
expr = scm_cdddr (expr);
}
- if (scm_car (expr) == ly_symbol2scm ("rmoveto"))
+ if (scm_is_eq (scm_car (expr), ly_symbol2scm ("rmoveto")))
{
Real x = robust_scm2double (scm_cadr (expr), 0.0);
Real y = robust_scm2double (scm_caddr (expr), 0.0);
current = start;
expr = scm_cdddr (expr);
}
- else if (scm_car (expr) == ly_symbol2scm ("lineto"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("lineto")))
{
Real x = robust_scm2double (scm_cadr (expr), 0.0);
Real y = robust_scm2double (scm_caddr (expr), 0.0);
current = Offset (x, y);
expr = scm_cdddr (expr);
}
- else if (scm_car (expr) == ly_symbol2scm ("rlineto"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("rlineto")))
{
Real x = robust_scm2double (scm_cadr (expr), 0.0);
Real y = robust_scm2double (scm_caddr (expr), 0.0);
current = (Offset (x, y) + current);
expr = scm_cdddr (expr);
}
- else if (scm_car (expr) == ly_symbol2scm ("curveto"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("curveto")))
{
Real x1 = robust_scm2double (scm_cadr (expr), 0.0);
expr = scm_cddr (expr);
out);
current = Offset (x3, y3);
}
- else if (scm_car (expr) == ly_symbol2scm ("rcurveto"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("rcurveto")))
{
Real x1 = robust_scm2double (scm_cadr (expr), 0.0);
expr = scm_cddr (expr);
out);
current = (Offset (x3, y3) + current);
}
- else if (scm_car (expr) == ly_symbol2scm ("closepath"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("closepath")))
{
if ((current[X_AXIS] != start[X_AXIS]) || (current[Y_AXIS] != start[Y_AXIS]))
{
{
if (not scm_is_pair (expr))
return;
- if (scm_car (expr) == ly_symbol2scm ("draw-line"))
+ if (scm_is_eq (scm_car (expr), ly_symbol2scm ("draw-line")))
make_draw_line_boxes (boxes, buildings, trans, scm_cdr (expr), true);
- else if (scm_car (expr) == ly_symbol2scm ("dashed-line"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("dashed-line")))
{
expr = scm_cdr (expr);
SCM th = scm_car (expr);
SCM x2 = scm_car (expr);
make_draw_line_boxes (boxes, buildings, trans, scm_list_5 (th, scm_from_double (0.0), scm_from_double (0.0), x1, x2), true);
}
- else if (scm_car (expr) == ly_symbol2scm ("circle"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("circle")))
{
expr = scm_cdr (expr);
SCM rad = scm_car (expr);
SCM_BOOL_T,
SCM_UNDEFINED));
}
- else if (scm_car (expr) == ly_symbol2scm ("ellipse"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("ellipse")))
{
expr = scm_cdr (expr);
SCM x_rad = scm_car (expr);
SCM_BOOL_T,
SCM_UNDEFINED));
}
- else if (scm_car (expr) == ly_symbol2scm ("partial-ellipse"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("partial-ellipse")))
make_partial_ellipse_boxes (boxes, buildings, trans, scm_cdr (expr));
- else if (scm_car (expr) == ly_symbol2scm ("round-filled-box"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("round-filled-box")))
make_round_filled_box_boxes (boxes, trans, scm_cdr (expr));
- else if (scm_car (expr) == ly_symbol2scm ("named-glyph"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("named-glyph")))
make_named_glyph_boxes (boxes, buildings, trans, scm_cdr (expr));
- else if (scm_car (expr) == ly_symbol2scm ("polygon"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("polygon")))
make_polygon_boxes (boxes, buildings, trans, scm_cdr (expr));
- else if (scm_car (expr) == ly_symbol2scm ("path"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("path")))
make_path_boxes (boxes, buildings, trans, scm_cdr (expr));
- else if (scm_car (expr) == ly_symbol2scm ("glyph-string"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("glyph-string")))
make_glyph_string_boxes (boxes, buildings, trans, scm_cdr (expr));
else
{
{
if (scm_is_null (expr))
return vector<Transform_matrix_and_expression> ();
- else if (expr == ly_string2scm (""))
+ else if (scm_is_eq (expr, ly_string2scm ("")))
return vector<Transform_matrix_and_expression> ();
- else if (scm_car (expr) == ly_symbol2scm ("combine-stencil"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("combine-stencil")))
{
vector<Transform_matrix_and_expression> out;
for (SCM s = scm_cdr (expr); scm_is_pair (s); s = scm_cdr (s))
}
return out;
}
- else if (scm_car (expr) == ly_symbol2scm ("footnote"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("footnote")))
return vector<Transform_matrix_and_expression> ();
- else if (scm_car (expr) == ly_symbol2scm ("translate-stencil"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("translate-stencil")))
{
Real x = robust_scm2double (scm_caadr (expr), 0.0);
Real y = robust_scm2double (scm_cdadr (expr), 0.0);
pango_matrix_translate (&trans, x, y);
return stencil_traverser (trans, scm_caddr (expr));
}
- else if (scm_car (expr) == ly_symbol2scm ("scale-stencil"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("scale-stencil")))
{
Real x = robust_scm2double (scm_caadr (expr), 0.0);
Real y = robust_scm2double (scm_cadadr (expr), 0.0);
pango_matrix_scale (&trans, x, y);
return stencil_traverser (trans, scm_caddr (expr));
}
- else if (scm_car (expr) == ly_symbol2scm ("rotate-stencil"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("rotate-stencil")))
{
Real ang = robust_scm2double (scm_caadr (expr), 0.0);
Real x = robust_scm2double (scm_car (scm_cadadr (expr)), 0.0);
pango_matrix_translate (&trans, -x, -y);
return stencil_traverser (trans, scm_caddr (expr));
}
- else if (scm_car (expr) == ly_symbol2scm ("delay-stencil-evaluation"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("delay-stencil-evaluation")))
// should not use the place-holder text, but no need for the warning below
return vector<Transform_matrix_and_expression> ();
- else if (scm_car (expr) == ly_symbol2scm ("grob-cause"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("grob-cause")))
return stencil_traverser (trans, scm_caddr (expr));
- else if (scm_car (expr) == ly_symbol2scm ("color"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("color")))
return stencil_traverser (trans, scm_caddr (expr));
- else if (scm_car (expr) == ly_symbol2scm ("transparent-stencil"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("transparent-stencil")))
return stencil_traverser (trans, scm_cadr (expr));
- else if (scm_car (expr) == ly_symbol2scm ("id"))
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("id")))
return stencil_traverser (trans, scm_caddr (expr));
else
{
SCM head = scm_car (expr);
- if (head == ly_symbol2scm ("delay-stencil-evaluation"))
+ if (scm_is_eq (head, ly_symbol2scm ("delay-stencil-evaluation")))
{
interpret_stencil_expression (scm_force (scm_cadr (expr)), func, func_arg, o);
return;
}
- if (head == ly_symbol2scm ("transparent-stencil"))
+ if (scm_is_eq (head, ly_symbol2scm ("transparent-stencil")))
return;
- if (head == ly_symbol2scm ("footnote"))
+ if (scm_is_eq (head, ly_symbol2scm ("footnote")))
return;
- if (head == ly_symbol2scm ("translate-stencil"))
+ if (scm_is_eq (head, ly_symbol2scm ("translate-stencil")))
{
o += ly_scm2offset (scm_cadr (expr));
expr = scm_caddr (expr);
}
- else if (head == ly_symbol2scm ("combine-stencil"))
+ else if (scm_is_eq (head, ly_symbol2scm ("combine-stencil")))
{
for (SCM x = scm_cdr (expr); scm_is_pair (x); x = scm_cdr (x))
interpret_stencil_expression (scm_car (x), func, func_arg, o);
return;
}
- else if (head == ly_symbol2scm ("grob-cause"))
+ else if (scm_is_eq (head, ly_symbol2scm ("grob-cause")))
{
SCM grob = scm_cadr (expr);
(*func) (func_arg, scm_list_1 (ly_symbol2scm ("no-origin")));
return;
}
- else if (head == ly_symbol2scm ("color"))
+ else if (scm_is_eq (head, ly_symbol2scm ("color")))
{
SCM color = scm_cadr (expr);
SCM r = scm_car (color);
return;
}
- else if (head == ly_symbol2scm ("id"))
+ else if (scm_is_eq (head, ly_symbol2scm ("id")))
{
SCM id = scm_cadr (expr);
return;
}
- else if (head == ly_symbol2scm ("rotate-stencil"))
+ else if (scm_is_eq (head, ly_symbol2scm ("rotate-stencil")))
{
SCM args = scm_cadr (expr);
SCM angle = scm_car (args);
return;
}
- else if (head == ly_symbol2scm ("scale-stencil"))
+ else if (scm_is_eq (head, ly_symbol2scm ("scale-stencil")))
{
SCM args = scm_cadr (expr);
SCM x_scale = scm_car (args);
{
Font_list *me = (Font_list *) fs;
- if (scm_car (x) == ly_symbol2scm ("placebox"))
+ if (scm_is_eq (scm_car (x), ly_symbol2scm ("placebox")))
{
SCM args = scm_cdr (x);
SCM what = scm_caddr (args);
if (scm_is_pair (what))
{
SCM head = scm_car (what);
- if (ly_symbol2scm ("text") == head)
+ if (scm_is_eq (head, ly_symbol2scm ("text")))
me->fonts_ = scm_cons (scm_cadr (what), me->fonts_);
- else if (head == ly_symbol2scm ("char"))
+ else if (scm_is_eq (head, ly_symbol2scm ("char")))
me->fonts_ = scm_cons (scm_cadr (what), me->fonts_);
}
}
Stencil *s2 = Stencil::unsmob (second);
Stencil result;
- SCM_ASSERT_TYPE (s1 || first == SCM_BOOL_F || first == SCM_EOL,
+ SCM_ASSERT_TYPE (s1 || scm_is_false (first) || scm_is_null (first),
first, SCM_ARG1, __FUNCTION__, "Stencil, #f or ()");
- SCM_ASSERT_TYPE (s2 || second == SCM_BOOL_F || second == SCM_EOL,
+ SCM_ASSERT_TYPE (s2 || scm_is_false (second) || scm_is_null (second),
second, SCM_ARG4, __FUNCTION__, "Stencil, #f or ()");
LY_ASSERT_TYPE (is_axis, axis, 2);
LY_ASSERT_TYPE (is_direction, direction, 3);
Real p = 0.0;
- if (padding != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (padding))
{
LY_ASSERT_TYPE (scm_is_number, padding, 5);
p = scm_to_double (padding);
Stencil *s2 = Stencil::unsmob (second);
Stencil result;
- SCM_ASSERT_TYPE (s1 || first == SCM_BOOL_F || first == SCM_EOL,
+ SCM_ASSERT_TYPE (s1 || scm_is_false (first) || scm_is_null (first),
first, SCM_ARG1, __FUNCTION__, "Stencil, #f or ()");
- SCM_ASSERT_TYPE (s2 || second == SCM_BOOL_F || second == SCM_EOL,
+ SCM_ASSERT_TYPE (s2 || scm_is_false (second) || scm_is_null (second),
second, SCM_ARG4, __FUNCTION__, "Stencil, #f or ()");
LY_ASSERT_TYPE (is_axis, axis, 2);
LY_ASSERT_TYPE (is_direction, direction, 3);
Real p = 0.0;
- if (padding != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (padding))
{
LY_ASSERT_TYPE (scm_is_number, padding, 5);
p = scm_to_double (padding);
expr, SCM_ARG1, __FUNCTION__, "registered stencil expression");
Interval x;
- if (xext != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (xext))
{
LY_ASSERT_TYPE (is_number_pair, xext, 2);
x = ly_scm2interval (xext);
}
Interval y;
- if (yext != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (yext))
{
LY_ASSERT_TYPE (is_number_pair, yext, 3);
y = ly_scm2interval (yext);
bool
Stencil::is_empty () const
{
- return (expr_ == SCM_EOL
+ return (scm_is_null (expr_)
|| dim_.is_empty ());
}
/* should be scm_list_p, but scm_list_p is expensive. */
LY_ASSERT_TYPE (scm_is_pair, proplist, 2);
- if (proplist == SCM_UNDEFINED)
+ if (SCM_UNBNDP (proplist))
proplist = SCM_EOL;
Stream_event *e = new Stream_event (cl, proplist);
Stream_event::internal_in_event_class (SCM class_name)
{
SCM cl = get_property ("class");
- return scm_c_memq (class_name, cl) != SCM_BOOL_F;
+ return scm_is_true (scm_c_memq (class_name, cl));
}
MAKE_SCHEME_CALLBACK (Stream_event, undump, 1);
SCM val = scm_cdr (entry);
if ((Pitch::is_smob (val)
- || (prop == ly_symbol2scm ("element") && Music::is_smob (val))
- || (prop == ly_symbol2scm ("elements") && scm_is_pair (val))
- || (prop == ly_symbol2scm ("pitch-alist") && scm_is_pair (val)))
+ || (scm_is_eq (prop, ly_symbol2scm ("element")) && Music::is_smob (val))
+ || (scm_is_eq (prop, ly_symbol2scm ("elements")) && scm_is_pair (val))
+ || (scm_is_eq (prop, ly_symbol2scm ("pitch-alist")) && scm_is_pair (val)))
&& scm_is_false (scm_assq (prop, mutable_property_alist_)))
mutable_property_alist_
= scm_acons (prop, ly_music_deep_copy (val), mutable_property_alist_);
node->from_list (entry);
children_.push_back (node);
}
- else if (entry == ly_symbol2scm ("SystemStartBrace")
- || entry == ly_symbol2scm ("SystemStartBracket")
- || entry == ly_symbol2scm ("SystemStartBar")
- || entry == ly_symbol2scm ("SystemStartSquare"))
+ else if (scm_is_eq (entry, ly_symbol2scm ("SystemStartBrace"))
+ || scm_is_eq (entry, ly_symbol2scm ("SystemStartBracket"))
+ || scm_is_eq (entry, ly_symbol2scm ("SystemStartBar"))
+ || scm_is_eq (entry, ly_symbol2scm ("SystemStartSquare")))
symbol_ = entry;
else
children_.push_back (new Bracket_nesting_staff (0));
}
Stencil m;
- if (glyph_sym == ly_symbol2scm ("bracket"))
+ if (scm_is_eq (glyph_sym, ly_symbol2scm ("bracket")))
m = staff_bracket (me, len);
- else if (glyph_sym == ly_symbol2scm ("brace"))
+ else if (scm_is_eq (glyph_sym, ly_symbol2scm ("brace")))
m = staff_brace (me, len);
- else if (glyph_sym == ly_symbol2scm ("bar-line"))
+ else if (scm_is_eq (glyph_sym, ly_symbol2scm ("bar-line")))
m = simple_bar (me, len);
- else if (glyph_sym == ly_symbol2scm ("line-bracket"))
+ else if (scm_is_eq (glyph_sym, ly_symbol2scm ("line-bracket")))
m = line_bracket (me, len);
m.translate_axis (ext.center (), Y_AXIS);
Grob *g = entries[j].grob_;
Stencil st = g->get_print_stencil ();
- if (st.expr () == SCM_EOL)
+ if (scm_is_null (st.expr ()))
continue;
Offset o;
bool length_changed = (note_events_.size () != fret_count);
vsize index;
- if (string_fret_finger != SCM_EOL)
+ if (!scm_is_null (string_fret_finger))
for (vsize i = 0; i < fret_count; i++)
{
note_entry = scm_list_ref (string_fret_finger, scm_from_int (i));
string_number = scm_car (note_entry);
- if (string_number != SCM_BOOL_F)
+ if (scm_is_true (string_number))
{
fret = scm_cadr (note_entry);
fret_label = scm_call_3 (fret_procedure,
SCM_BOOL_F);
SCM music_encodings = ly_lily_module_constant ("all-music-font-encodings");
- bool is_music = (scm_memq (encoding, music_encodings) != SCM_BOOL_F);
+ bool is_music = scm_is_true (scm_memq (encoding, music_encodings));
return fm->text_stencil (layout, str, is_music).smobbed_copy ();
}
{
spec.has_manual_position_ = true;
spec.manual_position_ = scm_to_double (scm_car (entry));
- spec.has_manual_delta_y_ = (scm_inexact_p (scm_car (entry)) == SCM_BOOL_T);
+ /* TODO: check whether inexact? is an appropriate condition here */
+ spec.has_manual_delta_y_ = (scm_is_true (scm_inexact_p (scm_car (entry))));
}
if (scm_is_number (scm_cdr (entry)))
SCM pos_scm = tie->get_property ("staff-position");
if (scm_is_number (pos_scm))
{
- has_manual_delta_y_ = (scm_inexact_p (pos_scm) == SCM_BOOL_T);
+ has_manual_delta_y_ = !ly_is_rational (pos_scm);
manual_position_ = scm_to_double (tie->get_property ("staff-position"));
has_manual_position_ = true;
}
time_signature_ = make_item ("TimeSignature", time_cause_);
time_signature_->set_property ("fraction", fr);
- if (last_time_fraction_ == SCM_BOOL_F)
+ if (scm_is_false (last_time_fraction_))
time_signature_->set_property ("break-visibility",
get_property ("initialTimeSignatureVisibility"));
void
Time_signature_engraver::stop_translation_timestep ()
{
- if (time_signature_ && (time_cause_ != SCM_EOL))
+ if (time_signature_ && !scm_is_null (time_cause_))
{
Moment *mp = Moment::unsmob (get_property ("measurePosition"));
if (mp && (mp->main_part_ > Rational (0))
if (global_translator_dict)
global_translator_dict->try_retrieve (sym, &v);
- if (v == SCM_BOOL_F)
+ if (scm_is_false (v))
{
warning (_f ("unknown translator: `%s'", ly_symbol2string (sym).c_str ()));
return 0;
entry.engraver_ = eng;
for (SCM i = iface_list; scm_is_pair (i); i = scm_cdr (i))
{
- Engraver_void_function_engraver_grob_info ptr
+ Translator::Grob_info_callback ptr
= (start_end == START)
? eng->get_acknowledger (scm_car (i))
: eng->get_end_acknowledger (scm_car (i));
Translator_group *
get_translator_group (SCM sym)
{
- if (sym == ly_symbol2scm ("Engraver_group"))
+ if (scm_is_eq (sym, ly_symbol2scm ("Engraver_group")))
return new Engraver_group ();
- else if (sym == ly_symbol2scm ("Performer_group"))
+ else if (scm_is_eq (sym, ly_symbol2scm ("Performer_group")))
return new Performer_group ();
- else if (sym == ly_symbol2scm ("Score_engraver"))
+ else if (scm_is_eq (sym, ly_symbol2scm ("Score_engraver")))
return new Score_engraver ();
- else if (sym == ly_symbol2scm ("Score_performer"))
+ else if (scm_is_eq (sym, ly_symbol2scm ("Score_performer")))
return new Score_performer ();
error (_f ("fatal error. Couldn't find type: %s",
for (SCM s = simple_trans_list_; scm_is_pair (s); s = scm_cdr (s))
{
Translator *tr = Translator::unsmob (scm_car (s));
- Translator_void_method_ptr ptrs[TRANSLATOR_METHOD_PRECOMPUTE_COUNT];
+ Translator::Callback ptrs[TRANSLATOR_METHOD_PRECOMPUTE_COUNT];
tr->fetch_precomputable_methods (ptrs);
assert (tr);
// the static translator_listener_record chains while garbage
// collecting.
- SCM class_sym = scm_permanent_object (scm_from_locale_symbol (name.c_str ()));
+ SCM class_sym = scm_permanent_object (scm_from_ascii_symbol (name.c_str ()));
r->event_class_ = class_sym;
r->get_listener_ = get_listener;
parse_symbol_list (grobs), static_properties);
static_properties = scm_acons (ly_symbol2scm ("description"),
- scm_from_locale_string (desc), static_properties);
+ scm_from_utf8_string (desc), static_properties);
SCM list = SCM_EOL;
for (; listener_list; listener_list = listener_list->next_)
}
void
-add_acknowledger (Engraver_void_function_engraver_grob_info ptr,
+add_acknowledger (Translator::Grob_info_callback ptr,
char const *func_name,
vector<Acknowledge_information> *ack_array)
{
ack_array->push_back (inf);
}
-Engraver_void_function_engraver_grob_info
+Translator::Grob_info_callback
generic_get_acknowledger (SCM sym, vector<Acknowledge_information> const *ack_array)
{
for (vsize i = 0; i < ack_array->size (); i++)
LY_ASSERT_TYPE (scm_is_string, ttf_file_name, 1);
int i = 0;
- if (idx != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (idx))
{
LY_ASSERT_TYPE (scm_is_integer, idx, 2);
i = scm_to_int (idx);
LY_ASSERT_TYPE (scm_is_string, ttf_file_name, 1);
int i = 0;
- if (idx != SCM_UNDEFINED)
+ if (!SCM_UNBNDP (idx))
{
LY_ASSERT_TYPE (scm_is_integer, idx, 2);
i = scm_to_int (idx);
Memory_out_stream stream;
create_type42_font (&stream, file_name, i);
- SCM asscm = scm_from_locale_stringn (stream.get_string (),
+ SCM asscm = scm_from_latin1_stringn (stream.get_string (),
stream.get_length ());
debug_output ("]", false);
*/
SCM bracket_vis_prop = me->get_property ("bracket-visibility");
bool bracket_prop = ly_scm2bool (bracket_vis_prop); // Flag, user has set bracket-visibility prop.
- bool bracket = (bracket_vis_prop == ly_symbol2scm ("if-no-beam"));
+ bool bracket = scm_is_eq (bracket_vis_prop, ly_symbol2scm ("if-no-beam"));
if (scm_is_bool (bracket_vis_prop))
bracket_visibility = bracket_prop;
else if (bracket)
for (SCM s = scm_car (beaming); scm_is_pair (s); s = scm_cdr (s))
{
- if (scm_c_memq (scm_car (s), scm_cdr (beaming)) != SCM_BOOL_F)
+ if (scm_is_true (scm_c_memq (scm_car (s), scm_cdr (beaming))))
++count;
}
if (scm_is_symbol (scm_caaar (s)))
{
if (SCM_UNBNDP (grobname))
- grobname = scm_from_locale_symbol
+ grobname = scm_from_utf8_symbol
(info.grob ()->name ().c_str ());
if (scm_is_eq (scm_caaar (s), grobname))
{
*/
SCM glyph_name_scm = primitive->get_property ("glyph-name");
- if (glyph_name_scm == SCM_EOL)
+ if (scm_is_null (glyph_name_scm))
{
primitive->programming_error ("Vaticana_ligature:"
" undefined glyph-name ->"
if (prev_primitive) /* urgh, need prev_primitive only here */
{
SCM delta_pitch_scm = prev_primitive->get_property ("delta-position");
- if (delta_pitch_scm != SCM_EOL)
+ if (!scm_is_null (delta_pitch_scm))
delta_pitch = scm_to_int (delta_pitch_scm);
else
{
int delta_pitch;
SCM delta_pitch_scm = primitive->get_property ("delta-position");
- if (delta_pitch_scm != SCM_EOL)
+ if (!scm_is_null (delta_pitch_scm))
delta_pitch = scm_to_int (delta_pitch_scm);
else
{
Real interval;
SCM flexa_height_scm = me->get_property ("flexa-height");
- if (flexa_height_scm != SCM_EOL)
+ if (!scm_is_null (flexa_height_scm))
interval = scm_to_int (flexa_height_scm);
else
{
vaticana_brew_primitive (Grob *me)
{
SCM glyph_name_scm = me->get_property ("glyph-name");
- if (glyph_name_scm == SCM_EOL)
+ if (scm_is_null (glyph_name_scm))
{
me->programming_error ("Vaticana_ligature: "
"undefined glyph-name -> ignoring grob");
SCM delta_pitch_scm = me->get_property ("delta-position");
int delta_pitch;
- if (delta_pitch_scm != SCM_EOL)
+ if (!scm_is_null (delta_pitch_scm))
delta_pitch = scm_to_int (delta_pitch_scm);
else
delta_pitch = 0;
SCM c = scm_car (cs);
if (scm_is_pair (c)
- && scm_car (c) == ly_symbol2scm ("volta")
+ && scm_is_eq (scm_car (c), ly_symbol2scm ("volta"))
&& scm_is_pair (scm_cdr (c)))
{
- if (scm_cadr (c) == SCM_BOOL_F)
+ if (scm_is_false (scm_cadr (c)))
end = true;
else
start_string_ = scm_cadr (c);
SCM current_reps = SCM_EOL;
Context *where = get_outlet ()->where_defined (reps, ¤t_reps);
- if (where
- && (current_reps == SCM_EOL || scm_is_pair (current_reps)))
+ if (where && ly_cheap_is_list (current_reps))
{
current_reps = scm_cons (what, current_reps);
where->set_property (reps, current_reps);
%}
-\version "2.19.17" % necessary for upgrading to future LilyPond versions.
+\version "2.19.19" % necessary for upgrading to future LilyPond versions.
\header{
title = "A scale in LilyPond"
%}
-\version "2.19.17" % necessary for upgrading to future LilyPond versions.
+\version "2.19.19" % necessary for upgrading to future LilyPond versions.
\header{
title = "A scale in LilyPond"
--- /dev/null
+%\version "2.19.19"
+
+%%% These are the general utility functions and storage
+% used by the built-in templates and the template kits
+% (tkits) supporting them.
+
+% TODO: these may be more sensibly (re)defined as a scm file
+
+#(define (get-id str)
+ "Return the identifier with the value str"
+ (ly:parser-lookup parser (string->symbol str)))
+
+#(define (make-id a b)
+ "Return the identifier formed from concatenating the
+ two strings provided as arguments."
+ (get-id (string-append a b)))
+
+#(define (cartesian a b)
+ "Return a list formed from concatenating every element
+ of list a with every element of list b (the cartesian
+ product a X b)."
+ (append-map
+ (lambda (x)
+ (map
+ (lambda (y)
+ (string-append x y))
+ b))
+ a))
+
+#(define (define-missing-variables! ids)
+ "Check if each of the identifiers listed in the argument is
+ known to the parser. If any are not, define them and set
+ their value to #f"
+ (for-each
+ (lambda (id)
+ (define sym (string->symbol id))
+ (if (null? (ly:parser-lookup parser sym))
+ (ly:parser-define! parser sym #f)))
+ ids))
+
+% Define the lists used to hold the names and
+% component names which form the variable names
+% used in the templates. These are populated by the
+% set-music-definitions! procedure
+% The variables defined here as empty lists will be provided
+% by the template, and may be set to any values there.
+#(define voice-prefixes '()) % eg "Soprano"
+#(define all-music-names '()) % eg "SopranoMusic"
+#(define lyrics-postfixes '()) % eg "Lyrics"
+#(define lyrics-names '()) % eg "VerseOne"
+
+% Define the derived variables to be populated
+#(define all-music-lyrics-names '()) % eg "SopranoLyrics"
+#(define AllMusic (make-music 'SequentialMusic 'void #t))
+#(define KeepAlive AllMusic) % used to ensure voices don't terminate
+#(define have-music #f) % -> #t when at least one music name
+ % contains music
+#(define voice-postfixes
+ ;; These names are used verbatim in code, so may not be changed
+ '("InstrumentName"
+ "MidiInstrument"
+ "Music"
+ "ShortInstrumentName"))
+
+#(define variable-names
+ ;; These names are used verbatim in code, so may not be changed
+ '("Key"
+ "Layout"
+ "PianoDynamics"
+ "Time"
+ "TwoVoicesPerStaff"))
+
+% Define the predicates used in the tkits and templates
+#(define (above-or-below? x)
+ (member x '("Above" "Below")))
+
+#(define (up-or-down? x)
+ (member x '("Down" "Up" "")))
+
+#(define (voice-prefix? x)
+ (member x voice-prefixes))
+
+#(define (vocal-lyrics-or-verses? x)
+ (or (member x lyrics-postfixes)
+ (member x lyrics-names)))
+
+
+#(define (set-music-definitions! prefixes lyr-postfixes lyr-names)
+ "Populate the name definitions and their derivatives
+ with the values provided by the calling template"
+ (set! voice-prefixes prefixes)
+ (append! variable-names lyr-names)
+ (set! all-music-names
+ (cartesian voice-prefixes '("Music")))
+ (set! lyrics-postfixes lyr-postfixes)
+ (set! lyrics-names lyr-names)
+ (set! all-music-lyrics-names
+ (cartesian voice-prefixes (append
+ voice-postfixes
+ lyrics-postfixes)))
+ (define-missing-variables! (append
+ all-music-lyrics-names
+ variable-names))
+ (set! AllMusic
+ (make-simultaneous-music
+ (filter ly:music?
+ (map
+ (lambda (x)
+ (get-id x))
+ all-music-names))))
+ (set! KeepAlive
+ (skip-of-length AllMusic))
+ (set! have-music
+ (ly:moment<?
+ (ly:make-moment 0)
+ (ly:music-length KeepAlive))))
+
%%%% You should have received a copy of the GNU General Public License
%%%% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-\version "2.19.16"
+\version "2.19.19"
\context {
\name "Global"
\name "CueVoice"
\alias "Voice"
fontSize = #-4
+ \override NoteHead.ignore-ambitus = ##t
\override Stem.length-fraction = #(magstep -4)
\override Beam.length-fraction = #(magstep -4)
\override Beam.beam-thickness = #0.35
#(use-modules (scm clip-region))
#(use-modules (srfi srfi-1))
+#(use-modules (ice-9 pretty-print))
$(if (ly:get-option 'include-settings)
(ly:parser-include-string parser
--- /dev/null
+%\version "2.19.19"
+
+%%% The function used by the built-in templates to
+% build a lyrics context and associate it with a voice.
+
+\include "voice-tkit.ly"
+
+make-one-stanza =
+#(define-music-function
+ (parser location pos staffPrefix voicePrefix altVoicePrefix lyrics)
+ ((above-or-below? #f)
+ voice-prefix?
+ voice-prefix?
+ (voice-prefix?)
+ vocal-lyrics-or-verses?)
+
+ "Make a single stanza
+ (pos: positioned Above or Below the named staff)
+ staffPrefix: voice prefix for the staff to be positioned against
+ voicePrefix: voice prefix for the associated voice
+(altVoicePrefix: voice prefix for the associated voice
+ if the first is not present)
+ lyrics: the words"
+
+ (let* ((lyrics-name (string-append voicePrefix lyrics))
+ (staff-name (string-append staffPrefix "Staff"))
+ (music-name (make-id voicePrefix "Music"))
+ (assoc-voice-name (if music-name
+ voicePrefix
+ altVoicePrefix))
+ (with-clause
+ (if pos
+ #{ \with {
+ #(string-append "align" pos "Context") = #staff-name
+ }
+ #}
+ (make-music 'SequentialMusic 'void #t)))
+ (stanza (if (member lyrics lyrics-postfixes)
+ (make-id voicePrefix lyrics)
+ (get-id lyrics))))
+ (if (and stanza ;we need lyrics and at least one associated voice
+ (or music-name
+ (make-id altVoicePrefix "Music")))
+ #{
+ \new Lyrics = #lyrics-name
+ \with { #with-clause }
+ \lyricsto #(string-append assoc-voice-name "Voice")
+ { #stanza }
+ #}
+ (make-music 'SequentialMusic 'void #t))))
and @var{part2} are combined into one voice where appropriate.
Optional @var{chord-range} sets the distance in steps between notes
that may be combined into a chord or unison.")
- (make-part-combine-music parser
- (list part1 part2) #f chord-range))
+ #{ \context Staff <<
+ \context Voice = "one" \with { \voiceOne } {}
+ \context Voice = "two" \with { \voiceTwo } {}
+ \context Voice = "shared" {}
+ #(make-part-combine-music parser (list part1 part2) #f chord-range)
+ >> #} )
partcombineUp =
#(define-music-function (parser location chord-range part1 part2)
((number-pair? '(0 . 8)) ly:music? ly:music?)
(_i "Take the music in @var{part1} and @var{part2} and typeset so
that they share a staff with stems directed upward.")
- (make-part-combine-music parser
- (list part1 part2) UP chord-range))
+ #{ \context Staff <<
+ \context Voice = "one" \with { \voiceOne } {}
+ \context Voice = "two" \with { \voiceThree } {}
+ \context Voice = "shared" \with { \voiceOne } {}
+ #(make-part-combine-music parser (list part1 part2) UP chord-range)
+ >> #} )
partcombineDown =
#(define-music-function (parser location chord-range part1 part2)
((number-pair? '(0 . 8)) ly:music? ly:music?)
(_i "Take the music in @var{part1} and @var{part2} and typeset so
that they share a staff with stems directed downward.")
- (make-part-combine-music parser
- (list part1 part2) DOWN chord-range))
+ #{ \context Staff <<
+ \context Voice = "one" \with { \voiceFour } {}
+ \context Voice = "two" \with { \voiceTwo } {}
+ \context Voice = "shared" \with { \voiceTwo } {}
+ #(make-part-combine-music parser (list part1 part2) DOWN chord-range)
+ >> #} )
partcombineForce =
#(define-music-function (location parser type once) (boolean-or-symbol? boolean?)
dynamicAbsoluteVolumeFunction = #default-dynamic-absolute-volume
instrumentEqualizer = #default-instrument-equalizer
drumPitchTable = #(alist->hash-table midiDrumPitches)
+
+ %% \quoteDuring is supposed to quote everything but we don't admit
+ %% cue events by default in order not to get multiple midi
+ %% renditions in an orchestral score.
+
+ quotedEventTypes = #'(StreamEvent)
+ quotedCueEventTypes = #'()
+
timing = ##t
}
\context {
\type "Performer_group"
\consists "Staff_performer"
+ \accepts ChordNameVoice
+ \defaultchild ChordNameVoice
\name ChordNames
}
+\context {
+ \Voice
+ \name ChordNameVoice
+}
+
\context {
\type "Performer_group"
\name StaffGroup
--- /dev/null
+%\version "2.19.19"
+
+\include "staff-tkit.ly"
+
+make-pianostaff =
+#(define-music-function (parser location) ()
+
+(if (not PianoRHMidiInstrument)
+ (set! PianoRHMidiInstrument
+ (if PianoMidiInstrument
+ PianoMidiInstrument
+ "acoustic grand")))
+
+(if (not PianoLHMidiInstrument)
+ (set! PianoLHMidiInstrument
+ (if PianoMidiInstrument
+ PianoMidiInstrument
+ "acoustic grand")))
+
+ (if (or
+ PianoRHMusic
+ PianoLHMusic)
+ #{
+
+\new PianoStaff = "PianoStaff"
+ \with {
+ instrumentName = \markup \smallCaps
+ #(if PianoInstrumentName
+ PianoInstrumentName
+ "Piano" )
+ shortInstrumentName = \markup \smallCaps
+ #(if PianoShortInstrumentName
+ PianoShortInstrumentName
+ "")
+ \override VerticalAxisGroup.remove-empty = ##t
+ \override VerticalAxisGroup.remove-first = ##t
+ }
+ <<
+ \make-one-voice-staff ##f "PianoRH" "treble" ""
+ #(if PianoDynamics
+ #{ \new Dynamics = "PianoDynamics" { #PianoDynamics } #} )
+ \make-one-voice-staff ##f "PianoLH" "bass" ""
+ >>
+ #}
+ (make-music 'SequentialMusic 'void #t)))
-%\version "2.19.17"
+%\version "2.19.19"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%
of the following staves:
Descant Staff
- Soprano and Alto (optionally on two Staves or one Staff)
+ Women Staff (single voice on one staff)
+ Soprano and Alto (optionally on two Staves or one Staff each)
Multiple verses (up to 9)
- Tenor and Bass (optionally on two Staves or one Staff)
+ Tenor and Bass (optionally on two Staves or one Staff each)
+ Men Staff (single voice on one staff)
Piano Staff
It is intended primarily to hide the complexity of the context
\paper { ... }
\header { ... }
- TwoVoicesPerStaff = ##f or ##t
Key = { ... }
Time = { ... }
- Layout = \layout { ... }
DescantMusic = \relative { ... }
DescantLyrics = \lyricmode { ... }
+ WomenMusic = \relative { ... }
+ WomenLyrics = \lyricmode { ... }
SopranoMusic = \relative { ... }
SopranoLyrics = \lyricmode { ... }
AltoMusic = \relative { ... }
TenorLyrics = \lyricmode { ... }
BassMusic = \relative { ... }
BassLyrics = \lyricmode { ... }
+ MenMusic = \relative { ... }
+ MenLyrics = \lyricmode { ... }
PianoRHMusic = \relative { ... }
PianoDynamics = { ... }
PianoLHMusic = \relative { ... }
+ TwoVoicesPerStaff = ##f
\include "satb.ly"
All of the definitions are optional. Staves with no music will be
omitted from the output.
- Other variables, such as the instrumentName, can also be changed by
- defining variables like AltoInstrumentName. The key is defined in
- the variable Key, and the structure of time and repeats in the
- variable Time, using spacer rests. A \layout block may be defined in
- the variable Layout. There is no default \header block and no default
- \paper block.
+ Other variables, such as the instrumentName, shortInstrumentName
+ and MidiInstrument can also be changed by defining variables like
+ AltoInstrumentName, BassMidiInstrument, etc. The prefixes for staves
+ containing two divided voices are WomenDivided and MenDivided, hence
+ the corresponding variables would be WomenDividedInstrumentName, etc.
+ The key is defined in the variable Key, and the structure of time
+ and repeats in the variable Time, using spacer rests.
+
+ A \layout block may be defined in the variable Layout. There is
+ no default \header block and no default \paper block.
Music may be tagged with #'print or #'play to be included only in
the printed score or in the MIDI file respectively.
%}
-#(defmacro satb-defaulting (name . default)
- (if (defined? name) name (if (pair? default) (car default) *unspecified*)))
-
-#(define (satb-sym . strings) (string->symbol (apply string-append strings)))
-
-#(defmacro satb-short-name (part)
- "Use PartShortInstrumentName, or the first letter of
-PartInstrumentName or its default."
- (if (defined? (satb-sym part "Music"))
- (let ((sname (satb-sym part "ShortInstrumentName")))
- (if (defined? sname)
- sname
- `(substring (satb-defaulting ,(satb-sym part "InstrumentName") ,part)
- 0 1)))
- ""))
-
-#(defmacro satb-lyrics-if-defined (name voice . optionals)
- (let ((above (and (pair? optionals) (car optionals))))
- (if (defined? name)
- `(make-music 'ContextSpeccedMusic
- 'create-new #t
- 'context-type 'Lyrics
- 'property-operations ',(if above `((assign alignAboveContext ,above)) '())
- 'element (make-music 'LyricCombineMusic
- 'associated-context ,voice
- 'element ,name))
- *unspecified*)))
-
-#(defmacro satb-one-voice-staff (name clef)
- `#{ <<
- \new Staff = #,name \with {
- instrumentName = \markup \smallCaps
- #(satb-defaulting ,(satb-sym name "InstrumentName") ,name)
- shortInstrumentName = \markup \smallCaps #(satb-short-name ,name)
- midiInstrument = "clarinet"
- } {
- #(satb-defaulting Key)
- \clef #,clef
- \new Voice = #,name <<
- #(satb-defaulting Time)
- \dynamicUp
- #(satb-defaulting ,(satb-sym name "Music"))
- >>
- }
- #(satb-lyrics-if-defined ,(satb-sym name "Lyrics") ,name)
- #(satb-lyrics-if-defined ,(satb-sym name "LyricsOne") ,name)
- #(satb-lyrics-if-defined ,(satb-sym name "LyricsTwo") ,name)
- #(satb-lyrics-if-defined ,(satb-sym name "LyricsThree") ,name)
- >> #})
-
-#(defmacro satb-two-voice-staff (name clef v1name v2name)
- `#{ <<
- \new Staff = #,name \with {
- instrumentName = \markup \right-column \smallCaps {
- #(satb-defaulting ,(satb-sym v1name "InstrumentName") ,v1name)
- #(satb-defaulting ,(satb-sym v2name "InstrumentName") ,v2name)
- }
- shortInstrumentName = \markup \right-column \smallCaps {
- #(satb-short-name ,v1name)
- #(satb-short-name ,v2name)
- }
- midiInstrument = "clarinet"
- } <<
- #(satb-defaulting Key)
- \clef #,clef
- \new Voice = #,v1name <<
- #(satb-defaulting Time)
- \voiceOne
- \dynamicUp
- #(satb-defaulting ,(satb-sym v1name "Music"))
- >>
- \new Voice = #,v2name <<
- #(satb-defaulting Time)
- \voiceTwo
- #(satb-defaulting ,(satb-sym v2name "Music"))
- >>
- >>
- #(satb-lyrics-if-defined ,(satb-sym v1name "Lyrics") ,v1name ,name)
- #(satb-lyrics-if-defined ,(satb-sym v1name "LyricsOne") ,v1name ,name)
- #(satb-lyrics-if-defined ,(satb-sym v1name "LyricsTwo") ,v1name ,name)
- #(satb-lyrics-if-defined ,(satb-sym v1name "LyricsThree") ,v1name ,name)
- #(satb-lyrics-if-defined ,(satb-sym v2name "Lyrics") ,v2name)
- #(satb-lyrics-if-defined ,(satb-sym v2name "LyricsOne") ,v2name)
- #(satb-lyrics-if-defined ,(satb-sym v2name "LyricsTwo") ,v2name)
- #(satb-lyrics-if-defined ,(satb-sym v2name "LyricsThree") ,v2name)
- >> #})
-
-SATB = <<
+\include "vocal-tkit.ly"
+\include "piano-tkit.ly"
+
+#(define satb-voice-prefixes
+ ;; These define the permitted prefixes to various names.
+ ;; They are combined with a fixed set of postfixes to form
+ ;; names such as AltoMusic, BassInstrumentName, etc.
+ ;; These names may be redefined.
+ '("Alto"
+ "Bass"
+ "Descant"
+ "Men"
+ "MenDivided"
+ "Piano"
+ "PianoLH"
+ "PianoRH"
+ "Soprano"
+ "Tenor"
+ "Women"
+ "WomenDivided"))
+
+#(define satb-lyrics-postfixes
+ ;; These define the permitted postfixes to the names of lyrics.
+ ;; They are combined with the prefixes to form names like
+ ;; AltoLyrics, etc.
+ ;; These names may be redefined or extended.
+ '("Lyrics"
+ "LyricsOne"
+ "LyricsTwo"
+ "LyricsThree"
+ "LyricsFour"))
+
+#(define satb-lyrics-variable-names
+ ;; These define the names which may be used to specify stanzas
+ ;; which go between the two two-voice staves when TwoVoicesPerStaff
+ ;; is set to #t. They may be redefined or extended.
+ '("VerseOne"
+ "VerseTwo"
+ "VerseThree"
+ "VerseFour"
+ "VerseFive"
+ "VerseSix"
+ "VerseSeven"
+ "VerseEight"
+ "VerseNine"))
+
+%% make the above definitions available
+#(set-music-definitions!
+ satb-voice-prefixes
+ satb-lyrics-postfixes
+ satb-lyrics-variable-names)
+
+
+SATB =
+{
\new ChoirStaff
\with {
\override VerticalAxisGroup.remove-empty = ##t
\override VerticalAxisGroup.remove-first = ##t
}
<<
- #(satb-one-voice-staff "Descant" "treble")
-
- #(if (satb-defaulting TwoVoicesPerStaff #f)
- (satb-two-voice-staff "Women" "treble" "Soprano" "Alto")
- (make-simultaneous-music (list (satb-one-voice-staff "Soprano" "treble")
- (satb-one-voice-staff "Alto" "treble"))))
-
- #(satb-lyrics-if-defined VerseOne "Soprano")
- #(satb-lyrics-if-defined VerseTwo "Soprano")
- #(satb-lyrics-if-defined VerseThree "Soprano")
- #(satb-lyrics-if-defined VerseFour "Soprano")
- #(satb-lyrics-if-defined VerseFive "Soprano")
- #(satb-lyrics-if-defined VerseSix "Soprano")
- #(satb-lyrics-if-defined VerseSeven "Soprano")
- #(satb-lyrics-if-defined VerseEight "Soprano")
- #(satb-lyrics-if-defined VerseNine "Soprano")
-
- #(if (satb-defaulting TwoVoicesPerStaff #f)
- (satb-two-voice-staff "Men" "bass" "Tenor" "Bass")
- (make-simultaneous-music (list (satb-one-voice-staff "Tenor" "treble_8")
- (satb-one-voice-staff "Bass" "bass"))))
- >> % End ChoirStaff
-
- \new PianoStaff
- \with {
- instrumentName = \markup \smallCaps
- #(satb-defaulting PianoInstrumentName "Piano" )
- shortInstrumentName = \markup \smallCaps #(satb-short-name "Piano" )
- \override VerticalAxisGroup.remove-empty = ##t
- \override VerticalAxisGroup.remove-first = ##t
- }
- <<
- \new Staff {
- \clef "treble"
- #(satb-defaulting Key)
- \new Voice <<
- #(satb-defaulting Time)
- #(satb-defaulting PianoRHMusic)
- >>
- }
- \new Dynamics {
- #(satb-defaulting PianoDynamics)
- }
- \new Staff {
- \clef "bass"
- #(satb-defaulting Key)
- \new Voice <<
- #(satb-defaulting Time)
- #(satb-defaulting PianoLHMusic)
- >>
- }
+ \make-one-voice-vocal-staff "Descant" "treble"
+ \make-one-voice-vocal-staff "Women" "treble"
+ #(if TwoVoicesPerStaff
+ #{
+ \make-two-vocal-staves-with-stanzas
+ "WomenDivided" "treble" "MenDivided" "bass"
+ "Soprano" "Alto" "Tenor" "Bass"
+ #satb-lyrics-variable-names
+ #}
+ #{
+ <<
+ \make-one-voice-vocal-staff "Soprano" "treble"
+ \make-one-voice-vocal-staff "Alto" "treble"
+ \make-one-voice-vocal-staff "Tenor" "treble_8"
+ \make-one-voice-vocal-staff "Bass" "bass"
+ >>
+ #} )
+ \make-one-voice-vocal-staff "Men" "bass"
>>
->>
+}
+
+Piano = \make-pianostaff
\tagGroup #'(print play)
\score {
- \keepWithTag #'print \SATB
- \layout { $(satb-defaulting Layout) }
+ \keepWithTag #'print
+ #(if have-music
+ #{ << \SATB \Piano >> #}
+ #{ { } #} )
+ \layout { $(if Layout #{ \Layout #} ) }
}
+
\score {
- \keepWithTag #'play \SATB
- \midi { }
+ \keepWithTag #'play
+ #(if have-music
+ #{ << \SATB \Piano >> #}
+ #{ { } #} )
+ \midi {
+ \context {
+ \Score
+ midiChannelMapping = #'instrument
+ }
+ }
}
--- /dev/null
+%\version "2.19.19"
+
+\include "voice-tkit.ly"
+
+
+%% Staff-oriented functions
+
+% These assume the following lists have been defined:
+% voice-prefixes eg "Soprano"
+% voice-postfixes eg "Music"
+% lyrics-postfixes eg "Lyrics"
+% lyrics-names eg "VerseOne"
+% variable-names eg "Time"
+%
+% The first three lists are used to generate compound
+% names such as "SopranoLyrics" and "SopranoInstrumentName"
+% The last two lists of names are used as-is.
+
+
+make-one-voice-staff =
+#(define-music-function (parser location show-instrName name clef dynamic-direction)
+ ((boolean? #t) voice-prefix? string? (up-or-down? ""))
+
+ "Make a staff with one voice (no lyrics)
+ show-instrName: show instrument and short instrument names?
+ name: the default prefix for instrument name and music
+ clef: the clef for this staff
+ dynamic-direction: dynamics are up, down or neither"
+
+ (define music (make-id name "Music"))
+ (define instrName (make-id name "InstrumentName"))
+ (define shortInstrName (make-id name "ShortInstrumentName"))
+ (define midiName (make-id name "MidiInstrument"))
+ (define dynUp (equal? dynamic-direction "Up"))
+ (define dynDown (equal? dynamic-direction "Down"))
+ (if music
+ #{
+ \new Staff = #(string-append name "Staff")
+ \with {
+ instrumentName = \markup \smallCaps {
+ #(if show-instrName
+ (if instrName
+ #{ #instrName #}
+ #{ #name #} )
+ #{ "" #} )
+ }
+ shortInstrumentName = \markup \smallCaps {
+ #(if show-instrName
+ (if shortInstrName
+ #{ #shortInstrName #}
+ (if instrName
+ #{ #(substring instrName 0 1) #}
+ #{ #(substring name 0 1) #} ))
+ #{ "" #} )
+ }
+ midiInstrument =
+ #(if midiName
+ #{ #midiName #}
+ #{ "clarinet" #} )
+ #(if dynUp
+ #{ \dynamicUp #}
+ (if dynDown
+ #{ \dynamicDown #}
+ #{ \dynamicNeutral #} ))
+ }
+ {
+ #(if Key #{ \Key #} )
+ \clef #clef
+ \make-voice #name
+ }
+ #}
+ (make-music 'SequentialMusic 'void #t)))
+
+
+make-two-voice-staff =
+#(define-music-function (parser location name clef v1name v2name)
+ (voice-prefix? string? voice-prefix? voice-prefix?)
+
+ "Make a vocal staff with two voices
+ name: the prefix to the staff name
+ clef: the clef to use
+ v1name: the prefix to the name of voice one
+ v2name: the prefix to the name of voice two "
+
+ (define v1music (make-id v1name "Music"))
+ (define v2music (make-id v2name "Music"))
+ (define instrName (make-id name "InstrumentName"))
+ (define v1InstrName (make-id v1name "InstrumentName"))
+ (define v2InstrName (make-id v2name "InstrumentName"))
+ (define shortInstrName (make-id name "ShortInstrumentName"))
+ (define v1ShortInstrName (make-id v1name "ShortInstrumentName"))
+ (define v2ShortInstrName (make-id v2name "ShortInstrumentName"))
+ (define v1midiName (make-id v1name "MidiInstrument"))
+ (define v2midiName (make-id v2name "MidiInstrument"))
+ (if (or v1music v2music)
+ #{
+ <<
+ \new Staff = #(string-append name "Staff")
+ \with {
+ \remove "Staff_performer"
+ instrumentName =
+ #(if instrName
+ #{ \markup \smallCaps #instrName #}
+ #{ \markup \right-column \smallCaps {
+ #(if v1music
+ (if v1InstrName
+ v1InstrName
+ v1name)
+ "")
+ #(if v2music
+ (if v2InstrName
+ v2InstrName
+ v2name)
+ "") } #} )
+ shortInstrumentName =
+ #(if shortInstrName
+ #{ \markup \smallCaps #shortInstrName #}
+ #{ \markup \right-column \smallCaps {
+ #(if v1music
+ (if v1ShortInstrName
+ v1ShortInstrName
+ (if v1InstrName
+ (substring v1InstrName 0 1)
+ (substring v1name 0 1)))
+ "")
+ #(if v2music
+ (if v2ShortInstrName
+ v2ShortInstrName
+ (if v2InstrName
+ (substring v2InstrName 0 1)
+ (substring v2name 0 1)))
+ "") } #} )
+ }
+ <<
+ #(if Key #{ \Key #} )
+ \clef #clef
+
+ #(if v1music
+ #{
+ \new Voice = #(string-append v1name "Voice")
+ \with {
+ \consists "Staff_performer"
+ \dynamicUp
+ midiInstrument =
+ #(if v1midiName
+ #{ #v1midiName #}
+ #{ "clarinet" #})
+ }
+ <<
+ #(if KeepAlive #{ \KeepAlive #} )
+ #(if Time #{ \Time #} )
+ #(if v2music #{ \voiceOne #} #{ \oneVoice #} )
+ #v1music
+ >>
+ #} )
+
+ #(if v2music
+ #{
+ \new Voice = #(string-append v2name "Voice")
+ \with {
+ \consists "Staff_performer"
+ \dynamicDown
+ midiInstrument =
+ #(if v2midiName
+ #{ #v2midiName #}
+ #{ "clarinet" #})
+ }
+ <<
+ #(if KeepAlive #{ \KeepAlive #} )
+ #(if Time #{ \Time #} )
+ #(if v1music #{ \voiceTwo #} #{ \oneVoice #} )
+ #v2music
+ >>
+ #} )
+ >>
+ >>
+ #}
+ (make-music 'SequentialMusic 'void #t)))
--- /dev/null
+%\version "2.19.19"
+
+\include "lyrics-tkit.ly"
+\include "staff-tkit.ly"
+
+make-one-voice-vocal-staff =
+#(define-music-function (parser location name clef)
+ (voice-prefix? string?)
+
+ "Make a staff with one voice and lyrics beneath
+ name: the default prefix for instrument name and music
+ clef: the clef for this staff "
+
+ (if (make-id name "Music")
+ #{
+ <<
+ \make-one-voice-staff #name #clef "Up"
+ #(make-simultaneous-music
+ (reverse (map
+ (lambda (lyrics-postfix)
+ #{ \make-one-stanza "Below" #name #name #lyrics-postfix #} )
+ lyrics-postfixes)))
+ >>
+ #}
+ (make-music 'SequentialMusic 'void #t)))
+
+make-two-voice-vocal-staff =
+#(define-music-function (parser location name clef v1name v2name)
+ (voice-prefix? string? voice-prefix? voice-prefix?)
+
+ "Make a vocal staff with two voices and lyrics above and below
+ name: the prefix to the staff name
+ clef: the clef to use
+ v1name: the prefix to the name of voice one
+ v2name: the prefix to the name of voice two "
+
+ (define v1music (make-id v1name "Music"))
+ (define v2music (make-id v2name "Music"))
+
+ #{
+ <<
+ \make-two-voice-staff #name #clef #v1name #v2name
+ #(if v1music
+ (make-simultaneous-music
+ (map
+ (lambda (lyrics-postfix)
+ #{ \make-one-stanza "Above" #name #v1name #lyrics-postfix #} )
+ lyrics-postfixes)))
+
+ #(if v2music
+ (make-simultaneous-music
+ (reverse (map
+ (lambda (lyrics-postfix)
+ #{ \make-one-stanza "Below" #name #v2name #lyrics-postfix #} )
+ lyrics-postfixes))))
+ >>
+ #} )
+
+make-two-vocal-staves-with-stanzas =
+#(define-music-function
+ (parser location
+ upperName upperClef lowerName lowerClef
+ v1name v2name v3name v4name verses)
+ (voice-prefix? string? voice-prefix? string?
+ voice-prefix? voice-prefix? voice-prefix? voice-prefix? list?)
+
+ "Make two two-voice vocal staves with several stanzas between them.
+The number of stanzas is determined by the number of populated verse names.
+ upperName: the prefix to the upper staff name
+ upperClef: the clef to use on the upper staff
+ lowerName: the prefix to the lower staff name
+ lowerClef: the clef to use on the lower staff
+ vxname: the prefix to the name of voice x, x = 1..4
+ verses: the list of verse names containing the stanzas"
+
+ #{
+ <<
+ \make-two-voice-vocal-staff
+ #upperName #upperClef #v1name #v2name
+ #(make-simultaneous-music
+ (map
+ (lambda (verse-name)
+ #{ \make-one-stanza
+ #upperName #v1name #v2name #verse-name #} )
+ verses))
+ \make-two-voice-vocal-staff
+ #lowerName #lowerClef #v3name #v4name
+ >>
+ #} )
+
--- /dev/null
+%\version "2.19.19"
+
+\include "base-tkit.ly"
+
+make-voice =
+#(define-music-function (parser location name) (voice-prefix?)
+ (define music (make-id name "Music"))
+ (if music
+ #{
+ \new Voice = #(string-append name "Voice") <<
+ #(if KeepAlive KeepAlive)
+ #(if Time Time )
+ #music
+ >>
+ #} ))
+
CenturySchL-Roma.otf \
CenturySchL-Bold.otf)
+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)
+
LOG_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.log)
LISP_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.lisp)
ENC_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.enc)
ALL_GEN_FILES = $(ENC_FILES) \
$(NCSB_OTFS) \
+ $(HELV_OTFS) \
+ $(COUR_OTFS) \
$(OTF_FILES) \
$(SVG_FILES) \
$(WOFF_FILES)
INSTALLATION_OUT_DIR1 = $(local_lilypond_datadir)/fonts/otf
INSTALLATION_OUT_FILES1 = $(OTF_FILES) \
- $(NCSB_OTFS)
+ $(NCSB_OTFS) $(HELV_OTFS) $(COUR_OTFS)
INSTALLATION_OUT_DIR2 = $(local_lilypond_datadir)/fonts/svg
INSTALLATION_OUT_FILES2 = $(SVG_FILES) $(WOFF_FILES)
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)
# Danish translation of lilypond
-# Copyright (C) 2001 Free Software Foundation, Inc.
+# Copyright (C) 2015 Free Software Foundation, Inc.
+# This file is distributed under the same license as the lilypond package.
# Keld Simonsen <keld@dkuug.dk>, 2001-2002.
# Reviewed 2001-09-28 Rune Zedeler <rz@daimi.au.dk>
+# Joe Hansen <joedalton2@yahoo.dk>, 2015.
+#
+# Konventioner:
+# alteration -> alteration
+# beam -> bjælke
+# clef -> nøgle
+# duration -> længde
+# glyph -> skrifttegn
+# grace note -> forslagstone (siger ordlisten; men er det forslagsnode?)
+# key -> toneart
+# ligature -> fraseringsbue
+# rest -> pause
+# score -> partitur
+# skip -> hop eller udelad
+# slur -> legatobue
+# snippet -> kodestykke (kodestump?)
+# spanner -> bro
+# stem -> nodehals
+# stray -> malplaceret
+# tie -> bindebue
+# tuplet -> irregulær nodeværdi
#
msgid ""
msgstr ""
-"Project-Id-Version: lilypond 1.6.0\n"
-"POT-Creation-Date: 2002-08-18 17:05+0200\n"
-"PO-Revision-Date: 2003-01-17 21:00+0200\n"
-"Last-Translator: Keld Simonsen <keld@dkuug.dk>\n"
-"Language-Team: Danish <dansk@klid.dk>\n"
+"Project-Id-Version: lilypond 2.19.16\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-04-10 21:00+0200\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Language: da\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: lilypond-book.py:1019 ly2dvi.py:458 ly2dvi.py:491
-#, c-format
-msgid "Running %s..."
-msgstr "Kør %s..."
+#: book_base.py:26
+#, python-format
+msgid "file not found: %s"
+msgstr "filen blev ikke fundet: %s"
-#: ly2dvi.py:118
-msgid "Distributed under terms of the GNU General Public License. It comes with NO WARRANTY."
-msgstr "Distribueret under betingelserne i GNU Generelle Offentlige Licens (GLP). Den leveres UDEN NOGEN GARANTIER."
+#: book_base.py:164
+msgid "Output function not implemented"
+msgstr "Uddatafunktion er ikke implementeret"
-#: ly2dvi.py:125 midi2ly.py:148 mup2ly.py:143 update-lily.py:137 input.cc:87
-msgid "warning: "
-msgstr "advarsel: "
+#: book_latex.py:174
+msgid "cannot find \\begin{document} in LaTeX document"
+msgstr "kan ikke finde \\begin{document} i LaTeX-dokument"
-#: ly2dvi.py:128 ly2dvi.py:143 midi2ly.py:163 midi2ly.py:1012 midi2ly.py:1081
-#: mup2ly.py:146 mup2ly.py:160 update-lily.py:152 update-lily.py:458
-#: input.cc:92
-msgid "error: "
-msgstr "fejl: "
+#: book_latex.py:190
+#, python-format
+msgid "Running `%s' on file `%s' to detect default page settings.\n"
+msgstr "Kører »%s« på filen »%s« for at detektere standardindstillinger for siden.\n"
-#: ly2dvi.py:144 midi2ly.py:164 mup2ly.py:161 update-lily.py:153
-msgid "Exiting ... "
-msgstr "Afslutter... "
+#: book_latex.py:219 book_texinfo.py:228
+msgid "Unable to auto-detect default settings:\n"
+msgstr "Kan ikke automatisk detektere standardingstillinger:\n"
-#: ly2dvi.py:202 midi2ly.py:222 mup2ly.py:219 update-lily.py:211
-#, c-format
-msgid "Usage: %s [OPTION]... FILE"
-msgstr "Brug: %s [FLAG]... FIL"
+#: book_latex.py:231 book_texinfo.py:240
+#, python-format
+msgid ""
+"Unable to auto-detect default settings:\n"
+"%s"
+msgstr ""
+"Kan ikke automatisk detektere standardindstillinger:\n"
+"%s"
+
+#: book_latex.py:254
+msgid "cannot detect textwidth from LaTeX"
+msgstr "kan ikke detektere tekstbredde fra LaTeX"
+
+#: book_snippets.py:406
+#, python-format
+msgid "deprecated ly-option used: %s=%s"
+msgstr "forældet ly-tilvalg brugt: %s=%s"
+
+#: book_snippets.py:408
+#, python-format
+msgid "compatibility mode translation: %s=%s"
+msgstr "kompatibilitetstilstandsoversættelse: %s=%s"
+
+#: book_snippets.py:411
+#, python-format
+msgid "deprecated ly-option used: %s"
+msgstr "forældet ly-tilvalg brugt: %s"
+
+#: book_snippets.py:413
+#, python-format
+msgid "compatibility mode translation: %s"
+msgstr "kompatibilitetstilstandsoversættelse: %s"
+
+#: book_snippets.py:530
+#, python-format
+msgid "ignoring unknown ly option: %s"
+msgstr "ignorerer ukendt ly-tilvalg: %s"
+
+#: book_snippets.py:621
+#, python-format
+msgid "Missing files: %s"
+msgstr "Mangler filer: %s"
+
+#: book_snippets.py:661
+#, python-format
+msgid "Could not overwrite file %s"
+msgstr "Kunne ikke overskrive filen %s"
+
+#: book_snippets.py:748
+#, python-format
+msgid "Running through filter `%s'"
+msgstr "Kører igennem filter »%s«"
+
+#: book_snippets.py:769
+#, python-format
+msgid "`%s' failed (%d)"
+msgstr "»%s« mislykkedes (%d)"
+
+#: book_snippets.py:770
+msgid "The error log is as follows:"
+msgstr "Fejlloggen ser således ud:"
-#: ly2dvi.py:206 midi2ly.py:226 mup2ly.py:223 update-lily.py:215 main.cc:166
-msgid "Options:"
-msgstr "Flag:"
+#: book_snippets.py:890
+#, python-format
+msgid "Converting MusicXML file `%s'...\n"
+msgstr "Konverterer MusicXMl-filen »%s« ...\n"
-#: ly2dvi.py:210 midi2ly.py:230 mup2ly.py:227 update-lily.py:219 main.cc:172
-#, c-format
-msgid "Report bugs to %s"
+#: book_snippets.py:917
+#, python-format
+msgid ""
+"%s: duplicate filename but different contents of original file,\n"
+"printing diff against existing file."
msgstr ""
-"Rapportér programfejl til %s\n"
-"Rapportér fejl i oversættelsen til <dansk@klid.dk>"
+"%s: duplikeret filnavn men forskelligt indhold for original fil,\n"
+"udskriver forskelsfil mod eksisterende fil."
-#: ly2dvi.py:238 midi2ly.py:258 mup2ly.py:255 update-lily.py:247
-#, c-format
-msgid "Invoking `%s'"
-msgstr "Starter \"%s\""
+#: book_snippets.py:930
+#, python-format
+msgid ""
+"%s: duplicate filename but different contents of converted lilypond file,\n"
+"printing diff against existing file."
+msgstr ""
+"%s: duplikeret filnavn men forskelligt indhold for konvereteret lilypond-fil,\n"
+"udskriver forskelsfil mod eksisterende fil."
+
+#. Work around a texi2pdf bug: if LANG=C is not given, a broken regexp is
+#. used to detect relative/absolute paths, so the absolute path is not
+#. detected as such and this command fails:
+#: book_texinfo.py:206
+#, python-format
+msgid "Running texi2pdf on file %s to detect default page settings.\n"
+msgstr "Kører texi2pdf på filen %s for at detektere standardindstillinger for side.\n"
+
+#: convertrules.py:13
+#, python-format
+msgid "Not smart enough to convert %s."
+msgstr "Ikke smart nok til at konvertere %s."
+
+#: convertrules.py:14
+msgid "Please refer to the manual for details, and update manually."
+msgstr "Se venligst manualen for detaljer, og opdater manuelt."
+
+#: convertrules.py:15
+#, python-format
+msgid "%s has been replaced by %s"
+msgstr "%s er blevet erstattet af %s"
+
+#: convertrules.py:25 lilylib.py:136 warn.cc:223
+#, c-format, python-format
+msgid "warning: %s"
+msgstr "advarsel: %s"
+
+#: convertrules.py:50 convertrules.py:95
+msgid "\\header { key = concat + with + operator }"
+msgstr "\\header { key = concat + with + operator }"
+
+#: convertrules.py:57
+#, python-format
+msgid "deprecated %s"
+msgstr "forældet %s"
+
+#: convertrules.py:66
+msgid "deprecated \\textstyle, new \\key syntax"
+msgstr "forældet \\textstyle, ny \\key-syntaks"
+
+#: 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
+msgid "bump version for release"
+msgstr "bump version for udgivelse"
+
+#: convertrules.py:98
+msgid "new \\header format"
+msgstr "nyt \\header-format"
+
+#: convertrules.py:125
+msgid "\\translator syntax"
+msgstr "\\translator-syntaks"
+
+#: convertrules.py:176
+msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative"
+msgstr "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative"
+
+#: convertrules.py:206 convertrules.py:679 convertrules.py:1351
+#: convertrules.py:2318
+#, python-format
+msgid "deprecate %s"
+msgstr "foræld %s"
+
+#: convertrules.py:280
+#, python-format
+msgid "deprecate %s "
+msgstr "foræld %s "
+
+#: convertrules.py:306
+msgid "new \\notenames format"
+msgstr "nyt \\notenames-format"
+
+#: convertrules.py:322
+msgid "new tremolo format"
+msgstr "nyt tremoloformat"
+
+#: convertrules.py:326
+msgid "Staff_margin_engraver deprecated, use Instrument_name_engraver"
+msgstr "Staff_margin_engraver forældet, brug Instrument_name_engraver"
+
+#: convertrules.py:377
+msgid "change property definition case (eg. onevoice -> oneVoice)"
+msgstr "ændr egenskabsdefinitionstilfælde (f.eks. onevoice -> oneVoice)"
+
+#: convertrules.py:438
+msgid "new \\textscript markup text"
+msgstr "ny \\textscript-opmærkningstekst"
+
+#: convertrules.py:510
+#, python-format
+msgid "identifier names: %s"
+msgstr "identifikationsnavne: %s"
+
+#: convertrules.py:549
+msgid "point-and-click argument changed to procedure."
+msgstr "peg og klik-parameter ændret til procedure."
+
+#: convertrules.py:591
+msgid "semicolons removed"
+msgstr "semikolonner fjernet"
+
+#. 40 ?
+#: convertrules.py:634
+#, python-format
+msgid "%s property names"
+msgstr "%s-egenskabsnavne"
+
+#: convertrules.py:704
+msgid "automaticMelismata turned on by default"
+msgstr "automaticMelismata aktiveret som standard"
+
+#: convertrules.py:709
+msgid "automaticMelismata is turned on by default since 1.5.67."
+msgstr "automaticMelismata er aktiveret som standard siden 1.5.67."
+
+#: convertrules.py:943 convertrules.py:1636 convertrules.py:1890
+#: convertrules.py:2135
+#, python-format
+msgid "remove %s"
+msgstr "fjern %s"
+
+#: convertrules.py:978 convertrules.py:981
+msgid "cluster syntax"
+msgstr "klyngesyntaks"
+
+#: convertrules.py:988
+msgid "new Pedal style syntax"
+msgstr "ny Pedal-stilsyntaks"
+
+#: convertrules.py:1247
+msgid ""
+"New relative mode,\n"
+"Postfix articulations, new text markup syntax, new chord syntax."
+msgstr ""
+"Ny relativ tilstand,\n"
+"Postfix-artikulationer, ny tekstopmærkningssyntaks, ny akkordsyntaks."
-#: ly2dvi.py:243 midi2ly.py:262 mup2ly.py:260 update-lily.py:251
-#, c-format
-msgid "command exited with value %d"
-msgstr "kommandoen afsluttede med værdi %d"
+#: convertrules.py:1260
+msgid "Remove - before articulation"
+msgstr "Fjern - før artikulation"
-#: ly2dvi.py:246 midi2ly.py:264 mup2ly.py:263 update-lily.py:253
-msgid "(ignored)"
-msgstr "(ignoreret)"
+#: convertrules.py:1295
+#, python-format
+msgid "%s misspelling"
+msgstr "%s stavefejl"
-# hær er det spørg om rensning af en temporærkatalog
-#: ly2dvi.py:256 midi2ly.py:274 mup2ly.py:273 update-lily.py:263
-#, c-format
-msgid "Cleaning %s..."
-msgstr "Renser %s..."
+#: convertrules.py:1314
+msgid "Swap < > and << >>"
+msgstr "Ombyt < > og << >>"
+
+#: convertrules.py:1317
+msgid "attempting automatic \\figures conversion. Check results!"
+msgstr "forsøger automatisk \\figures-konvertering. Kontroller resultater!"
+
+#: convertrules.py:1363
+msgid "Use Scheme code to construct arbitrary note events."
+msgstr "Brug Schemekode til at konstruere arbitrære nodehændelser."
+
+#: convertrules.py:1370
+msgid ""
+"use symbolic constants for alterations,\n"
+"remove \\outputproperty, move ly:verbose into ly:get-option"
+msgstr ""
+"brug symbolske konstanter for alterationer,\n"
+"fjern \\outputproperty, flyt ly:verbose til ly:get-option"
+
+#: convertrules.py:1395
+#, python-format
+msgid ""
+"\\outputproperty found,\n"
+"Please hand-edit, using\n"
+"\n"
+" \\applyoutput #(outputproperty-compatibility %s '%s <GROB PROPERTY VALUE>)\n"
+"\n"
+"as a substitution text."
+msgstr ""
+"\\outputproperty found,\n"
+"HÃ¥ndregier venligst, via\n"
+"\n"
+" \\applyoutput #(outputproperty-compatibility %s '%s <GROB-EGENSKABSVÆRDI>)\n"
+"\n"
+"som en substitutionstekst."
-#: ly2dvi.py:330
-msgid "Run LilyPond using LaTeX for titling"
+#: convertrules.py:1407
+msgid ""
+"The alteration field of Scheme pitches was multiplied by 2\n"
+"to support quarter tone accidentals. You must update the following constructs manually:\n"
+"\n"
+"* calls of ly:make-pitch and ly:pitch-alteration\n"
+"* keySignature settings made with \\property\n"
msgstr ""
+"Alteration-feltet for Schemetonehøjder blev ganget med 2\n"
+"for at understøtte kvartaltonefortegn. Du skal opdatere de følgende konstruktioner manuelt:\n"
+"\n"
+"* kald for ly:make-pitch og ly:pitch-alteration\n"
+"* keySignature-indstillinger lavet med \\property\n"
-#: ly2dvi.py:334 main.cc:115
-msgid "write Makefile dependencies for every input file"
-msgstr "skriv Makefile-afhængigheder for hver inddatafil"
+#: convertrules.py:1450
+msgid "removal of automaticMelismata; use melismaBusyProperties instead."
+msgstr "fjernelse af automaticMelismata; brug melismaBusyProperties i stedet."
-# forklaring af flag -h
-#: ly2dvi.py:335 midi2ly.py:98 mup2ly.py:74 update-lily.py:87 main.cc:111
-msgid "this help"
-msgstr "denne hjælp"
+#: convertrules.py:1557
+msgid "\\partcombine syntax change to \\newpartcombine"
+msgstr "\\partcombine syntaksændring til \\newpartcombine"
-#: ly2dvi.py:336 main.cc:113 main.cc:118
-msgid "DIR"
-msgstr "KATALOG"
+#: convertrules.py:1582
+msgid ""
+"Drum notation changes, Removing \\chordmodifiers, \\notenames.\n"
+"Harmonic notes. Thread context removed. Lyrics context removed."
+msgstr ""
+"Ændringer for trommenotation, Fjerner \\chordmodifiers, \\notenames.\n"
+"Harmoniske noder. Trådkontekst fjernet. Sangtekstkontekst fjernet."
-#: ly2dvi.py:336
-msgid "add DIR to LilyPond's search path"
-msgstr "tilføj KATALOG til LilyPonds søgesti"
+#: convertrules.py:1586
+msgid "Drums found. Enclose drum notes in \\drummode"
+msgstr "Trommer fundet. Vedlæg trommenoder i \\drummode"
-# %s er programmets navn
-#: ly2dvi.py:338
-#, c-format
-msgid "keep all output, output to directory %s.dir"
-msgstr "behold al uddata, udskrivo i kataloget %s.dir"
+#: convertrules.py:1597 convertrules.py:1604 convertrules.py:1615
+#, python-format
+msgid ""
+"\n"
+"%s found. Check file manually!\n"
+msgstr ""
+"\n"
+"%s fundet. Kontroller fil manuelt!\n"
-#: ly2dvi.py:339
-msgid "don't run LilyPond"
-msgstr "kør ikke LilyPond"
+#: convertrules.py:1597
+msgid "Drum notation"
+msgstr "Trommenotation"
-#: ly2dvi.py:340 main.cc:116
-msgid "produce MIDI output only"
-msgstr "lav kun MIDI-uddata"
+#: convertrules.py:1656
+msgid "new syntax for property settings:"
+msgstr "ny syntaks for egenskabsindstillinger:"
-#: ly2dvi.py:341 ly2dvi.py:342 midi2ly.py:100 main.cc:114 main.cc:117
-msgid "FILE"
-msgstr "FIL"
+#: convertrules.py:1682
+msgid "Property setting syntax in \\translator{ }"
+msgstr "Egenskabsindstillingssyntaks i \\translator{ }"
-#: ly2dvi.py:341 midi2ly.py:100
-msgid "write ouput to FILE"
-msgstr "skriv uddata til FIL"
+#: convertrules.py:1721
+msgid "Scheme grob function renaming"
+msgstr "Scheme grob-funktionsomdøbning"
-#: ly2dvi.py:342
-msgid "find pfa fonts used in FILE"
-msgstr "find pfa-skrifttyper brugt i FIL"
+#: convertrules.py:1732 convertrules.py:2139 convertrules.py:2143
+#: convertrules.py:2709
+#, python-format
+msgid "Use %s\n"
+msgstr "Brug %s\n"
-#: ly2dvi.py:344
-msgid "set the resolution of the preview to RES"
+#: convertrules.py:1748
+msgid "More Scheme function renaming"
+msgstr "Mere Scheme-funktionsomdøbning"
+
+#: convertrules.py:1872
+msgid ""
+"Page layout has been changed, using paper size and margins.\n"
+"textheight is no longer used.\n"
+msgstr ""
+"Sidelayout er blevet ændret, bruger papirstørrelse og\n"
+"margener. Teksthøjde bruges ikke længere.\n"
+
+#: convertrules.py:1958
+msgid ""
+"\\foo -> \\foomode (for chords, notes, etc.)\n"
+"fold \\new FooContext \\foomode into \\foo."
+msgstr ""
+"\\foo -> \\foomode (for akkorder, noder, etc.)\n"
+"fold \\new FooContext \\foomode into \\foo."
+
+#: convertrules.py:1996
+msgid ""
+"staff size should be changed at top-level\n"
+"with\n"
+"\n"
+" #(set-global-staff-size <STAFF-HEIGHT-IN-POINT>)\n"
+"\n"
msgstr ""
+"nodelinjens størrelse skal ændres på topniveau\n"
+"with\n"
+"\n"
+" #(set-global-staff-size <NODELINJE-HØJDE-I-PUNKTER>)\n"
+"\n"
+
+#: convertrules.py:2016
+msgid "regularize other identifiers"
+msgstr "legaliser andre identifikatorer"
+
+#: convertrules.py:2084
+msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click"
+msgstr "\\encoding: smart recode latin1..utf-8. Fjern ly:point-and-click"
+
+#: convertrules.py:2095
+msgid "LilyPond source must be UTF-8"
+msgstr "LilyPond-kilde skal være UTF-8"
+
+#: convertrules.py:2098
+msgid "Try the texstrings backend"
+msgstr "Prøv texstrings-motoren"
-#: ly2dvi.py:345
-msgid "generate PostScript output"
-msgstr "lav PostScript-uddata"
+#: convertrules.py:2101
+#, python-format
+msgid "Do something like: %s"
+msgstr "Gør noget såsom: %s"
-#: ly2dvi.py:346
-msgid "generate PDF output"
-msgstr "lav PDF-uddata"
+#: convertrules.py:2104
+msgid "Or save as UTF-8 in your editor"
+msgstr "Eller gem som UTF-8 i dit redigeringsprogram"
-#: ly2dvi.py:347
-msgid "use pdflatex to generate a PDF output"
+#: convertrules.py:2154
+msgid "warn about auto beam settings"
+msgstr "advar om automatiske bjælkeindstillinger"
+
+#: convertrules.py:2158
+msgid "auto beam settings"
+msgstr "automatiske bjælkeindstillinger"
+
+#: convertrules.py:2159
+msgid ""
+"\n"
+"Auto beam settings must now specify each interesting moment in a measure\n"
+"explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n"
msgstr ""
+"\n"
+"Automatiske bjælkeindstillinger skal nu angive hver interessant moment i en\n"
+"måling eksplicit; 1/4 er ikke længere ganget for også at dække 1/2 og 3/4.\n"
+
+#: convertrules.py:2272
+msgid "verticalAlignmentChildCallback has been deprecated"
+msgstr "verticalAlignmentChildCallback er blevet forældet"
+
+#: convertrules.py:2277
+msgid "Remove callbacks property, deprecate XY-extent-callback."
+msgstr "Fjern egenskabsegenskab, misbillig XY-extent-callback."
+
+#: convertrules.py:2298
+msgid "Use grob closures iso. XY-offset-callbacks."
+msgstr "Brug grob-luknings-iso. XY-forskydning-tilbagekald."
-#: ly2dvi.py:349
-msgid "make a picture of the first system"
+#: convertrules.py:2360
+msgid "foobar -> foo-bar for \\paper, \\layout"
+msgstr "foobar -> foo-bar for \\paper, \\layout"
+
+#: convertrules.py:2470
+msgid "deprecate \\tempo in \\midi"
+msgstr "misbillig \\tempo i \\midi"
+
+#: convertrules.py:2523
+msgid "deprecate cautionary-style. Use AccidentalCautionary properties"
+msgstr "misbllig cautionary-style. Brug AccidentalCautionary-egenskaber"
+
+#: convertrules.py:2536
+msgid "Rename accidental glyphs, use glyph-name-alist."
+msgstr "Omdøb utilsigtede skrifttegn, brug glyph-name-alist."
+
+#: convertrules.py:2591
+msgid "edge-text settings for TextSpanner"
+msgstr "edge-tekst-indstillinger for TextSpanner"
+
+#: convertrules.py:2592
+#, python-format
+msgid ""
+"Use\n"
+"\n"
+"%s"
msgstr ""
+"Brug\n"
+"\n"
+"%s"
-#: ly2dvi.py:350
-msgid "KEY=VAL"
-msgstr "NØGLE=VÆRDI"
+#: convertrules.py:2625
+msgid "Use the `alignment-offsets' sub-property of\n"
+msgstr "Brug »alignment-offsets« til underegenskab for\n"
-#: ly2dvi.py:350
-msgid "change global setting KEY to VAL"
-msgstr "ændr global indstilling NØGLE til VÆRDI"
+#: convertrules.py:2626
+msgid "NonMusicalPaperColumn #'line-break-system-details\n"
+msgstr "NonMusicalPaperColumn #'line-break-system-details\n"
-# Førklaring til --verbose (borde være længre)
-#: ly2dvi.py:351 midi2ly.py:103 mup2ly.py:77 update-lily.py:91 main.cc:126
-msgid "verbose"
-msgstr "udførlig uddata"
+#: convertrules.py:2627
+msgid "to set fixed distances between staves.\n"
+msgstr "for at sætte fast afstand mellem nodesystemer.\n"
-#: ly2dvi.py:352 midi2ly.py:104 mup2ly.py:78 update-lily.py:92 main.cc:125
-msgid "print version number"
-msgstr "vis versionsnummer"
+#: convertrules.py:2639
+msgid "Use #'style not #'dash-fraction to select solid/dashed lines."
+msgstr "Brug #'style ikke #'dash-fraction for at vælge hele/stiplede linjer."
-#: ly2dvi.py:353 midi2ly.py:105 mup2ly.py:79 update-lily.py:94 main.cc:127
-msgid "show warranty and copyright"
-msgstr "vis garanti og copyright"
+#: convertrules.py:2645
+msgid "all settings related to dashed lines"
+msgstr "alle indstillinger forbundet med hele linjer"
-#: ly2dvi.py:448
-#, c-format
-msgid "no such setting: `%s'"
-msgstr "indstillingen findes ikke: '%s'"
+#: convertrules.py:2646
+msgid "Use \\override ... #'style = #'line for solid lines and\n"
+msgstr "Brug \\override ... #'style = #'line for faste linjer og\n"
-#: ly2dvi.py:508
-#, c-format
-msgid "LilyPond crashed (signal %d)."
-msgstr "LilyPond gik ned (signal %d)."
+#: convertrules.py:2647
+msgid "\t\\override ... #'style = #'dashed-line for dashed lines."
+msgstr "\t\\override ... #'style = #'dashed-line for stiplede linjer."
-#: ly2dvi.py:509
-msgid "Please submit a bug report to bug-lilypond@gnu.org"
+#: convertrules.py:2683
+msgid ""
+"metronomeMarkFormatter uses text markup as second argument,\n"
+"fret diagram properties moved to fret-diagram-details."
msgstr ""
+"metronomeMarkFormatter bruger tekstopmærkning som et andet argument,\n"
+"fret-diagramegenskaber flyttet til fret-diagram-details."
-#: ly2dvi.py:513
-#, c-format
-msgid "LilyPond failed on the input file (exit status %d)."
+#: convertrules.py:2689
+msgid "metronomeMarkFormatter got an additional text argument.\n"
+msgstr "metronomeMarkFormatter fik en ekstra tekstparameter.\n"
+
+#: convertrules.py:2690
+#, python-format
+msgid ""
+"The function assigned to Score.metronomeMarkFunction now uses the signature\n"
+"%s"
msgstr ""
+"Funktionen tildelt til Score.metronomeMarkFunction bruger nu underskriften\n"
+"%s"
-#: ly2dvi.py:522
-#, c-format
-msgid "Analyzing %s..."
-msgstr "Analyserer %s..."
+#: convertrules.py:2708
+#, python-format
+msgid "%s in fret-diagram properties"
+msgstr "%s i fret-diagram-egenskaber"
-#: ly2dvi.py:578
-#, c-format
-msgid "no LilyPond output found for `%s'"
-msgstr "ingen lilyponduddata fundet for '%s'"
+#: convertrules.py:2752
+msgid "\\put-adjacent argument order"
+msgstr "\\put-adjacent-parameterrækkefølge"
-#: ly2dvi.py:618
-#, c-format
-msgid "invalid value: `%s'"
-msgstr "ugyldig værdi: '%s'"
+#: convertrules.py:2753
+msgid "Axis and direction now come before markups:\n"
+msgstr "Akse og retning kommer nu før opmærkninger:\n"
+
+#: convertrules.py:2754
+msgid "\\put-adjacent axis dir markup markup."
+msgstr "\\put-adjacent akse mappe opmærkning opmærkning."
+
+#: convertrules.py:2785
+msgid "re-definition of InnerStaffGroup"
+msgstr "ny definition af InnerStaffGroup"
+
+#: convertrules.py:2790
+msgid "re-definition of InnerChoirStaff"
+msgstr "ny definition af InnerChoirStaff"
+
+#: convertrules.py:2800
+msgid "Syntax changes for \\addChordShape and \\chord-shape"
+msgstr "Syntaksændringer for \\addChordShape og \\chord-shape"
+
+#: convertrules.py:2805
+msgid "stringTuning must be added to addChordShape call.\n"
+msgstr "stringTuning skal tilføjes til addChordShape-kald.\n"
-#: ly2dvi.py:724
-msgid "LaTeX failed on the output file."
+#: convertrules.py:2810
+msgid "stringTuning must be added to chord-shape call.\n"
+msgstr "stringTuning skal tilføjes til chord-shape-kald.\n"
+
+#: convertrules.py:2816
+msgid "Remove oldaddlyrics"
+msgstr "Fjern oldaddlyrics"
+
+#: convertrules.py:2820
+msgid ""
+"oldaddlyrics is no longer supported. \n"
+" Use addlyrics or lyrsicsto instead.\n"
msgstr ""
+"oldaddlyrics er ikke længere understøttet. \n"
+" Brug addlyrics eller lyrsicsto i stedet.\n"
-#: ly2dvi.py:726
-msgid "The error log is as follows:"
+#: convertrules.py:2826
+msgid ""
+"keySignature property not reversed any more\n"
+"MIDI 47: orchestral strings -> orchestral harp"
msgstr ""
+"keySignature-egenskab bliver ikke vendt om længere\n"
+"MIDI 47: orkesterstrenge -> orkesterharpe"
-#: ly2dvi.py:849
-#, c-format
-msgid "not a PostScript file: `%s'"
-msgstr "ikke en PostScript fil: '%s'"
+#: convertrules.py:2831
+msgid "The alist for Staff.keySignature is no longer in reversed order.\n"
+msgstr "Alist for Staff.keySignature er ikke længere i omvendt rækkefølge.\n"
-#: ly2dvi.py:865 midi2ly.py:1012 update-lily.py:458
-#, c-format
-msgid "getopt says: `%s'"
-msgstr "getopt siger: '%s'"
+#: convertrules.py:2837
+msgid ""
+"\\bar \".\" now produces a thick barline\n"
+"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
+"Dash parameters for slurs and ties are now in dash-definition"
+msgstr ""
+"\\bar \".\" laver nu en tyk bjælkelinje\n"
+"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
+"Dash-parametre for legatobuer og bindebuer er nu i dash-definition"
+
+#: convertrules.py:2843
+msgid "\\bar \".\" now produces a thick barline.\n"
+msgstr "\\bar \".\" fremstiller nu en tyk bjælkelinje.\n"
-#: ly2dvi.py:948
-msgid "pseudo filter"
+#: convertrules.py:2849
+msgid "Dash parameters for slurs and ties are now in 'dash-definition.\n"
+msgstr "Dash-parametre for legatobuer og bindebuer er nu i 'dash-definition.\n"
+
+#: convertrules.py:2854
+msgid ""
+"Autobeaming rules have changed. override-auto-beam-setting and\n"
+"revert-auto-beam-setting have been eliminated.\n"
+"\\overrideBeamSettings has been added.\n"
+"beatGrouping has been eliminated.\n"
+"Different settings for vertical layout.\n"
+"ly:system-start-text::print -> system-start-text::print\n"
+"Beam #'thickness -> Beam #'beam-thickness\n"
+"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n"
+"ly:ambitus::print -> ambitus::print\n"
+"Explicit dynamics context definition from `Piano centered dynamics'\n"
+"template replaced by new `Dynamics' context."
msgstr ""
+"Autobeaming-regler har ændret sig. Override-auto-beam-setting og\n"
+"revert-auto-beam-setting er blevet elimineret.\n"
+"\\overrideBeamSettings er blevet tilføjet.\n"
+"beatGrouping er blevet elimineret.\n"
+"Forskellige indstillinger for lodret layout.\n"
+"ly:system-start-text::print -> system-start-text::print\n"
+"Beam #'thickness -> Beam #'beam-thickness\n"
+"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n"
+"ly:ambitus::print -> ambitus::print\n"
+"Eksplicit dynamisk kontekstdefinition fra »Piano centered dynamics«\n"
+"skabelon erstattet af ny »Dynamics«-kontekst."
+
+#: convertrules.py:2868
+msgid " Autobeam settings are now overriden with \\overrideBeamSettings.\n"
+msgstr " Autobeam-indstillinger overskrives nu med \\overrideBeamSettings.\n"
+
+#: convertrules.py:2873
+msgid " Autobeam settings are now reverted with \\revertBeamSettings.\n"
+msgstr " Autobeam-indstillinger ændres nu tilbage med \\revertBeamSettings.\n"
+
+#: convertrules.py:2879
+msgid ""
+" beatGrouping with a specified context must now be accomplished with\n"
+" \\overrideBeamSettings.\n"
+msgstr ""
+" beatGrouping med en specificeret kontekst skal nu gennemføres med\n"
+" \\overrideBeamSettings.\n"
-#: ly2dvi.py:951
-msgid "pseudo filter only for single input file"
+#: convertrules.py:2885
+msgid "alignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.\n"
+msgstr "alignment-offsets er blevet ændret til alignment-distances: Du skal nu specificere afstandene mellem nodesystemer frem for forskydningen for nodesystemer.\n"
+
+#: convertrules.py:2896
+msgid ""
+"Remove obsolete engravers/translators: Note_swallow_translator,\n"
+"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
+"Swallow_performer and String_number_engraver.\n"
+"New vertical spacing variables."
msgstr ""
+"Fjern forældede gravører/oversætteere: Note_swallow_translator,\n"
+"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
+"Swallow_performer og String_number_engraver.\n"
+"Ny lodret afstandsvariabler."
-#: ly2dvi.py:980
-#, c-format
-msgid "filename should not contain spaces: `%s'"
-msgstr "filnavn bør ikke indeholde mellemrum: '%s'"
+#: convertrules.py:2927
+msgid "Vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n"
+msgstr "Lodret mellemrum er ikke længere afhængig af Y-rækkevidden for en VerticalAxisGroup.\n"
-# hær er det spørg om skrivning til en fil
-#: ly2dvi.py:1076 input-file-results.cc:67
-#, c-format
-msgid "dependencies output to `%s'..."
-msgstr "afhængigheder udskrevet til \"%s\"..."
+#: convertrules.py:2933
+msgid "Unify fetaNumber and fetaDynamic encodings"
+msgstr "Unify fetaNumber- og fetaDynamic-kodninger"
-#: ly2dvi.py:1090 ly2dvi.py:1104 includable-lexer.cc:49
-#: input-file-results.cc:187 input-file-results.cc:193 lily-guile.cc:97
-#, c-format
-msgid "can't find file: `%s'"
-msgstr "kan ikke finde fil: \"%s\""
+#: convertrules.py:2938
+msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
+msgstr "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
-# hær er det spørg om skrivning til en fil (første parametern er t.ex
-# DVI, LATEX, MIDI, TEX)
-#: ly2dvi.py:1102 midi2ly.py:996
-#, c-format
-msgid "%s output to `%s'..."
-msgstr "%s udskrevet til \"%s\"..."
+#: convertrules.py:2949
+msgid "\\cresc etc. are now postfix operators"
+msgstr "\\cresc etc. er nu postfix-operatorer"
+
+#: convertrules.py:2961
+msgid ""
+"Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n"
+"\"accordion.accEtcbase\" -> \"accordion.etcbass\""
+msgstr ""
+"Eliminer beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings og \\revertBeamSettings.\n"
+"\"accordion.accEtcbase\" -> \"accordion.etcbass\""
-#: ly2dvi.py:1111
-msgid "no files specified on command line"
-msgstr "ingen filer angivne på kommandolinjen."
+#: convertrules.py:2979
+msgid "Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n"
+msgstr "Brug \\set beamExceptions eller \\overrideTimeSignatureSettings.\n"
-#: midi2ly.py:92
-msgid "Convert MIDI to LilyPond source"
-msgstr "Konvertér MIDI til LilyPond-klide"
+#: convertrules.py:2983
+msgid "Use \\set beamExceptions or \\revertTimeSignatureSettings.\n"
+msgstr "Brug \\set beamExceptions eller \\revertTimeSignatureSettings.\n"
-#: midi2ly.py:95
-msgid "print absolute pitches"
+#: convertrules.py:2987
+msgid "Use baseMoment, beatStructure, and beamExceptions.\n"
+msgstr "Brug baseMoment, beatStructure og beamExceptions.\n"
+
+#: convertrules.py:2991 convertrules.py:2995
+msgid "Use baseMoment and beatStructure.\n"
+msgstr "Brug baseMoment og beatStructure.\n"
+
+#: convertrules.py:3000
+msgid ""
+"Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n"
+"Deprecate negative dash-period for hidden lines: use #'style = #'none instead."
msgstr ""
+"Woodwinddiagrammer: Flyt størrelse, tykkelse og grafik fra parameterliste til egenskaber.\n"
+"Misbillig negative dash-period for skjulte linjer: Brug #'style = #'none i stedet for."
-#: midi2ly.py:96 midi2ly.py:101
-msgid "DUR"
-msgstr "LÆNGDE"
+#: convertrules.py:3005
+msgid "Move size, thickness, and graphic to properties. Argument should be just the key list.\n"
+msgstr "Flyt størrelse, tykkelse og grafik til egenskaber. Argument skal kun være toneartlisten.\n"
-#: midi2ly.py:96
-msgid "quantise note durations on DUR"
+#: convertrules.py:3013
+msgid ""
+"Rename vertical spacing variables.\n"
+"Add fretboard-table argument to savePredefinedFretboard."
msgstr ""
+"Omdøb lodret afstandsvaribler.\n"
+"Tilføj fretboard-table-parameter til savePredefinedFretboard."
-#: midi2ly.py:97
-msgid "print explicit durations"
-msgstr "udskriv eksplicitte længder"
+#: convertrules.py:3031
+msgid "Rename vertical spacing grob properties."
+msgstr "Omdøb lodret afstandsgrobegenskaber."
-#: midi2ly.py:99
-msgid "ALT[:MINOR]"
+#: convertrules.py:3047
+msgid "Remove \\paper variables head-separation and foot-separation."
+msgstr "Fjern \\paper-varibalerne head-separation og foot-separation."
+
+#: convertrules.py:3051
+msgid "Adjust settings for top-system-spacing instead.\n"
+msgstr "Juster indstillinger for top-system-spacing i stedet for.\n"
+
+#: convertrules.py:3055
+msgid "Adjust settings for last-bottom-spacing instead.\n"
+msgstr "Juster indstillinger for last-bottom-spacing i stedet for.\n"
+
+#: convertrules.py:3061
+msgid ""
+"Rename space to basic-distance in various spacing alists.\n"
+"Remove HarmonicParenthesesItem grob."
msgstr ""
+"Omdøb mellemrum til standardafstand i diverse afstands-alists.\n"
+"Fjern HarmonicParenthesesItem-grob."
-#: midi2ly.py:99
-msgid "set key: ALT=+sharps|-flats; MINOR=1"
-msgstr "sæt toneart: TONE=+forhøjelser/-sænkninger; mol=1"
+#: convertrules.py:3068
+msgid "HarmonicParenthesesItem has been eliminated.\n"
+msgstr "HarmonicParenthesesItem er blevet elimineret.\n"
-#: midi2ly.py:101
-msgid "quantise note starts on DUR"
+#: convertrules.py:3069
+msgid "Harmonic parentheses are part of the TabNoteHead grob.\n"
+msgstr "Harmoniske parenteser er en delaf TabNoteHead-grob.\n"
+
+#: convertrules.py:3074
+msgid "Remove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.\n"
+msgstr "Fjern kontekst fra overrideTimeSignatureSettings og revertTimeSignatureSettings.\n"
+
+#: convertrules.py:3081
+msgid ""
+"Change stringTunings from a list of semitones to a list of pitches.\n"
+"Change tenor and baritone ukulele names in string tunings.\n"
+"Generate messages for manual conversion of vertical spacing if required."
msgstr ""
+"Ændr stringTunings fra en liste semitoner til en liste af tonehøjder.\n"
+"Ændr tenor- og baryton-ukulelenavne i strengtuninger.\n"
+"Hvis krævet, så opret beskeder for manual konvertering af lodret afstand."
+
+#: convertrules.py:3124
+msgid "Vertical spacing changes might affect user-defined contexts."
+msgstr "Lodret afstandsændringer kan påvirke brugerdefinerede kontekster."
+
+#: convertrules.py:3130
+msgid "Replace bar-size with bar-extent."
+msgstr "Erstat bar-size med bar-extent."
+
+#: convertrules.py:3142
+msgid "Woodwind diagrams: Changes to the clarinet diagram."
+msgstr "Woodwind-diagrammer: Skifter til klarinetdiagrammet."
+
+#: convertrules.py:3146
+msgid "Clarinet fingering changed to reflect actual anatomy of instrument.\n"
+msgstr "Klarinetfingersætning ændret til at reflektere faktisk instrumentanatomi.\n"
+
+#: convertrules.py:3156
+msgid "Handling of non-automatic footnotes."
+msgstr "HÃ¥ndtering af ikke automaiske fodnoter."
+
+#: convertrules.py:3160
+msgid "If you are using non-automatic footnotes, make sure to set footnote-auto-numbering = ##f in the paper block.\n"
+msgstr "Hvis du bruger ikkeautomatiske fodnoter så vær sikker på, at footnote-auto-numbering = ##f er angivet i papirblokken.\n"
+
+#: convertrules.py:3165
+msgid "Change in internal property for MultiMeasureRest"
+msgstr "Ændring i intern egenskab for MultiMeasureRest"
+
+#: convertrules.py:3169
+msgid "This internal property has been replaced by round-up-to-longer-rest, round-up-exceptions and usable-duration-logs.\n"
+msgstr "Denne interne egenskab er blevet erstattet af round-up-to-longer-rest, round-up-exceptions og usable-duration-logs.\n"
+
+#: convertrules.py:3174
+msgid "Creation of a Flag grob and moving of certain Stem properties to this grob"
+msgstr "Oprettelse af en Flaggrob og flytning af bestemte nodehalsegenskaber (Stem-egenskaber) til denne grob"
+
+#: convertrules.py:3210
+msgid "consistent-broken-slope is now handled through the positions callback.\n"
+msgstr "consistent-broken-slope håndteres nu via positionstilbagekaldene.\n"
+
+#: convertrules.py:3211
+msgid "input/regression/beam-broken-classic.ly shows how broken beams are now handled.\n"
+msgstr "input/regression/beam-broken-classic.ly viser hvordan ødelagte bjælker nu håndteres.\n"
+
+#: convertrules.py:3369
+msgid "beamExceptions controls whole-measure beaming."
+msgstr "beamExceptions kontrollerer bjæker i hele mål."
+
+#: convertrules.py:3606
+msgid "Flag.transparent and Flag.color inherit from Stem"
+msgstr "Flag.transparent og Flag.color arver fra Stem (nodehals)"
+
+#: convertrules.py:3672
+msgid "Staff-padding now controls the distance to the baseline, not the nearest point."
+msgstr "Staff-padding kontrollerer nu afstanden til basislinjen, ikke det nærmeste punkt."
+
+#: fontextract.py:25
+#, python-format
+msgid "Scanning %s"
+msgstr "Skanner %s"
+
+#: fontextract.py:70
+#, python-format
+msgid "Extracted %s"
+msgstr "Udtrak %s"
+
+#: fontextract.py:85
+#, python-format
+msgid "Writing fonts to %s"
+msgstr "Skriver skrifttyper til %s"
+
+#: lilylib.py:101
+#, python-format
+msgid "Setting loglevel to %s"
+msgstr "Sætter logniveau til %s"
+
+#: lilylib.py:104
+#, python-format
+msgid "Unknown or invalid loglevel '%s'"
+msgstr "Ukendt eller ugyldigt logniveau »%s«"
+
+#: lilylib.py:133 warn.cc:211
+#, c-format, python-format
+msgid "error: %s"
+msgstr "fejl: %s"
+
+#: lilylib.py:190
+#, python-format
+msgid "Processing %s.ly"
+msgstr "Behandler %s.ly"
+
+#: lilylib.py:194 lilylib.py:255
+#, python-format
+msgid "Invoking `%s'"
+msgstr "Starter »%s«"
-#: midi2ly.py:102
-msgid "DUR*NUM/DEN"
+#: lilylib.py:196 lilylib.py:257
+#, python-format
+msgid "Running %s..."
+msgstr "Kør %s..."
+
+#: lilylib.py:333
+#, python-format
+msgid "Usage: %s"
+msgstr "Brug: %s"
+
+#: musicexp.py:224 musicexp.py:229
+msgid "Language does not support microtones contained in the piece"
+msgstr "Sprog understøtter ikke mikrotoner indeholdt i stykket"
+
+#: musicexp.py:491
+msgid "Tuplet brackets of curved shape are not correctly implemented"
+msgstr "Irregulære nodeværdiparenteser for kurvede former er ikke korrekt implementeret"
+
+#: musicexp.py:677
+#, python-format
+msgid "unable to set the music %(music)s for the repeat %(repeat)s"
+msgstr "kan ikke angive musikken %(music)s for gentagelsen %(repeat)s"
+
+#: musicexp.py:686
+msgid "encountered repeat without body"
+msgstr "mødte gentagelse uden krop"
+
+#. no self.elements!
+#: musicexp.py:856
+#, python-format
+msgid "Grace note with no following music: %s"
+msgstr "Forslagstone uden nogen følgende musik: %s"
+
+#: musicexp.py:1018
+#, python-format
+msgid "Invalid octave shift size found: %s. Using no shift."
+msgstr "Ugyldigt oktavskiftstørrelse fundet: %s. Bruger intet skift."
+
+#: musicexp.py:1476
+#, python-format
+msgid "Unable to convert alteration %s to a lilypond expression"
+msgstr "Kunne ikke konvertere alterationen %s til et Lilypond-udtryk"
+
+#. TODO: Handle pieces without a time signature!
+#: musicxml.py:361
+msgid "Senza-misura time signatures are not yet supported!"
+msgstr "Tidssignaturer for senza-misura er endnu ikke understøttet!"
+
+#: musicxml.py:379
+msgid "Unable to interpret time signature! Falling back to 4/4."
+msgstr "Kan ikke fortolke tidssignatur! Bruger reserven 4/4."
+
+#: musicxml.py:435
+#, python-format
+msgid "Key alteration octave given for a non-existing alteration nr. %s, available numbers: %s!"
+msgstr "Toneartealterationsoktav angivet for en ikkeeksisterende alteration nr. %s, tilgængelige numre: %s!"
+
+#: musicxml.py:523
+#, python-format
+msgid "Unable to find instrument for ID=%s\n"
+msgstr "Kan ikke finde instrument for ID=%s\n"
+
+#: abc2ly.py:1386 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044
+#, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "%s [TILVALG] ... FIL"
+
+#: abc2ly.py:1387
+#, python-format
+msgid ""
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input.\n"
msgstr ""
+"abc2ly konverterer ABC-musikfiler (se\n"
+"%s) til LilyPond-inddata.\n"
-#: midi2ly.py:102
-msgid "allow tuplet durations DUR*NUM/DEN"
+#: abc2ly.py:1395 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231
+#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:183
+msgid "show version number and exit"
+msgstr "vis versionsnummer og afslut"
+
+#: abc2ly.py:1398 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140
+#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:162
+msgid "show this help and exit"
+msgstr "vis denne hjælpetekst og afslut"
+
+#: abc2ly.py:1401 etf2ly.py:1209 midi2ly.py:1071
+msgid "write output to FILE"
+msgstr "skriv uddata til FIL"
+
+#: abc2ly.py:1404
+msgid "be strict about success"
+msgstr "vær nøje omkring succes"
+
+#: abc2ly.py:1407
+msgid "preserve ABC's notion of beams"
+msgstr "bevar ABC's begreb om bjælker"
+
+#: abc2ly.py:1410
+msgid "suppress progress messages"
+msgstr "undertryk statusbeskeder"
+
+#. Translators, please translate this string as
+#. "Report bugs in English via %s",
+#. or if there is a LilyPond users list or forum in your language
+#. "Report bugs in English via %s or in YOUR_LANG via URI"
+#: abc2ly.py:1413 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258
+#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:317
+#, c-format, python-format
+msgid "Report bugs via %s"
+msgstr "Rapporter fejl på engelsk via %s eller vedrørende den danske oversættelse til <dansk@dansk-gruppen.dk>"
+
+#: convert-ly.py:47
+msgid ""
+"Update LilyPond input to newer version. By default, update from the\n"
+"version taken from the \\version command, to the current LilyPond version."
msgstr ""
+"Opdater LilyPond-inddata til en nyere version. Som standard, opdater fra\n"
+"versionen taget fra kommandoen \\version, til den nuværende LilyPond-version."
-#: midi2ly.py:106
-msgid "treat every text as a lyric"
+#: convert-ly.py:50
+msgid "If FILE is `-', read from standard input."
+msgstr "Hvis FIL er »-«, så læs fra standardind."
+
+#: convert-ly.py:52 lilypond-book.py:82
+msgid "Examples:"
+msgstr "Eksempler:"
+
+#: convert-ly.py:79 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
+#, python-format
+msgid "Copyright (c) %s by"
+msgstr "Copyright © %s af"
+
+#: convert-ly.py:81 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
+msgid "Distributed under terms of the GNU General Public License."
+msgstr "Distribueret under betingelserne i GNU General Public License."
+
+#: convert-ly.py:82 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
+msgid "It comes with NO WARRANTY."
+msgstr "Der er INGEN GARANTI."
+
+#: convert-ly.py:100 convert-ly.py:141
+msgid "VERSION"
+msgstr "VERSION"
+
+#: convert-ly.py:102
+msgid "start from VERSION [default: \\version found in file]"
+msgstr "start fra VERSION [standard: \\version funder i fil]"
+
+#: convert-ly.py:105
+msgid "edit in place"
+msgstr "rediger på plads"
+
+#: convert-ly.py:109 lilypond-book.py:179 musicxml2ly.py:2627
+msgid "Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS (default), DEBUG)"
+msgstr "Vis logbeskeder jævnfør LOGNIVEAU (NONE, ERROR, WARNING, PROGRESS (standard), DEBUG)"
+
+#: convert-ly.py:111 lilypond-book.py:163 lilypond-book.py:181
+#: musicxml2ly.py:2629 main.cc:176
+msgid "LOGLEVEL"
+msgstr "LOGNIVEAU"
+
+#: convert-ly.py:117
+msgid "do not add \\version command if missing"
+msgstr "tilføj ikke kommandoen \\version hvis den mangler"
+
+#: convert-ly.py:123
+#, python-format
+msgid "force updating \\version number to %s"
+msgstr "fremtving opdatering af \\version til %s"
+
+#: convert-ly.py:129
+msgid "only update \\version number if file is modified"
+msgstr "opdater kun \\version hvis filen er ændret"
+
+#: convert-ly.py:135
+#, python-format
+msgid "show rules [default: -f 0, -t %s]"
+msgstr "vis regler [standard: -f 0, -t %s]"
+
+#: convert-ly.py:140
+#, python-format
+msgid "convert to VERSION [default: %s]"
+msgstr "konverter til VERSION [standard: %s]"
+
+#: convert-ly.py:147
+msgid "make a numbered backup [default: filename.ext~]"
+msgstr "lav en nummereret sikkerhedskopi [standard: filnavn.ext~]"
+
+#: convert-ly.py:152 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
+#: main.cc:185
+msgid "show warranty and copyright"
+msgstr "vis garanti og copyright"
+
+#: convert-ly.py:196
+msgid "Applying conversion: "
+msgstr "Anvender konvertering: "
+
+#: convert-ly.py:215
+msgid "Error while converting"
+msgstr "Fejl under konvertering"
+
+#: convert-ly.py:217
+msgid "Stopping at last successful rule"
+msgstr "Stopper på sidste succesfulde regel"
+
+#: convert-ly.py:256
+#, python-format
+msgid "Processing `%s'... "
+msgstr "Behandler »%s« ..."
+
+#: convert-ly.py:368
+#, python-format
+msgid "%s: Unable to open file"
+msgstr "%s: kan ikke åbne fil"
+
+#: convert-ly.py:374
+#, python-format
+msgid "%s: Unable to determine version. Skipping"
+msgstr "%s: Kan ikke bestemme version. Udelader"
+
+#: convert-ly.py:380
+#, python-format
+msgid ""
+"%s: Invalid version string `%s' \n"
+"Valid version strings consist of three numbers, separated by dots, e.g. `2.8.12'"
msgstr ""
+"%s: Ugyldig versionsstreng »%s« \n"
+"Gyldige versionsstrenge består af tre numre, adskilt af punktummer, f.eks. 2.8.12"
+
+#: convert-ly.py:386
+#, python-format
+msgid "There was %d error."
+msgid_plural "There were %d errors."
+msgstr[0] "Der var %d fejl."
+msgstr[1] "Der var %d fejl."
+
+#: etf2ly.py:1197
+#, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "%s [TILVALG] ... ETF-FIL"
+
+#: etf2ly.py:1198
+msgid ""
+"Enigma Transport Format is a format used by Coda Music Technology's\n"
+"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond file.\n"
+msgstr ""
+"Enigma Transport-formatet er et format brugt af Coda Music Technology's\n"
+"Finale-produkt. Etf2ly konverterer et undersæt af ETF til en klar at bruge\n"
+"LilyPond-fil.\n"
+
+#: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659
+#: main.cc:168 main.cc:180
+msgid "FILE"
+msgstr "FIL"
-#: midi2ly.py:1027
-msgid "Example:"
-msgstr "Eksempel:"
+#: lilypond-book.py:80
+msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr "Behandl LilyPond-kodestykker i hybrid HTML-, LaTeX, texinfo- eller DocBook-dokument."
-#: midi2ly.py:1081
-msgid "no files specified on command line."
-msgstr "ingen filer angivne på kommandolinjen."
+#: lilypond-book.py:87
+msgid "BOOK"
+msgstr "BOG"
-#: mup2ly.py:69
-msgid "Convert mup to LilyPond source"
-msgstr "Konvertér mup til LilyPond-kilde"
+#: lilypond-book.py:95
+#, python-format
+msgid "Exiting (%d)..."
+msgstr "Afslutter (%d) ... "
-#: mup2ly.py:72
-msgid "debug"
-msgstr "fejlsøgningsuddata"
+#: lilypond-book.py:127
+msgid "FILTER"
+msgstr "FILTER"
-#: mup2ly.py:73
-msgid "define macro NAME [optional expansion EXP]"
-msgstr "definér makro NAVN [valfri makroudvidelse EXP]"
+#: lilypond-book.py:130
+msgid "pipe snippets through FILTER [default: `convert-ly -n -']"
+msgstr "send kodestykker igennem FILTER (standard: »convert-ly -n -«]"
-#: mup2ly.py:75 main.cc:117
-msgid "write output to FILE"
-msgstr "skriv uddata til FIL"
+#: lilypond-book.py:134
+msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
+msgstr "Brug uddataformatet FORMAT (texi [default], texi-html, latex, html, docbook)"
-#: mup2ly.py:76
-msgid "only pre-process"
-msgstr "kun forbehandling"
+#: lilypond-book.py:135
+msgid "FORMAT"
+msgstr "FORMAT"
-#: mup2ly.py:1073
-#, c-format
-msgid "no such context: %s"
-msgstr "omgivelse findes ikke: %s"
+#: lilypond-book.py:142
+msgid "add DIR to include path"
+msgstr "tilføj MAPPE til inkluderingsstien"
-#: mup2ly.py:1297
-#, c-format
-msgid "Processing `%s'..."
-msgstr "Behandler \"%s\"..."
+#: 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
+msgid "DIR"
+msgstr "MAPPE"
-#: mup2ly.py:1316
-#, c-format
+#: lilypond-book.py:148
+msgid "format Texinfo output so that Info will look for images of music in DIR"
+msgstr "formater Texinfo-uddata så at Info vil kigge efter musikaftryk i MAPPE"
+
+#: lilypond-book.py:155
+msgid "PAD"
+msgstr "TILPAS"
+
+#: lilypond-book.py:157
+msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)"
+msgstr "tilpas venstre side af musikken for at justere musik på trods af et ulige antal bjælkeantal (i mm)"
+
+#: lilypond-book.py:162
+msgid "Print lilypond log messages according to LOGLEVEL"
+msgstr "Vis lilypond-logskeder jævnfør LOGNIVEAU"
+
+#: lilypond-book.py:168
+msgid "write lily-XXX files to DIR, link into --output dir"
+msgstr "skriv lily-XXX-filer til MAPPE, lænk til --output mappe"
+
+#: lilypond-book.py:173
+msgid "Load the additional python PACKAGE (containing e.g. a custom output format)"
+msgstr "Indlæs den yderligere python-PAKKE (indeholdende f.eks. et tilpasset uddataformat)"
+
+#: lilypond-book.py:174
+msgid "PACKAGE"
+msgstr "PAKKE"
+
+#: lilypond-book.py:186
+msgid "write output to DIR"
+msgstr "skriv uddata til MAPPE"
+
+#: lilypond-book.py:191
+msgid "COMMAND"
+msgstr "KOMMANDO"
+
+#: lilypond-book.py:192
+msgid "process ly_files using COMMAND FILE..."
+msgstr "behandl ly_files med brug af KOMMANDOFIL ..."
+
+#: lilypond-book.py:197
+msgid "Redirect the lilypond output"
+msgstr "Videresend lilypond-uddataene"
+
+#: lilypond-book.py:201
+msgid "Compile snippets in safe mode"
+msgstr "Kompiler kodestykker i sikker tilstand"
+
+#: lilypond-book.py:207
+msgid "do not fail if no lilypond output is found"
+msgstr "gå ikke i fejl hvis ingen lilypond-uddata findes"
+
+#: lilypond-book.py:213
+msgid "do not fail if no PNG images are found for EPS files"
+msgstr "gå ikke i fejl hvis ingen PNG-billeder findes for EPS-filer"
+
+#: lilypond-book.py:219
+msgid "write snippet output files with the same base name as their source file"
+msgstr "skriv uddatafiler for kodestykke med det samme basisnavn som deres kildefil"
+
+#: lilypond-book.py:223 midi2ly.py:1090 musicxml2ly.py:2596
+msgid "be verbose"
+msgstr "vær udførlig"
+
+#: lilypond-book.py:239
+msgid ""
+"run executable PROG instead of latex, or in\n"
+"case --pdf option is set instead of pdflatex"
+msgstr ""
+"kør kørbar PROG i stedet for latex, eller i\n"
+"tilfælde af at tilvalget --pdf er angivet i\n"
+"stedet for pdflatex"
+
+#: lilypond-book.py:241 lilypond-book.py:246
+msgid "PROG"
+msgstr "PROG"
+
+#: lilypond-book.py:245
+msgid "run executable PROG instead of texi2pdf"
+msgstr "kør kørbar PROG i stedet for texi2pdf"
+
+#: lilypond-book.py:252
+msgid "create PDF files for use with PDFTeX"
+msgstr "opret PDF-filer for rbug med PDFTeX"
+
+#: lilypond-book.py:463
+msgid "Writing snippets..."
+msgstr "Skriver kodestykker ..."
+
+#: lilypond-book.py:468
+msgid "Processing..."
+msgstr "Behandler..."
+
+#: lilypond-book.py:473
+msgid "All snippets are up to date..."
+msgstr "Alle kodestykker er opdateret ..."
+
+#: lilypond-book.py:475
+msgid "Linking files..."
+msgstr "Lænker filer ..."
+
+#: lilypond-book.py:495
+#, python-format
+msgid "cannot determine format for: %s"
+msgstr "kan ikke bestemme format for: %s"
+
+#: lilypond-book.py:504
+#, python-format
+msgid "%s is up to date."
+msgstr "%s er seneste version."
+
+#: lilypond-book.py:517
+#, python-format
msgid "Writing `%s'..."
-msgstr "Skriver \"%s\"..."
+msgstr "Skriver »%s« ..."
+
+#: lilypond-book.py:580
+msgid "Output would overwrite input file; use --output."
+msgstr "Uddata overskriver inddatafil; brug --output."
+
+#: lilypond-book.py:584
+#, python-format
+msgid "Reading %s..."
+msgstr "Læser %s ..."
+
+#: lilypond-book.py:591
+msgid "Dissecting..."
+msgstr "Dissekerer ..."
+
+#: lilypond-book.py:602
+#, python-format
+msgid "Compiling %s..."
+msgstr "Kompilerer %s ..."
+
+#: lilypond-book.py:610
+#, python-format
+msgid "Processing include: %s"
+msgstr "Behandler inkludering: %s"
+
+#: lilypond-book.py:621
+#, python-format
+msgid "Removing `%s'"
+msgstr "Fjerner »%s«"
+
+#: lilypond-book.py:727
+#, python-format
+msgid "Setting LilyPond's loglevel to %s"
+msgstr "Sætter LilyPonds logniveau til %s"
+
+#: lilypond-book.py:731
+#, python-format
+msgid "Setting LilyPond's loglevel to %s (from environment variable LILYPOND_LOGLEVEL)"
+msgstr "Sætter LilyPonds logniveau til %s (fra miljøvariabel LILYPOND_LOGLEVEL)"
+
+#: lilypond-book.py:734
+msgid "Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
+msgstr "Sætter LilyPonds uddata til --verbose, underforstået af lilypond-book's indstilling"
+
+#: midi2ly.py:90
+msgid "warning: "
+msgstr "advarsel: "
-#: update-lily.py:76
-msgid "Fetch and rebuild from latest source package"
-msgstr "Hent og byg om fra seneste kildekodepakke"
+#: midi2ly.py:93 midi2ly.py:1124
+msgid "error: "
+msgstr "fejl: "
-#: update-lily.py:79
-#, c-format
-msgid "unpack and build in DIR [%s]"
-msgstr "udpak og byg i DIR [%s]"
+#: midi2ly.py:94
+msgid "Exiting... "
+msgstr "Afslutter ... "
-#: update-lily.py:80
-msgid "execute COMMAND, subtitute:"
-msgstr "kør COMMAND, erstat:"
+#: midi2ly.py:835
+msgid "found more than 5 voices on a staff, expect bad output"
+msgstr "fandt mere end 5 stemmer på en node, forvent et ugyldigt resultat"
-#: update-lily.py:81
-msgid "%b: build root"
-msgstr "%b: rod for opbygning"
+# hær er det spørg om skrivning til en fil (første parametern er t.ex
+# DVI, LATEX, MIDI, TEX)
+#: midi2ly.py:1032
+#, python-format
+msgid "%s output to `%s'..."
+msgstr "%s udskrevet til »%s« ..."
-#: update-lily.py:82
-#, c-format
-msgid "%n: package name"
-msgstr "%n: pakkenavn"
+#: midi2ly.py:1045
+#, python-format
+msgid "Convert %s to LilyPond input.\n"
+msgstr "Konverter %s til LilyPond-inddata.\n"
-#: update-lily.py:83
-msgid "%r: release directory"
-msgstr "%r: katalog for programudgivelse"
+#: midi2ly.py:1050
+msgid "print absolute pitches"
+msgstr "udskriv absolutte tonehøjder"
-#: update-lily.py:84
-msgid "%t: tarball"
-msgstr "%t: tarball"
+#: midi2ly.py:1052 midi2ly.py:1080
+msgid "DUR"
+msgstr "LÆNGDE"
-#: update-lily.py:85
-msgid "%v: package version"
-msgstr "%v: pakkeversion"
+# hvad betyder quantise (http://www.soundonsound.com/sos/mar99/articles/Quant.html)
+#: midi2ly.py:1053
+msgid "quantise note durations on DUR"
+msgstr "quantise nodelængder på DUR"
-#: update-lily.py:88
-#, c-format
-msgid "keep all output, and name the directory %s"
-msgstr "behold al uddata, og døb kataloget til %s"
+#: midi2ly.py:1056
+msgid "debug printing"
+msgstr "fejlsøg udskrivning"
-#: update-lily.py:89
-msgid "upon failure notify EMAIL[,EMAIL]"
-msgstr "ved fejl, underret EMAIL[,EMAIL]"
+#: midi2ly.py:1059
+msgid "print explicit durations"
+msgstr "udskriv eksplicitte længder"
-#: update-lily.py:90
-msgid "remove previous build"
-msgstr "fjern foregående bygning"
+#: midi2ly.py:1064
+msgid "prepend FILE to output"
+msgstr "foranstil FIL til uddata"
-#: update-lily.py:93
-#, c-format
-msgid "fetch and build URL [%s]"
-msgstr "hent og byg URL [%s]"
+#: midi2ly.py:1068
+msgid "set key: ALT=+sharps|-flats; MINOR=1"
+msgstr "sæt toneart: TONE=+forhøjelser/-sænkninger; mol=1"
-#: update-lily.py:429
-#, c-format
-msgid "Listing `%s'..."
-msgstr "Lister \"%s\"..."
+#: midi2ly.py:1069
+msgid "ALT[:MINOR]"
+msgstr "ALT[:MINOR]"
-#: update-lily.py:497
-#, c-format
-msgid "latest is: %s"
-msgstr "seneste er: %s"
+#: midi2ly.py:1074
+msgid "preview of first 4 bars"
+msgstr "forhåndsvisning af de første 4 bjælker"
-#: update-lily.py:498
-#, c-format
-msgid "relax, %s is up to date"
-msgstr "slap af, %s er seneste version"
+#: midi2ly.py:1078
+msgid "suppress progress messages and warnings about excess voices"
+msgstr "undertryk statusbeskeder og advarsler om overskydende stemmer"
-#: update-lily.py:507 update-lily.py:520
-#, c-format
-msgid "Fetching `%s'..."
-msgstr "Henter \"%s\"..."
+#: midi2ly.py:1079
+msgid "quantise note starts on DUR"
+msgstr "quantise nodebegyndelser på DUR"
-#: update-lily.py:529
-#, c-format
-msgid "Building `%s'..."
-msgstr "Bygger \"%s\"..."
+#: midi2ly.py:1083
+msgid "use s instead of r for rests"
+msgstr "brug s i stedet for r for pauser"
+
+#: midi2ly.py:1085
+msgid "DUR*NUM/DEN"
+msgstr "DUR*NUM/DEN"
+
+#: midi2ly.py:1088
+msgid "allow tuplet durations DUR*NUM/DEN"
+msgstr "tillad irregulære nodeværdivarigheder DUR*NUM/DEN"
+
+#: midi2ly.py:1098
+msgid "treat every text as a lyric"
+msgstr "opfat al tekst som sangtekster"
+
+#: midi2ly.py:1101
+msgid "Examples"
+msgstr "Eksempler"
+
+#: midi2ly.py:1125
+msgid "no files specified on command line."
+msgstr "ingen filer angivne på kommandolinjen."
+
+#: musicxml2ly.py:228
+#, python-format
+msgid "Encountered file created by %s, containing wrong beaming information. All beaming information in the MusicXML file will be ignored"
+msgstr "Mødte fil oprettet af %s, der indeholder forkert bjælkeinformation. Al bjælkeinformation i MusicXML-filen vil blive ignoreret"
+
+#: musicxml2ly.py:247 musicxml2ly.py:249
+#, python-format
+msgid "Unprocessed PartGroupInfo %s encountered"
+msgstr "Mødte ubehandlet PartGroupInfo %s"
+
+#: musicxml2ly.py:500
+#, python-format
+msgid "Encountered note at %s without type and duration (=%s)"
+msgstr "Mødte node på %s uden type og længde (=%s)"
+
+#: musicxml2ly.py:520
+#, python-format
+msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration"
+msgstr "Mødte rationel længde med denominator %s, kan ikke konvertere til lilypondlængde"
+
+#: musicxml2ly.py:767
+msgid "Unable to extract key signature!"
+msgstr "Kan ikke udtrække toneartsignatur!"
+
+#: musicxml2ly.py:794
+#, python-format
+msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!"
+msgstr "ukendt tilstand %s, forventer »dur« eller »mol« eller en kirketoneart!"
+
+#: musicxml2ly.py:932
+#, python-format
+msgid "Encountered unprocessed marker %s\n"
+msgstr "Mødte ubehandlet markør %s\n"
+
+#: musicxml2ly.py:1026
+#, python-format
+msgid "unknown span event %s"
+msgstr "ukendt brohændelse %s"
+
+#: musicxml2ly.py:1036
+#, python-format
+msgid "unknown span type %s for %s"
+msgstr "ukendt afstandstype %s for %s"
+
+#: musicxml2ly.py:1456
+msgid "Unknown metronome mark, ignoring"
+msgstr "Ukendt metronome-mærke, ignorerer"
+
+#. TODO: Implement the other (more complex) way for tempo marks!
+#: musicxml2ly.py:1461
+msgid "Metronome marks with complex relations (<metronome-note> in MusicXML) are not yet implemented."
+msgstr "Metronom markerer med komplekse relationer (<metronome-note> i MusicXML) er endnu ikke implementeret."
+
+#: musicxml2ly.py:1663
+#, python-format
+msgid "Unable to convert chord type %s to lilypond."
+msgstr "Kunne ikke konvertere akkortype %s til lilypond."
+
+#: musicxml2ly.py:1816
+#, python-format
+msgid "drum %s type unknown, please add to instrument_drumtype_dict"
+msgstr "tromme %s-type ukendt, tilføj til instrument_drumtype_dict"
+
+#: musicxml2ly.py:1820
+msgid "cannot find suitable event"
+msgstr "kan ikke finde egnet hændelse"
+
+#: musicxml2ly.py:1968
+#, python-format
+msgid "Negative skip %s (from position %s to %s)"
+msgstr "Negativ hop %s (fra position %s til %s)"
+
+#: musicxml2ly.py:2109
+#, python-format
+msgid "Negative skip found: from %s to %s, difference is %s"
+msgstr "Negativ hop fundet: fra %s til %s, forskellen er %s"
+
+#: musicxml2ly.py:2190
+#, python-format
+msgid "unexpected %s; expected %s or %s or %s"
+msgstr "uventet %s; forventede %s eller %s eller %s"
+
+#: musicxml2ly.py:2296
+msgid "Encountered closing slur, but no slur is open"
+msgstr "Mødte afsluttende legatobue, men ingen legatobue er åben"
+
+#: musicxml2ly.py:2299
+msgid "Cannot have two simultaneous (closing) slurs"
+msgstr "Kan ikke have to samtidige (lukkende) legatobuer"
+
+#: musicxml2ly.py:2308
+msgid "Cannot have a slur inside another slur"
+msgstr "Kan ikke have en legatobue inden i en anden legatobue"
+
+#: musicxml2ly.py:2311
+msgid "Cannot have two simultaneous slurs"
+msgstr "Kan ikke have to samtidige legatobuer"
+
+#: musicxml2ly.py:2445
+#, python-format
+msgid "cannot simultaneously have more than one mode: %s"
+msgstr "kan ikke samtidig have mere end en tilstand: %s"
+
+#: musicxml2ly.py:2553
+msgid "Converting to LilyPond expressions..."
+msgstr "Konverterer til LilyPond-udtryk ..."
+
+#: musicxml2ly.py:2564
+msgid "musicxml2ly [OPTION]... FILE.xml"
+msgstr "musicxml2ly [TILVALG]... FIL.xml"
+
+#: musicxml2ly.py:2566
+msgid ""
+"Convert MusicXML from FILE.xml to LilyPond input.\n"
+"If the given filename is -, musicxml2ly reads from the command line.\n"
+msgstr ""
+"Konverter MusicXML fra FIL.xml til LilyPond-inddata.\n"
+"Hvis det angivne filnavn er -, læser musicxml2ly fra kommandolinjen.\n"
-#: getopt-long.cc:146
+#: musicxml2ly.py:2576
+msgid ""
+"Copyright (c) 2005--2015 by\n"
+" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
+" Jan Nieuwenhuizen <janneke@gnu.org> and\n"
+" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
+msgstr ""
+"Ophavsret 2005--2015 by\n"
+" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
+" Jan Nieuwenhuizen <janneke@gnu.org> and\n"
+" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
+
+#: musicxml2ly.py:2602
+msgid "use lxml.etree; uses less memory and cpu time"
+msgstr "brug lxml.etree; bruger mindre hukommelse og cpu-tid"
+
+#: musicxml2ly.py:2608
+msgid "input file is a zip-compressed MusicXML file"
+msgstr "inddatafil er en zip-komprimeret MusicXML-fil"
+
+#: musicxml2ly.py:2614
+msgid "convert pitches in relative mode (default)"
+msgstr "konverter tonehøjder i relativ tilstand (standard)"
+
+#: musicxml2ly.py:2619
+msgid "convert pitches in absolute mode"
+msgstr "konverter tonehøjder i absolut tilstand"
+
+#: musicxml2ly.py:2622
+msgid "LANG"
+msgstr "SPROG"
+
+#: musicxml2ly.py:2624
+msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German"
+msgstr "brug SPROG for tonehøjdenavne, f.eks. »deutsch« for nodenavne på tysk"
+
+#: musicxml2ly.py:2638
+msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc."
+msgstr "konverter ikke retninger (^, _ eller -) for artikulationer, dynamikker etc."
+
+#: musicxml2ly.py:2644
+msgid "do not convert exact vertical positions of rests"
+msgstr "konverter ikke præcise lodrette positioner for pauser"
+
+#: musicxml2ly.py:2650
+msgid "do not convert the exact page layout and breaks"
+msgstr "konverter ikke det præcise sidelayout og ombrydninger"
+
+#: musicxml2ly.py:2656
+msgid "do not convert beaming information, use lilypond's automatic beaming instead"
+msgstr "konverter ikke bjælkeinformation, brug lilyponds automatiske bjælker i stedet"
+
+#: musicxml2ly.py:2664
+msgid "set output filename to FILE, stdout if -"
+msgstr "sæt uddatafilnavne til FIL, standardud hvis -"
+
+#: musicxml2ly.py:2670
+msgid "activate midi-block"
+msgstr "aktiver midi-block"
+
+#: musicxml2ly.py:2754
+#, python-format
+msgid "unknown part in part-list: %s"
+msgstr "ukendt del i part-list: %s"
+
+#: musicxml2ly.py:2816
+msgid "Input is compressed, extracting raw MusicXML data from stdin"
+msgstr "Inddata er komprimeret, udtrækker rå MusicXML-data fra standardind"
+
+#: musicxml2ly.py:2829
+#, python-format
+msgid "Input file %s is compressed, extracting raw MusicXML data"
+msgstr "Inddatafilen %s er komprimeret, udtrækker rå MusicXML-data"
+
+#: musicxml2ly.py:2859
+msgid "Reading MusicXML from Standard input ..."
+msgstr "Læser MusicXML fra standardind ..."
+
+#: musicxml2ly.py:2861
+#, python-format
+msgid "Reading MusicXML from %s ..."
+msgstr "Læser MusicXML fra %s ..."
+
+#: musicxml2ly.py:2894
+#, python-format
+msgid "Output to `%s'"
+msgstr "Uddata til »%s« ..."
+
+#: musicxml2ly.py:2964
+#, python-format
+msgid "Unable to find input file %s"
+msgstr "Kan ikke finde inddatafil %s"
+
+#: website_post.py:129
+msgid "English"
+msgstr "Engelsk"
+
+#: website_post.py:132
+msgid "Other languages"
+msgstr "Andre sprog"
+
+#: website_post.py:133
+#, python-format
+msgid "About <a href=\"%s\">automatic language selection</a>."
+msgstr "Om <a href=\"%s\">automatisk sprogvalg</a>."
+
+#: getopt-long.cc:153
#, c-format
msgid "option `%s' requires an argument"
-msgstr "flag \"%s\" kræver et argument"
+msgstr "tilvalg »%s« kræver en parameter"
-#: getopt-long.cc:150
+#: getopt-long.cc:157
#, c-format
-msgid "option `%s' doesn't allow an argument"
-msgstr "flag.gan \"%s\" tillader intet argument"
+msgid "option `%s' does not allow an argument"
+msgstr "tilvalg »%s« tillader ikke en parameter"
-#: getopt-long.cc:154
+#: getopt-long.cc:161
#, c-format
msgid "unrecognized option: `%s'"
-msgstr "ukendt flag: \"%s\""
+msgstr "ukendt tilvalg: »%s«"
-#: getopt-long.cc:161
+#: getopt-long.cc:167
#, c-format
msgid "invalid argument `%s' to option `%s'"
-msgstr "ugyldigt argument \"%s\" til flag \"%s\""
+msgstr "ugyldigt paramter »%s« til tilvalg »%s«"
-#: warn.cc:24
+#: warn.cc:56
#, c-format
-msgid "warning: %s\n"
-msgstr "advarsel: %s\n"
+msgid "Log level set to %d\n"
+msgstr "Logniveau sat til %d\n"
-#: warn.cc:30
+#: warn.cc:89
#, c-format
-msgid "error: %s\n"
-msgstr "fejl: %s\n"
+msgid "unknown log level `%s', using default (INFO)"
+msgstr "ukendt logniveau »%s«, bruger standard (INFO)"
-#: warn.cc:43
+#. Some expected warning was not triggered, so print out a warning.
+#: warn.cc:112
#, c-format
-msgid "programming error: %s (Continuing; cross thumbs)\n"
-msgstr "programfejl: %s (Fortsætter, kryds fingrene)\n"
+msgid "%d expected warning(s) not encountered: "
+msgstr "%d forventede advarsler ikke mødt: "
-#: accidental-engraver.cc:181 new-accidental-engraver.cc:237
+#: warn.cc:183
#, c-format
-msgid "Accidental typesetting list must begin with context-name: %s"
-msgstr ""
+msgid "fatal error: %s"
+msgstr "fatal fejl: %s"
-#: accidental-engraver.cc:206 new-accidental-engraver.cc:262
+#: warn.cc:192
#, c-format
-msgid "unknown accidental typesetting: %s. Ignored"
-msgstr ""
+msgid "suppressed programming error: %s"
+msgstr "undertrykt programmeringsfejl: %s"
-#: accidental-engraver.cc:222 new-accidental-engraver.cc:278
+#: warn.cc:197
#, c-format
-msgid "Symbol is not a parent context: %s. Ignored"
-msgstr ""
+msgid "programming error: %s"
+msgstr "programmeringsfejl: %s"
-#: accidental-engraver.cc:225 new-accidental-engraver.cc:281
-#, c-format
-msgid "Accidental typesetting must be pair or context-name: %s"
-msgstr ""
+#: warn.cc:198
+msgid "continuing, cross fingers"
+msgstr "fortsætter, kryds finger"
-#: afm.cc:60
+#: warn.cc:207
#, c-format
-msgid "can't find character number: %d"
-msgstr "kan ikke finde tegnnummer: %d"
+msgid "suppressed error: %s"
+msgstr "undertrykt fejl: %s"
-#: afm.cc:75
+#: warn.cc:219
#, c-format
-msgid "can't find character called: `%s'"
-msgstr "kan ikke finde tegn som hedder: \"%s\""
+msgid "suppressed warning: %s"
+msgstr "undertrykt advarsel: %s"
-#: afm.cc:125
+#: accidental-engraver.cc:180
#, c-format
-msgid "Error parsing AFM file: `%s'"
-msgstr "Fejl ved tolkning af AFM-fil: \"%s\""
+msgid "accidental typesetting list must begin with context-name: %s"
+msgstr "fortegnsopsætningsliste skal begynde med kontekstnavn: %s"
-#: all-font-metrics.cc:95
+#: accidental-engraver.cc:210
#, c-format
-msgid "checksum mismatch for font file: `%s'"
-msgstr "fejlagtig checksum for skrifttypefil: \"%s\""
+msgid "procedure or context-name expected for accidental rule, found %s"
+msgstr "procedure eller kontekstnavn forventet for fortegnsregel, fandt %s"
-#: all-font-metrics.cc:97
+#: accidental.cc:141
#, c-format
-msgid "does not match: `%s'"
-msgstr "matcher ikke: \"%s\""
+msgid "Could not find glyph-name for alteration %s"
+msgstr "Kunne ikke finde skrifttegnnavn for alteration %s"
-#: all-font-metrics.cc:102
-msgid " Rebuild all .afm files, and remove all .pk and .tfm files. Rerun with -V to show font paths."
-msgstr " Genopbyg alle .afm-filer, og fjern alle .pk- og .tfm-filer. Kør igen med -V for at vise skrifttypesøgestier."
+#: accidental.cc:157
+msgid "natural alteration glyph not found"
+msgstr "naturlig alterationskrifttegn blev ikke fundet"
-#: all-font-metrics.cc:167
+#: all-font-metrics.cc:149
#, c-format
-msgid "can't find font: `%s'"
-msgstr "kan ikke finde skrifttype: \"%s\""
+msgid "cannot find font: `%s'"
+msgstr "kan ikke finde skrifttype: »%s«"
-#: all-font-metrics.cc:168
-msgid "Loading default font"
-msgstr "Indlæser standardskrifttype"
+#: apply-context-iterator.cc:42
+msgid "\\applycontext argument is not a procedure"
+msgstr "\\applycontext-parameter er ikke en procedure"
-#: all-font-metrics.cc:183
-#, c-format
-msgid "can't find default font: `%s'"
-msgstr "kan ikke finde standardskrifttype: \"%s\""
+#: arpeggio.cc:138
+msgid "no heads for arpeggio found?"
+msgstr "ingen hoveder for arpeggio blev fundet?"
-#: all-font-metrics.cc:184 includable-lexer.cc:51 input-file-results.cc:188
+#: auto-change-iterator.cc:74 change-iterator.cc:72
#, c-format
-msgid "(search path: `%s')"
-msgstr "(søgesti: \"%s\")"
+msgid "cannot change, already in translator: %s"
+msgstr "kan ikke ændre, allerede i oversætter: %s"
+
+#: axis-group-engraver.cc:149
+msgid "Axis_group_engraver: vertical group already has a parent"
+msgstr "Axis_group_engraver: vertikal gruppe har allerede en overgruppe"
+
+#: axis-group-engraver.cc:150
+msgid "are there two Axis_group_engravers?"
+msgstr "er der to Axis_group_engravers?"
-#: all-font-metrics.cc:185
-msgid "Giving up"
-msgstr "Giver op"
+#: axis-group-engraver.cc:151
+msgid "removing this vertical group"
+msgstr "fjerner denne vertikale gruppe"
-#: auto-change-iterator.cc:43 change-iterator.cc:60
-#: part-combine-music-iterator.cc:97
-msgid "Can't switch translators, I'm there already"
-msgstr "Kan ikke skifte oversætter, jeg er her allerede"
+#: axis-group-interface.cc:714
+#, c-format
+msgid "\"%s\" is not a valid outside-staff-placement-directive"
+msgstr "»%s« er ikke et gyldigt outside-staff-placement-directive"
+
+#: axis-group-interface.cc:786
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr "et outside-staff-objekt skal have en retning, bruger standarden op"
-#: bar-check-iterator.cc:58
+#: bar-check-iterator.cc:84
#, c-format
msgid "barcheck failed at: %s"
msgstr "taktkontrol mislykkedes ved: %s"
-#: beam-engraver.cc:167
+#: beam-engraver.cc:148
msgid "already have a beam"
-msgstr "har allerede en bjælke"
+msgstr "har allerede en bjælke"
-#: beam-engraver.cc:234
+#: beam-engraver.cc:235
msgid "unterminated beam"
-msgstr "uafsluttet bjælke"
+msgstr "uafsluttet bjælke"
-#: beam-engraver.cc:267 chord-tremolo-engraver.cc:175
+#: beam-engraver.cc:282 chord-tremolo-engraver.cc:149
msgid "stem must have Rhythmic structure"
msgstr "nodehals skal have en rytmisk struktur"
-#: beam-engraver.cc:281
-msgid "stem doesn't fit in beam"
-msgstr "nodehalsen passer ikke i bjælke"
+#: beam-engraver.cc:293
+msgid "stem does not fit in beam"
+msgstr "nodehalsen passer ikke i bjælke"
-#: beam-engraver.cc:282
+#: beam-engraver.cc:294
msgid "beam was started here"
-msgstr "bjælken startede her"
+msgstr "bjælken startede her"
-#: beam.cc:134
-msgid "beam has less than two visible stems"
-msgstr "bjælke har mindre end to synlige nodehalse"
+#. We are completely screwed.
+#: beam-quanting.cc:839
+msgid "no viable initial configuration found: may not find good beam slope"
+msgstr "ingen egnet oprindelig konfiguration blev fundet: finder måske ikke en god bjælkehældning"
-#: beam.cc:139
-msgid "Beam has less than two stems. Removing beam."
-msgstr "Bjælke har mindre end to nodehalse. Fjerner bjælke."
+#: beam.cc:181
+msgid "removing beam with no stems"
+msgstr "fjerner bjælke uden nodehalse"
-#: beam.cc:951
-msgid "Not sure that we can find a nice beam slope (no viable initial configuration found)."
-msgstr "Ikke sikker på at vi kan finde en pæn hældning på bjælken (ingen brugelig initiel konfiguration fundet)."
-
-#: break-align-interface.cc:166
+#: change-iterator.cc:34
#, c-format
-msgid "No spacing entry from %s to `%s'"
-msgstr "Ingen mellemrums-indgang fra %s til `%s'"
+msgid "cannot change `%s' to `%s'"
+msgstr "kan ikke ændre »%s« til »%s«"
-#: change-iterator.cc:22
-#, c-format
-msgid "can't change `%s' to `%s'"
-msgstr "kan ikke ændre \"%s\" til \"%s\""
+#. FIXME: constant error message.
+#: change-iterator.cc:93
+msgid "cannot find context to switch to"
+msgstr "kan ikke finde konteksten at skifte til"
-#.
#. 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_;
+#. errors hard to catch.
#.
-#: change-iterator.cc:79
-msgid "I'm one myself"
-msgstr "Jeg er selv én"
+#. last->translator_id_string () = get_change
+#. ()->change_to_id_string ();
+#: change-iterator.cc:102
+#, c-format
+msgid "not changing to same context type: %s"
+msgstr "ændrer ikke til samme konteksttype: %s"
-#: change-iterator.cc:82
+#. FIXME: uncomprehensable message
+#: change-iterator.cc:106
msgid "none of these in my family"
msgstr "ingen af disse i min familie"
-#: chord-tremolo-engraver.cc:137 percent-repeat-engraver.cc:182
+#: chord-tremolo-engraver.cc:88
+msgid "No tremolo to end"
+msgstr "Ingen tremolo at afslutte"
+
+#: chord-tremolo-engraver.cc:109
msgid "unterminated chord tremolo"
msgstr "ikke-afsluttet akkordtremolo"
-#: chord-tremolo-iterator.cc:50
-msgid "no one to print a tremolos"
-msgstr "der er ingen som kan skrive en tremolo"
+#: clef.cc:65
+#, c-format
+msgid "clef `%s' not found"
+msgstr "nøglen »%s« blev ikke fundet"
-#: chord.cc:313
+#: cluster.cc:120
#, c-format
-msgid "invalid subtraction: not part of chord: %s"
-msgstr "ugyldig subtraktion: ikke del af akkord: %s"
+msgid "unknown cluster style `%s'"
+msgstr "ukendt klyngestil: »%s«"
+
+#: cluster.cc:157
+msgid "junking empty cluster"
+msgstr "forkaster tom klynge"
-# "pitch" hær skal alltså være en ton i et akkord
-#: chord.cc:342
+#: coherent-ligature-engraver.cc:110
#, c-format
-msgid "invalid inversion pitch: not part of chord: %s"
-msgstr "ugyldig tone for inversion: ikke del af en akkord: %s"
+msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
+msgstr "Coherent_ligature_engraver: indstiller »spacing-increment=0.01«: ptr=%ul"
+
+#: constrained-breaking.cc:187 constrained-breaking.cc:206
+msgid "cannot find line breaking that satisfies constraints"
+msgstr "kan ikke finde linjeombrydning som opfylder begrænsninger"
+
+#: context-property.cc:46
+msgid "need symbol arguments for \\override and \\revert"
+msgstr "kræver symbolargumenter for \\override og \\revert"
-#: dimensions.cc:13
-msgid "NaN"
-msgstr "-"
+#: context.cc:143
+#, c-format
+msgid "cannot find or create new `%s'"
+msgstr "kan ikke finde eller oprette ny »%s«"
-#: dynamic-engraver.cc:187 span-dynamic-performer.cc:82
-msgid "can't find start of (de)crescendo"
-msgstr "kan ikke finde starten på crescendo/diminuendo"
+#: context.cc:222
+#, c-format
+msgid "cannot find or create `%s' called `%s'"
+msgstr "kan ikke finde eller oprette »%s« kaldt »%s«"
-#: dynamic-engraver.cc:211
-msgid "already have a crescendo"
-msgstr "har allerede et crescendo"
+#: context.cc:419
+#, c-format
+msgid "cannot find or create: `%s'"
+msgstr "kan ikke finde eller oprette: »%s«"
-#: dynamic-engraver.cc:212
-msgid "already have a decrescendo"
-msgstr "har allerede et diminuendo"
+#: context.cc:433
+#, c-format
+msgid "cannot find or create new Bottom = \"%s\""
+msgstr "kan ikke finde eller oprette ny bund = »%s«"
+
+#: custos.cc:87
+#, c-format
+msgid "custos `%s' not found"
+msgstr "custos »%s« blev ikke fundet"
+
+#: dispatcher.cc:83
+msgid "Event class should be a list"
+msgstr "Hændelsesklasse skal være en liste"
+
+#: dispatcher.cc:166
+#, c-format
+msgid "Junking event: %s"
+msgstr "Stryger hændelsen: %s"
+
+#: dispatcher.cc:271
+msgid "Attempting to remove nonexisting listener."
+msgstr "Forsøger at fjerne ikkeeksisterende lytter."
+
+#: dispatcher.cc:297
+msgid "Already listening to dispatcher, ignoring request"
+msgstr "Lytter allerede til afsender, ignorerer forespørgsel"
+
+#: dots.cc:48
+#, c-format
+msgid "dot `%s' not found"
+msgstr "punktum »%s« blev ikke fundet"
+
+#: dynamic-engraver.cc:168
+#, c-format
+msgid ""
+"unknown crescendo style: %s\n"
+"defaulting to hairpin."
+msgstr ""
+"ukendt crescendostil: %s\n"
+"bruger standarden hairpin."
+
+#: dynamic-engraver.cc:233 slur-proto-engraver.cc:119
+#, c-format
+msgid "unterminated %s"
+msgstr "uafsluttet %s"
+
+#. No explicit dynamic script events have occurred yet, but there is
+#. nevertheless a dynamic spanner. Initialize last_volume_ to a
+#. value within the available range.
+#: dynamic-performer.cc:129
+msgid "(De)crescendo with unspecified starting volume in MIDI."
+msgstr "(Af)crescendo med uspecificeret startlydstyrke i MIDI."
+
+#: episema-engraver.cc:75
+msgid "already have an episema"
+msgstr "har allerede en episema"
+
+#: episema-engraver.cc:88
+msgid "cannot find start of episema"
+msgstr "kan ikke finde start på episema"
+
+#: episema-engraver.cc:137
+msgid "unterminated episema"
+msgstr "uafsluttet episema"
+
+#: extender-engraver.cc:169 extender-engraver.cc:178
+msgid "unterminated extender"
+msgstr "uafsluttet udvider"
+
+#: flag.cc:134
+#, c-format
+msgid "flag `%s' not found"
+msgstr "flaget »%s« blev ikke fundet"
+
+#: flag.cc:154
+#, c-format
+msgid "flag stroke `%s' not found"
+msgstr "flag stroke »%s« blev ikke fundet"
+
+#: font-config-scheme.cc:151 font-config.cc:53
+#, c-format
+msgid "failed adding font directory: %s"
+msgstr "kunne ikke tilføje skriftmappe: %s"
+
+#: font-config-scheme.cc:153 font-config.cc:55
+#, c-format
+msgid "Adding font directory: %s"
+msgstr "Tilføjer skriftmappe: %s"
+
+#: font-config-scheme.cc:167
+#, c-format
+msgid "failed adding font file: %s"
+msgstr "kunne ikke tilføje skriftfil: %s"
+
+#: font-config-scheme.cc:169
+#, c-format
+msgid "Adding font file: %s"
+msgstr "Tilføjer skriftfil: %s"
+
+#: font-config.cc:38
+msgid "Initializing FontConfig..."
+msgstr "Initialiserer FontConfig ..."
+
+#: font-config.cc:58
+msgid "Building font database..."
+msgstr "Bygger skriftdatabase ..."
+
+#: footnote-engraver.cc:87
+msgid "Must be footnote-event."
+msgstr "Skal være footnote-event."
+
+#: general-scheme.cc:403
+#, c-format
+msgid "failed redirecting stderr to `%s'"
+msgstr "kunne ikke videresende standardfejl til »%s«"
+
+#: general-scheme.cc:482 output-ps.scm:48
+msgid "Found infinity or nan in output. Substituting 0.0"
+msgstr "Fandt uendelig eller nan i uddata. Erstatter 0.0"
+
+#: glissando-engraver.cc:158
+msgid "unterminated glissando"
+msgstr "uafsluttet glissando"
+
+#: global-context-scheme.cc:95 global-context-scheme.cc:113
+msgid "no music found in score"
+msgstr "ingen musik fundet i partitur"
+
+#: global-context-scheme.cc:103
+msgid "Interpreting music..."
+msgstr "Tolker musik ..."
+
+#: global-context-scheme.cc:125
+#, c-format
+msgid "elapsed time: %.2f seconds"
+msgstr "tidsforbrug: %.2f sekunder"
+
+#: gregorian-ligature-engraver.cc:70
+#, c-format
+msgid "\\%s ignored"
+msgstr "\\%s ignoreret"
+
+#: gregorian-ligature-engraver.cc:75
+#, c-format
+msgid "implied \\%s added"
+msgstr "underforstået \\%s tilføjet"
+
+#. ligature may not start with 2nd head of pes or flexa
+#: gregorian-ligature-engraver.cc:224
+msgid "cannot apply `\\~' on first head of ligature"
+msgstr "kan ikke anvende »\\~« på første fraseringsbuehoved"
+
+#. (pitch == prev_pitch)
+#: gregorian-ligature-engraver.cc:236
+msgid "cannot apply `\\~' on heads with identical pitch"
+msgstr "kan ikke anvende »\\~« på hoveder med identisk tonehøjde"
+
+#: grob-interface.cc:68
+#, c-format
+msgid "Unknown interface `%s'"
+msgstr "Ukendt grænseflade »%s«"
+
+#: grob-interface.cc:79
+#, c-format
+msgid "Grob `%s' has no interface for property `%s'"
+msgstr "Grob »%s« har ingen grænseflade for egenskab »%s«"
+
+#: grob-property.cc:35
+#, c-format
+msgid "%d: %s"
+msgstr "%d: %s"
+
+#: grob.cc:481
+#, c-format
+msgid "ignored infinite %s-offset"
+msgstr "ignoreret uendelig %s-forskydning"
+
+#: hairpin.cc:60
+msgid "Asking for broken bound padding at a non-broken bound."
+msgstr "Anmoder om ødelagt bundet mellemrum ved en ikkebundet bund."
+
+#: hairpin.cc:257
+msgid "decrescendo too small"
+msgstr "diminuendo for lille"
+
+#: horizontal-bracket-engraver.cc:62
+msgid "do not have that many brackets"
+msgstr "hav ikke så mange parenteser"
+
+#: horizontal-bracket-engraver.cc:71
+msgid "conflicting note group events"
+msgstr "nodegruppehændelser er i konflikt"
+
+#: hyphen-engraver.cc:104
+msgid "removing unterminated hyphen"
+msgstr "fjerner uafsluttet bindestreg"
+
+#: hyphen-engraver.cc:118
+msgid "unterminated hyphen; removing"
+msgstr "uafsluttet bindestreg; fjerner"
+
+#: includable-lexer.cc:71 lily-guile.cc:91 lily-parser-scheme.cc:108
+#, c-format
+msgid "cannot find file: `%s'"
+msgstr "kan ikke finde filen: »%s«"
+
+#: includable-lexer.cc:73 lily-parser-scheme.cc:100
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(søgesti: »%s«)"
+
+#: input.cc:138 source-file.cc:177 source-file.cc:192
+msgid "position unknown"
+msgstr "ukendt position"
+
+#: key-engraver.cc:198
+msgid "Incomplete keyAlterationOrder for key signature"
+msgstr "Ufuldstændig keyAlterationOrder for toneartunderskrift"
+
+#: key-signature-interface.cc:77
+#, c-format
+msgid "No glyph found for alteration: %s"
+msgstr "Intet skrifttegn fundet for alteration: %s"
+
+#: key-signature-interface.cc:87
+msgid "alteration not found"
+msgstr "alteration blev ikke fundet"
+
+#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:109
+msgid "cannot find start of ligature"
+msgstr "kan ikke finde start på fraseringsbue"
+
+#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:136
+msgid "already have a ligature"
+msgstr "har allerede en fraseringsbue"
+
+#: ligature-engraver.cc:114
+msgid "no right bound"
+msgstr "Ingen højrekant"
+
+#: ligature-engraver.cc:145
+msgid "no left bound"
+msgstr "Ingen venstrekant"
+
+#: ligature-engraver.cc:189
+msgid "unterminated ligature"
+msgstr "uafsluttet fraseringsbue"
+
+#: ligature-engraver.cc:216
+msgid "ignoring rest: ligature may not contain rest"
+msgstr "ignorerer pause: fraseringsbue må ikke indeholde en pause"
+
+#: ligature-engraver.cc:217
+msgid "ligature was started here"
+msgstr "fraseringsbuen startede her"
+
+#: lily-guile.cc:93
+#, c-format
+msgid "(load path: `%s')"
+msgstr "(indlæsningssøgesti: »%s«)"
+
+#: lily-guile.cc:412
+#, c-format
+msgid "cannot find property type-check for `%s' (%s)."
+msgstr "kan ikke finde egenskaben type-check for »%s« (%s)."
+
+#: lily-guile.cc:415
+msgid "perhaps a typing error?"
+msgstr "måske en tastefejl?"
+
+#: lily-guile.cc:422
+msgid "skipping assignment"
+msgstr "udelader tildeling"
+
+#: lily-guile.cc:442
+#, c-format
+msgid "type check for `%s' failed; value `%s' must be of type `%s'"
+msgstr "typekontrol for »%s« mislykkedes; værdien »%s« skal være af typen »%s«"
+
+#: lily-lexer.cc:249
+msgid "include files are not allowed in safe mode"
+msgstr "inkluderingsfiler er ikke tilladte i sikker tilstand"
+
+#: lily-lexer.cc:276
+#, c-format
+msgid "identifier name is a keyword: `%s'"
+msgstr "Identificerernavn er et nøgleord: »%s«"
+
+#: lily-lexer.cc:297 lily-lexer.cc:310
+#, c-format
+msgid "%s:EOF"
+msgstr "%s:EOF"
+
+#: lily-parser-scheme.cc:80
+#, c-format
+msgid "Changing working directory to: `%s'"
+msgstr "Ændrer arbejdsmappe til »%s«"
+
+#: lily-parser-scheme.cc:84
+#, c-format
+msgid "unable to change directory to: `%s'"
+msgstr "kan ikke ændre mappe til: »%s«"
+
+#: lily-parser-scheme.cc:99
+#, c-format
+msgid "cannot find init file: `%s'"
+msgstr "kan ikke finde init-fil: »%s«"
+
+#: lily-parser-scheme.cc:117
+#, c-format
+msgid "Processing `%s'"
+msgstr "Behandler »%s«"
+
+#: lily-parser-scheme.cc:209
+msgid "ly:parser-parse-string is only valid with a new parser. Use ly:parser-include-string instead."
+msgstr "ly:parser-parse-string er kun gyldig med en ny fortolker. Brug ly:parser-include-string i stedet."
+
+#: lily-parser-scheme.cc:240
+msgid "ly:parse-string-expression is only valid with a new parser. Use ly:parser-include-string instead."
+msgstr "ly:parse-string-expression er kun gyldig med en ny fortolker. Brug ly:parser-include-string i stedet."
+
+#: lily-parser.cc:107
+msgid "Parsing..."
+msgstr "Tolker ..."
+
+#: lookup.cc:181
+#, c-format
+msgid "Not drawing a box with negative dimension, %.2f by %.2f."
+msgstr "Tegner ikke en boks med negative dimensioner, %.2f x %.2f."
+
+#: lyric-combine-music-iterator.cc:204
+msgid "argument of \\lyricsto should contain Lyrics context"
+msgstr "parameteren \\lyricsto skal indeholde lyrikindhold"
+
+#: lyric-combine-music-iterator.cc:349
+#, c-format
+msgid "cannot find %s `%s'"
+msgstr "kan ikke finde %s »%s«"
+
+#: main.cc:105
+#, c-format
+msgid ""
+"This program is free software. It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions. Invoke as `%s --warranty' for more\n"
+"information.\n"
+msgstr ""
+"Dette er et frit program. Det dækkes af GNU General Public License,\n"
+"og du er velkommen til at ændre og/eller distribuere kopier af det under\n"
+"visse betingelser. Kør »%s --warranty« for yderligere information.\n"
+
+#: main.cc:111
+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"
+"published by the Free Software Foundation, either version 3 of\n"
+"the License, or (at your option) any later version.\n"
+"\n"
+" This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
+"General Public License for more details.\n"
+"\n"
+" You should have received a copy of the\n"
+"GNU General Public License along with this program; if not, write to\n"
+"the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
+"Boston, MA 02111-1307, USA.\n"
+msgstr ""
+"Dette program er et frit program. Du kan distribuere det og/eller\n"
+"ændre det under betingelserne i GNU General Public License, enten\n"
+"version 3 af licensen, eller (efter dit valg) en senere version, \n"
+"udgivet af Free Software Foundation.\n"
+"\n"
+"Dette program distribueres i håb om, at det vil være nyttigt, men\n"
+"UDEN NOGEN SOM HELST GARANTI, endog uden underforstået garanti om\n"
+"SALGBARHED eller EGNETHED FOR ET SPECIFIKT FORMÃ…L. Se GNU General\n"
+"Public License for yderligere information.\n"
+"\n"
+"Du bør have fået en kopi af GNU General Public License sammen med\n"
+"dette program. Hvis ikke, skriv til Free Software Foundation, Inc., 59\n"
+"Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
+
+#: main.cc:149
+msgid "SYM[=VAL]"
+msgstr "SYM[=VAL]"
+
+#: main.cc:150
+msgid ""
+"set Scheme option SYM to VAL (default: #t).\n"
+"Use -dhelp for help."
+msgstr ""
+"sæt Schemetilvalg SYM til VAL (standard: #t).\n"
+"Brug -dhelp for hjælp."
+
+#: main.cc:154
+msgid "EXPR"
+msgstr "UDTR"
+
+#: main.cc:154
+msgid "evaluate scheme code"
+msgstr "evaluer Schemekode"
+
+#. Bug in option parser: --output =foe is taken as an abbreviation
+#. for --output-format.
+#: main.cc:157
+msgid "FORMATs"
+msgstr "FORMATer"
+
+#: main.cc:157
+msgid "dump FORMAT,... Also as separate options:"
+msgstr "dump FORMAT,... også som separate tilvalg:"
+
+#: main.cc:158
+msgid "generate PDF (default)"
+msgstr "opret PDF (standard)"
+
+#: main.cc:159
+msgid "generate PNG"
+msgstr "opret PNG"
+
+#: main.cc:160
+msgid "generate PostScript"
+msgstr "opret PostScript"
+
+#: main.cc:161
+msgid "generate big PDF files"
+msgstr "opret store PDF-filer"
+
+#: main.cc:164
+msgid "FIELD"
+msgstr "FELT"
+
+#: main.cc:164
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
+msgstr ""
+"dump teksthovedfelt FIELD til fil\n"
+"navngivet BASENAME.FIELD"
+
+#: main.cc:167
+msgid "add DIR to search path"
+msgstr "tilføj MAPPE til søgestien"
+
+#: main.cc:168
+msgid "use FILE as init file"
+msgstr "brug FIL som init-fil"
+
+#: main.cc:171
+msgid "USER, GROUP, JAIL, DIR"
+msgstr "USER, GROUP, JAIL, DIR"
+
+#: main.cc:171
+msgid ""
+"chroot to JAIL, become USER:GROUP\n"
+"and cd into DIR"
+msgstr ""
+"chroot til JAIL, bliv USER:GROUP\n"
+"og cd til DIR"
+
+#: main.cc:176
+msgid ""
+"print log messages according to LOGLEVEL. Possible values are:\n"
+"NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
+msgstr ""
+"udskriv logbeskeder jævnfør LOGNIVEAU. Mulige værdier er:\n"
+"NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (standard) og DEBUG."
+
+#: main.cc:180
+msgid "write output to FILE (suffix will be added)"
+msgstr "skriv uddata til FIL (suffiks vil blive tilføjet)"
+
+#: main.cc:181
+msgid "relocate using directory of lilypond program"
+msgstr "flyt via mappen for lilypondprogrammet"
+
+#: main.cc:182
+msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
+msgstr "ingen status, kun fejlbeskeder (svarer til loglevel=ERROR)"
+
+#: main.cc:184
+msgid "be verbose (equivalent to loglevel=DEBUG)"
+msgstr "vær uddybende (svarer til loglevel=DEBUG)"
+
+#. Do not update the copyright years here, run `make grand-replace'
+#: main.cc:263
+#, c-format
+msgid ""
+"Copyright (c) %s by\n"
+"%s and others."
+msgstr ""
+"Ophavsret %s af\n"
+"%s med flere."
+
+#. No version number or newline here. It confuses help2man.
+#: main.cc:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE..."
+msgstr "Brug: %s [TILVALG] ... FIL ..."
+
+#: main.cc:303
+msgid "Typeset music and/or produce MIDI from FILE."
+msgstr "Typesæt musik og/eller afspil MIDI fra FIL."
+
+#: main.cc:305
+msgid "LilyPond produces beautiful music notation."
+msgstr "LilyPond fremstiller smuk musiknotation."
+
+#: main.cc:307
+#, c-format
+msgid "For more information, see %s"
+msgstr "For yderligere information, se %s"
+
+#: main.cc:309
+msgid "Options:"
+msgstr "Tilvalg:"
+
+#: main.cc:376
+#, c-format
+msgid "expected %d arguments with jail, found: %u"
+msgstr "forventede %d parametre med jail, fandt: %u"
+
+#: main.cc:390
+#, c-format
+msgid "no such user: %s"
+msgstr "ingen sådan bruger: %s"
+
+#: main.cc:392
+#, c-format
+msgid "cannot get user id from user name: %s: %s"
+msgstr "kan ikke indhente bruger-id fra brugernavn: %s: %s"
+
+#: main.cc:407
+#, c-format
+msgid "no such group: %s"
+msgstr "ingen sådan gruppe: %s"
+
+#: main.cc:409
+#, c-format
+msgid "cannot get group id from group name: %s: %s"
+msgstr "kan ikke indhente gruppe-id fra gruppenavn: %s: %s"
+
+#: main.cc:417
+#, c-format
+msgid "cannot chroot to: %s: %s"
+msgstr "kan ikke chroot til: %s: %s"
+
+#: main.cc:424
+#, c-format
+msgid "cannot change group id to: %d: %s"
+msgstr "kan ikke ændre gruppe-id til: %d: %s"
+
+#: main.cc:430
+#, c-format
+msgid "cannot change user id to: %d: %s"
+msgstr "kan ikke ændre bruger-id til: %d: %s"
+
+#: main.cc:436
+#, c-format
+msgid "cannot change working directory to: %s: %s"
+msgstr "kan ikke ændre arbejdsmappe til: %s: %s"
+
+#: main.cc:825
+#, c-format
+msgid "exception caught: %s"
+msgstr "undtagelse opstod: %s"
+
+#. FIXME: constant error message.
+#: mark-engraver.cc:156
+msgid "rehearsalMark must have integer value"
+msgstr "rehearsalMark skal have en heltalsværdi"
+
+#: mark-engraver.cc:162
+msgid "mark label must be a markup object"
+msgstr "mærkeetiket skal være et opmærkningsobjekt"
+
+#: mensural-ligature-engraver.cc:100
+msgid "ligature with less than 2 heads -> skipping"
+msgstr "fraseringsbue med mindre end 2 hoveder -> udelader"
+
+#: mensural-ligature-engraver.cc:127
+msgid "cannot determine pitch of ligature primitive -> skipping"
+msgstr "kan ikke bestemme tonehøjde for oprindelig fraseringsbue -> udelader"
+
+#: mensural-ligature-engraver.cc:141
+msgid "single note ligature - skipping"
+msgstr "enkel node fraseringsbude - udelader"
+
+#: mensural-ligature-engraver.cc:152
+msgid "prime interval within ligature -> skipping"
+msgstr "prime interval inden for fraseringsbue -> udelader"
+
+#: mensural-ligature-engraver.cc:163
+msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
+msgstr "mensural fraseringsbue: varighed ingen af Mx, L, B, S -> udelader"
+
+#: mensural-ligature-engraver.cc:206
+msgid "semibrevis must be followed by another one -> skipping"
+msgstr "semibrevis skal følges af endnu en -> udelader"
+
+#: mensural-ligature-engraver.cc:216
+msgid ""
+"semibreves can only appear at the beginning of a ligature,\n"
+"and there may be only zero or two of them"
+msgstr ""
+"semibreve kan kun fremgå i begyndelsen af en fraseringsbue,\n"
+"og der må kun være nul eller to af dem"
+
+#: mensural-ligature-engraver.cc:236
+msgid ""
+"invalid ligatura ending:\n"
+"when the last note is a descending brevis,\n"
+"the penultimate note must be another one,\n"
+"or the ligatura must be LB or SSB"
+msgstr ""
+"ugyldig fraseringsbueslutning:\n"
+"når den sidste node er en faldende brevis,\n"
+"skal den næstsidste node være endnu en,\n"
+"eller fraseringsbuen skal være LB eller SSB"
+
+#: mensural-ligature-engraver.cc:396
+msgid "unexpected case fall-through"
+msgstr "uventet tilfælde fald-igennem"
+
+#: midi-control-function-performer.cc:109 staff-performer.cc:152
+#, c-format
+msgid "ignoring out-of-range value change for MIDI property `%s'"
+msgstr "ignorerer uden for interval-værdiændring for MIDE-egenskab »%s«"
+
+#: midi-item.cc:93
+#, c-format
+msgid "no such MIDI instrument: `%s'"
+msgstr "dette MIDI-instrument findes ikke: »%s«"
+
+#: midi-item.cc:179
+msgid "Time signature with more than 255 beats. Truncating"
+msgstr "Tidssignatur med mere end 255 slag. Afkorter"
+
+#: midi-stream.cc:38
+#, c-format
+msgid "cannot open for write: %s: %s"
+msgstr "kan ikke til skrivning: %s: %s"
+
+#: midi-stream.cc:54
+#, c-format
+msgid "cannot write to file: `%s'"
+msgstr "kan ikke skrive til fil: »%s«"
+
+#: minimal-page-breaking.cc:40 paper-score.cc:116
+msgid "Calculating line breaks..."
+msgstr "Beregner linjeskift ..."
+
+#: minimal-page-breaking.cc:44
+msgid "Calculating page breaks..."
+msgstr "Beregner sideskift ..."
+
+#: multi-measure-rest.cc:152
+msgid "usable-duration-logs must be a non-empty list. Falling back to whole rests."
+msgstr "usable-duration-logs skal være en udfyldt liste. Falder tilbage på hele pauser."
+
+#: music.cc:149
+#, c-format
+msgid "octave check failed; expected \"%s\", found: \"%s\""
+msgstr "oktavkontrol mislykkedes; forventede »%s«, fandt: »%s«"
+
+#: new-fingering-engraver.cc:113
+msgid "cannot add text scripts to individual note heads"
+msgstr "kan ikke tilføje tekstskripter til individuelle nodehoveder"
+
+#: new-fingering-engraver.cc:269
+msgid "no placement found for fingerings"
+msgstr "ingen placering fundet for fingersætninger"
+
+#: new-fingering-engraver.cc:270
+msgid "placing below"
+msgstr "placerer nedenfor"
+
+#: note-collision.cc:510
+msgid "this Voice needs a \\voiceXx or \\shiftXx setting"
+msgstr "denne Voice (stemme) kræver en \\voiceXx- eller \\shiftXx-indstilling"
+
+#: note-column.cc:150
+msgid "cannot have note heads and rests together on a stem"
+msgstr "kan ikke have nodehoveder og pauser sammen på en nodehals"
+
+#: note-head.cc:95
+#, c-format
+msgid "none of note heads `%s' or `%s' found"
+msgstr "ingen af nodehovederne »%s« eller »%s« blev fundet"
+
+#: note-heads-engraver.cc:76
+msgid "NoteEvent without pitch"
+msgstr "NoteEvent uden tonehøjde"
+
+#: open-type-font.cc:46
+#, c-format
+msgid "cannot allocate %lu bytes"
+msgstr "kan ikke allokere %lu byte"
+
+#: open-type-font.cc:50
+#, c-format
+msgid "cannot load font table: %s"
+msgstr "kan ikke indlæse skrifttypetabel: %s"
+
+#: open-type-font.cc:55
+#, c-format
+msgid "FreeType error: %s"
+msgstr "FreeType-fejl: %s"
+
+#: open-type-font.cc:112
+#, c-format
+msgid "unsupported font format: %s"
+msgstr "skrifttypeformatet er ikke understøttet: %s"
+
+#: open-type-font.cc:114
+#, c-format
+msgid "error reading font file %s: %s"
+msgstr "fejl under læsning af skrifttypefilen %s: %s"
+
+#: open-type-font.cc:189
+#, c-format
+msgid "FT_Get_Glyph_Name () Freetype error: %s"
+msgstr "FT_Get_Glyph_Name () Freetype-fejl: %s"
+
+#: open-type-font.cc:337 pango-font.cc:257
+#, c-format
+msgid "FT_Get_Glyph_Name () error: %s"
+msgstr "FT_Get_Glyph_Name ()-fejl: %s"
+
+#. find out the ideal number of pages
+#: optimal-page-breaking.cc:62
+msgid "Finding the ideal number of pages..."
+msgstr "Finder det ideelle antal sider ..."
+
+#: optimal-page-breaking.cc:94
+msgid "could not satisfy systems-per-page and page-count at the same time, ignoring systems-per-page"
+msgstr "kunne ikke opfylde systemer per side og sideantal på samme tid, ignorerer systemer per side"
+
+#: optimal-page-breaking.cc:114
+msgid "Fitting music on 1 page..."
+msgstr "Tilpasser musik på 1 side ..."
+
+#: optimal-page-breaking.cc:116
+#, c-format
+msgid "Fitting music on %d pages..."
+msgstr "Tilpasser musik på %d sider ..."
+
+#: optimal-page-breaking.cc:118
+#, c-format
+msgid "Fitting music on %d or %d pages..."
+msgstr "Tilpasser musik på %d eller %d sider ..."
+
+#: optimal-page-breaking.cc:128 optimal-page-breaking.cc:181
+#, c-format
+msgid "trying %d systems"
+msgstr "prøver med %d systemer"
+
+#: optimal-page-breaking.cc:147 optimal-page-breaking.cc:209
+#, c-format
+msgid "best score for this sys-count: %f"
+msgstr "bedste bedømmelse for denne sys-count: %f"
+
+#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:248
+#: paper-score.cc:156
+msgid "Drawing systems..."
+msgstr "Tegner systemer ..."
+
+#: output-def.cc:230
+msgid "margins do not fit with line-width, setting default values"
+msgstr "margener passer ikke med linjebredde, angiver standardværdier"
+
+#: output-def.cc:237
+msgid "systems run off the page due to improper paper settings, setting default values"
+msgstr "systemer går ud over siden på grund af ukorrekt sideindstillinger, vælger standardværdier"
+
+#: page-breaking.cc:276
+msgid "ignoring min-systems-per-page and max-systems-per-page because systems-per-page was set"
+msgstr "ignorerer minimum antal systemer per side og maksimal antal systemer per side da systemer per side var angivet"
+
+#: page-breaking.cc:281
+msgid "min-systems-per-page is larger than max-systems-per-page, ignoring both values"
+msgstr "minimum systemer per side er større end maksimal antal systemer per side, ignorerer begge værdier"
+
+#: page-breaking.cc:636
+#, c-format
+msgid "page %d has been compressed"
+msgstr "side %d er blevet komprimeret"
+
+#: page-layout-problem.cc:402
+msgid "A page layout problem has been initiated that cannot accommodate footnotes."
+msgstr "Et sidelayoutproblem er opstået som ikke kan tilpasse sidefødder."
+
+#: page-layout-problem.cc:731
+msgid "ragged-bottom was specified, but page must be compressed"
+msgstr "ragged-bottom blev specificeret, men siden må være komprimeret"
+
+#: page-layout-problem.cc:734
+#, c-format
+msgid "compressing over-full page by %.1f staff-spaces"
+msgstr "komprimerer overfuld side med %.1f nodemellemrum"
+
+#: page-layout-problem.cc:1199
+msgid "staff-affinities should only decrease"
+msgstr "staff-affinities bør kun falde"
+
+#: page-turn-page-breaking.cc:168
+#, c-format
+msgid "page-turn-page-breaking: breaking from %d to %d"
+msgstr "page-turn-page-breaking: bryder fra %d til %d"
+
+#: page-turn-page-breaking.cc:217
+msgid "cannot fit the first page turn onto a single page. Consider setting first-page-number to an even number."
+msgstr "kan ikke tilpasse den første sidevending på en enkel side. Overveje at sætte first-page-number til et lige nummer."
+
+#: page-turn-page-breaking.cc:230
+#, c-format
+msgid "Calculating page and line breaks (%d possible page breaks)..."
+msgstr "Beregner side- og linjeombrydninger (%d mulige sideombrydninger) ..."
+
+#: page-turn-page-breaking.cc:300
+#, c-format
+msgid "break starting at page %d"
+msgstr "ombrydning starter på side %d"
+
+#: page-turn-page-breaking.cc:301
+#, c-format
+msgid "\tdemerits: %f"
+msgstr "\tulemper: %f"
+
+#: page-turn-page-breaking.cc:302
+#, c-format
+msgid "\tsystem count: %d"
+msgstr "\tsystemantal %d"
+
+#: page-turn-page-breaking.cc:303
+#, c-format
+msgid "\tpage count: %d"
+msgstr "\tsideantal %d"
+
+#: page-turn-page-breaking.cc:304
+#, c-format
+msgid "\tprevious break: %d"
+msgstr "\tforrige ombrydning: %d"
+
+#: pango-font.cc:246
+#, c-format
+msgid "no glyph for character U+%0X in font `%s'"
+msgstr "intet skrifttegn for tegn U+%0X i skrifttype »%s«"
+
+#: pango-font.cc:273
+#, c-format
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
+msgstr ""
+"Skrifttegn har intet navn, men skrifttypen understøtter skrifttegnnavngivning.\n"
+"Udelager skrifttegn U+%0X, fil %s"
-#: dynamic-engraver.cc:215
-msgid "Cresc started here"
-msgstr "Cresc startede her"
+#: pango-font.cc:323
+#, c-format
+msgid "no PostScript font name for font `%s'"
+msgstr "intet PostScript-skriftnavn for skrifttypen »%s«"
-#: dynamic-engraver.cc:307
-msgid "unterminated (de)crescendo"
-msgstr "uafsluttet crescendo/diminuendo"
+#: pango-font.cc:373
+msgid "FreeType face has no PostScript font name"
+msgstr "FreeType-ansigt har intet PostScript-skrifttypenavn"
-#: extender-engraver.cc:96
-msgid "unterminated extender"
-msgstr "uafsluttet udvider"
+#: paper-book.cc:201
+#, c-format
+msgid "program option -dprint-pages not supported by backend `%s'"
+msgstr "programtilvalg -dprint-pages er ikke understøttet af motoren »%s«"
-#: extender-engraver.cc:108
-msgid "Nothing to connect extender to on the left. Ignoring extender request."
-msgstr "Der er ingenting at forbinde udvideren mod til venstre. Ignorerer ønsket om udvider"
+#: paper-book.cc:220
+#, c-format
+msgid "program option -dpreview not supported by backend `%s'"
+msgstr "programtilvalg -dpreview er ikke understøttet af motoren »%s«"
-#: folded-repeat-iterator.cc:78
-msgid "no one to print a repeat brace"
-msgstr "der er ingen som kan skrive et gentagelsestegn"
+#: paper-column-engraver.cc:263
+msgid "forced break was overridden by some other event, should you be using bar checks?"
+msgstr "tvungen afbrydelse blev overskrevet af anden hændelse, bruger du bjælkekontroller?"
-#: font-interface.cc:238
-msgid "couldn't find any font satisfying "
-msgstr "kunne ikke finde nogen skrifttype som opfylder "
+#: paper-outputter-scheme.cc:41
+#, c-format
+msgid "Layout output to `%s'..."
+msgstr "Layoutuddata til »%s« ..."
-#: gourlay-breaking.cc:188
+#: paper-score.cc:128
#, c-format
-msgid "Optimal demerits: %f"
-msgstr ""
+msgid "Element count %d (spanners %d) "
+msgstr "Elementantal %d (er bro over %d) "
-#: gourlay-breaking.cc:193
-msgid "No feasible line breaking found"
-msgstr "Ingen mulig linjebrydning fandtes"
+#: paper-score.cc:132
+msgid "Preprocessing graphical objects..."
+msgstr "Forbehandler grafiske objekter ..."
-#: hairpin.cc:98
-msgid "decrescendo too small"
-msgstr "diminuendo for lille"
+#: parse-scm.cc:128
+msgid "GUILE signaled an error for the expression beginning here"
+msgstr "GUILE signalerede en fejl for udtrykket, der begynder her"
-#: hairpin.cc:99
-msgid "crescendo too small"
-msgstr "crescendo for lille"
+#: pdf-scheme.cc:65
+#, c-format
+msgid "Conversion of string `%s' to UTF-16be failed: %s"
+msgstr "Konvertering af streng »%s« til UTF-16be mislykkedes: %s"
-#: hyphen-engraver.cc:89
-msgid "unterminated hyphen"
-msgstr "uafsluttet bindestreg"
+#: percent-repeat-engraver.cc:148
+msgid "unterminated percent repeat"
+msgstr "uafsluttet procentgentagelse"
-#: hyphen-engraver.cc:101
-msgid "Nothing to connect hyphen to on the left. Ignoring hyphen request."
-msgstr "Der er ingenting at forbinde bindestregen med til venstre. Ignorerer bindestregsforespørgslen."
+#: performance.cc:55
+msgid "Track..."
+msgstr "Spor ... "
-#: input-file-results.cc:71 source-file.cc:52 streams.cc:38
+#: performance.cc:90
#, c-format
-msgid "can't open file: `%s'"
-msgstr "kan ikke åbne fil: \"%s\""
-
-#: input-file-results.cc:131
-msgid "Score contains errors; will not process it"
-msgstr "Partitur indholder fejl; vil ikke behandle det"
+msgid "MIDI output to `%s'..."
+msgstr "MIDI-uddata til »%s« ..."
-#: input-file-results.cc:168
+#: piano-pedal-engraver.cc:279
#, c-format
-msgid "Now processing: `%s'"
-msgstr "Behandler nu: \"%s\""
+msgid "expect 3 strings for piano pedals, found: %ld"
+msgstr "forvent 3 strenge for pianopedaler, fandt: %ld"
-#: input.cc:98
-msgid "non fatal error: "
-msgstr "ikke-fatal fejl: "
+#: piano-pedal-engraver.cc:294 piano-pedal-engraver.cc:305
+#: piano-pedal-performer.cc:104
+#, c-format
+msgid "cannot find start of piano pedal: `%s'"
+msgstr "kan ikke finde start på pianopedal: »%s«"
-#: input.cc:106 source-file.cc:147 source-file.cc:240
-msgid "position unknown"
-msgstr "ukendt position"
+#: piano-pedal-engraver.cc:340
+#, c-format
+msgid "cannot find start of piano pedal bracket: `%s'"
+msgstr "kan ikke finde start på pianopedalparentes: »%s«"
-#: key-engraver.cc:91
-msgid "Conflicting key signatures found."
-msgstr "Konfliktende tonartssignaturer fundet."
+#: program-option-scheme.cc:223
+#, c-format
+msgid "no such internal option: %s"
+msgstr "ingen sådan intern indstilling: %s"
-#: key-engraver.cc:92
-msgid "This was the other key definition."
-msgstr "Dette var den anden tonartsdefinition."
+#: property-iterator.cc:115
+#, c-format
+msgid "not a grob name, `%s'"
+msgstr "ikke et grobnavn, »%s«"
-#: key-performer.cc:92
-msgid "FIXME: key change merge"
-msgstr "FIX: tonartsskiftsfletning"
+#: relative-octave-check.cc:49
+msgid "Failed octave check, got: "
+msgstr "Mislykket oktavkontrol, fik: "
-#: kpath.cc:64
+#: relocate.cc:52
#, c-format
-msgid "Kpathsea couldn't find TFM file `%s'"
-msgstr "Kpathsea kunne ikke finde TMF-fil: \"%s\""
+msgid "Setting %s to %s"
+msgstr "Sætter %s til %s"
-#: ligature-bracket.cc:105 ligature-bracket.cc:139 ligature-engraver.cc:124
-msgid "no left bound"
-msgstr "Ingen venstrekant"
+#. this warning should only be printed in debug mode!
+#: relocate.cc:73
+#, c-format
+msgid "no such file: %s for %s"
+msgstr "ingen sådan fil: %s for %s"
-#: ligature-engraver.cc:81
-#, fuzzy
-msgid "can't find start of ligature"
-msgstr "kan ikke finde start på legatobue"
+#. this warning should only be printed in debug mode!
+#. this warning should only be printed in debug mode
+#: relocate.cc:84 relocate.cc:102
+#, c-format
+msgid "no such directory: %s for %s"
+msgstr "denne mappe findes ikke: %s for %s"
-#: ligature-engraver.cc:86
-msgid "no right bound"
-msgstr "Ingen højrekant"
+#: relocate.cc:93
+#, c-format
+msgid "%s=%s (prepend)\n"
+msgstr "%s=%s (foranstil)\n"
-#: ligature-engraver.cc:108
-#, fuzzy
-msgid "already have a ligature"
-msgstr "har allerede en bjælke"
+#: relocate.cc:124
+#, c-format
+msgid "not relocating, no %s/ or current/ found under %s"
+msgstr "flytter ikke, ingen %s/ eller current/ fundet under %s"
-#: ligature-engraver.cc:166
-#, fuzzy
-msgid "unterminated ligature"
-msgstr "uafsluttet legatobue"
+#: relocate.cc:134
+#, c-format
+msgid "Relocation: compile datadir=%s, new datadir=%s"
+msgstr "Flytning: kompiler datadir=%s, ny datadir=%s"
-#: ligature-engraver.cc:183
-msgid "ligature may not contain rest; ignoring rest"
-msgstr ""
+#: relocate.cc:146
+#, c-format
+msgid "Relocation: framework_prefix=%s"
+msgstr "Flytning: framework_prefix=%s"
-#: ligature-engraver.cc:184
-#, fuzzy
-msgid "ligature was started here"
-msgstr "bjælken startede her"
+#: relocate.cc:172
+#, c-format
+msgid "Relocation: is absolute: argv0=%s\n"
+msgstr "Flytning: er absolut: argv0=%s\n"
-#: lily-guile.cc:99
+#: relocate.cc:178
#, c-format
-msgid "(load path: `%s')"
-msgstr "(indlæsningssøgesti: \"%s\")"
+msgid "Relocation : from cwd: argv0=%s\n"
+msgstr "Flytning: fra cwd: argv0=%s\n"
-#: lily-guile.cc:582
+#: relocate.cc:194
#, c-format
-msgid "Can't find property type-check for `%s' (%s)."
-msgstr "Kan ikke finde typetjek for egenskab af '%s' (%s)."
+msgid ""
+"Relocation: from PATH=%s\n"
+"argv0=%s\n"
+msgstr ""
+"Flytning: fra PATH=%s\n"
+"argv0=%s\n"
-#: lily-guile.cc:585
-msgid "Perhaps you made a typing error?"
-msgstr "MÃ¥ske lavede du en tastefejl?"
+#: relocate.cc:220
+msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
+msgstr "LILYPONDPREFIX er forældet, brug LILYPOND_DATADIR"
-#: lily-guile.cc:591
-msgid "Doing assignment anyway."
-msgstr "Laver tildeling aligevel."
+#: relocate.cc:345
+#, c-format
+msgid "Relocation file: %s"
+msgstr "Flytningsfil: %s"
-#: lily-guile.cc:605
+#: relocate.cc:349 source-file.cc:65
#, c-format
-msgid "Type check for `%s' failed; value `%s' must be of type `%s'"
-msgstr "Typekontrol for \"%s\" mislykkedes; værdi \"%s\" skal have typen \"%s\""
+msgid "cannot open file: `%s'"
+msgstr "kan ikke åbne fil: »%s«"
-#: lookup.cc:141
-msgid "round filled box horizontal extent smaller than blot; decreasing blot"
-msgstr ""
+#: relocate.cc:379
+#, c-format
+msgid "Unknown relocation command %s"
+msgstr "Ukendt flytningskommando %s"
-#: lookup.cc:146
-msgid "round filled box vertical extent smaller than blot; decreasing blot"
-msgstr ""
+#: rest-collision.cc:153
+msgid "cannot resolve rest collision: rest direction not set"
+msgstr "kan ikke løse pausekollision: pauseretning ikke angivet"
-#: lyric-phrasing-engraver.cc:311
-msgid "lyrics found without any matching notehead"
-msgstr "tekst fundet uden noget tilhørende nodehoved"
+#: rest-collision.cc:164 rest-collision.cc:273
+msgid "too many colliding rests"
+msgstr "for mange kolliderende pauser"
-#: lyric-phrasing-engraver.cc:317
-msgid "Huh? Melismatic note found to have associated lyrics."
-msgstr "Øh? Melismatisk node har tilhørende tekst."
+#: rest.cc:239
+#, c-format
+msgid "rest `%s' not found"
+msgstr "pausen »%s« blev ikke fundet"
-#: main.cc:106
-msgid "EXPR"
-msgstr "UDTR"
+#: score-engraver.cc:79
+#, c-format
+msgid "cannot find `%s'"
+msgstr "kan ikke finde: »%s«"
-#: main.cc:107
-msgid "set options, use -e '(ly-option-usage)' for help"
-msgstr "sæt alternativer, brug -e '(ly-option-usage)' for hjælp"
+#: score-engraver.cc:81
+msgid "Music font has not been installed properly."
+msgstr "Musikskrifttype er ikke blevet korrekt installeret."
-#. another bug in option parser: --output=foe is taken as an abbreviation
-#. for --output-format
-#: main.cc:110
-msgid "EXT"
-msgstr "FMT"
+#: score-engraver.cc:83
+#, c-format
+msgid "Search path `%s'"
+msgstr "Søgesti »%s«"
-#: main.cc:110
-#, fuzzy
-msgid "use output format EXT"
-msgstr "brug uddataformat FMT (scm, ps, tex eller as)"
+#: score-engraver.cc:85
+msgid "Aborting"
+msgstr "Afbryder"
-#: main.cc:112
-msgid "FIELD"
-msgstr "FELT"
+#: score.cc:160
+msgid "already have music in score"
+msgstr "har allerede musik i partitur"
-#: main.cc:112
-msgid "write header field to BASENAME.FIELD"
-msgstr "skriv rubrikfelt til BASENAVN.FELT"
+#: score.cc:161
+msgid "this is the previous music"
+msgstr "dette er den forrige musik"
-#: main.cc:113
-msgid "add DIR to search path"
-msgstr "tilføj KATALOG til søgestien"
+#: score.cc:166
+msgid "errors found, ignoring music expression"
+msgstr "der blev fundet fejl, ignorerer musikudtryk"
-#: main.cc:114
-msgid "use FILE as init file"
-msgstr "brug FIL som init-fil"
+#. FIXME:
+#: script-engraver.cc:115
+msgid "do not know how to interpret articulation:"
+msgstr "ved ikke hvordan artikulation skal fortolkes:"
-#: main.cc:118
-msgid "prepend DIR to dependencies"
-msgstr "tilføj KATALOG efter afhængigheder"
+#: script-engraver.cc:116
+msgid " scheme encoding: "
+msgstr " scheme-kodning: "
-#.
-#. should audit again.
-#.
-#: main.cc:123
-msgid "inhibit file output naming and exporting"
-msgstr "hindr navngivning af filuddata og eksportering"
+#: skyline-pair.cc:135
+msgid "direction must not be CENTER in ly:skyline-pair::skyline"
+msgstr "retning må ikke være CENTER i ly:skyline-pair::skyline"
-#. No version number or newline here. It confuses help2man.
-#: main.cc:155
+#: slur-proto-engraver.cc:51
#, c-format
-msgid "Usage: %s [OPTION]... FILE..."
-msgstr "Brug: %s [FLAG]... FIL..."
+msgid "direction of %s invalid: %d"
+msgstr "retning for %s er ugyldig: %d"
-#: main.cc:157
-msgid "Typeset music and or play MIDI from FILE"
-msgstr "Typesæt musik og/eller afspil MIDI fra FIL"
+#. We already have an old slur, so give a warning
+#. and completely ignore the new slur.
+#: slur-proto-engraver.cc:166
+#, c-format
+msgid "already have %s"
+msgstr "har allerede %s"
-#: main.cc:160
-msgid ""
-"LilyPond is a music typesetter. It produces beautiful sheet music\n"
-"using a high level description file as input. LilyPond is part of \n"
-"the GNU Project.\n"
-msgstr ""
-"LilyPond er en musiktypesætter. Den producerer smukke noder fra en\n"
-"højniveaubeskrivning af musikken i en fil. LilyPond er en del af\n"
-"GNU-projektet.\n"
+#: slur-proto-engraver.cc:183
+#, c-format
+msgid "%s without a cause"
+msgstr "%s uden en årsag"
-#: main.cc:182
+#: slur-proto-engraver.cc:244
#, c-format
-msgid ""
-"This is free software. It is covered by the GNU General Public License,\n"
-"and you are welcome to change it and/or distribute copies of it under\n"
-"certain conditions. Invoke as `%s --warranty' for more information.\n"
-msgstr ""
-"Dette er frit programmel. Det dækkes af \"GNU General Public License\",\n"
-"og du må ændre og/eller distribuere kopier af det under visse\n"
-"betingelser. Kør \"%s --warranty\" for mere information.\n"
+msgid "cannot end %s"
+msgstr "kan ikke afslutte %s"
-#: main.cc:188 main.cc:200
+#: slur.cc:434
#, c-format
-msgid "Copyright (c) %s by"
-msgstr "Copyright © %s af"
+msgid "Ignoring grob for slur: %s. avoid-slur not set?"
+msgstr "Ignorerer grob for legatobue: %s. Er avoid-slur ikke angivet?"
-#: main.cc:198
-msgid "GNU LilyPond -- The music typesetter"
-msgstr "GNU Lilypond -- Musiktypesætteren"
+#: source-file.cc:85
+#, c-format
+msgid "expected to read %d characters, got %d"
+msgstr "forventede at læse %d tegn, fik %d"
-#: main.cc:206
-msgid ""
-" This program is free software; you can redistribute it and/or\n"
-"modify it under the terms of the GNU General Public License version 2\n"
-"as published by the Free Software Foundation.\n"
-"\n"
-" This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
-"General Public License for more details.\n"
-"\n"
-" You should have received a copy (refer to the file COPYING) of the\n"
-"GNU General Public License along with this program; if not, write to\n"
-"the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,\n"
-"USA.\n"
-msgstr ""
-"Dette program er frit programmel. Du kan distribuere det og/eller\n"
-"ændre det under betingelserne i GNU General Public License version 2,\n"
-"udgivet af Free Software Foundation.\n"
-"\n"
-"Dette program distribueres i håb om at det vil være nyttigt, men\n"
-"UDEN NOGEN SOM HELST GARANTI, endog uden underforstået garanti om\n"
-"SALGBARHED eller EGNETHED FOR NOGET SPECIELT FORMÃ…L. Se GNU General\n"
-"Public License for yderligere information.\n"
-"\n"
-"Du bør have fået en kopi af GNU General Public License sammen med\n"
-"dette program. Hvis ikke, skriv til Free Software Foundation, Inc., 59\n"
-"Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
+#: staff-performer.cc:301
+msgid "MIDI channel wrapped around"
+msgstr "MIDI-kanal sluttet omkring"
-#: mensural-ligature-engraver.cc:321 mensural-ligature-engraver.cc:483
-msgid "unexpected case fall-through"
-msgstr ""
+#: staff-performer.cc:302
+msgid "remapping modulo 16"
+msgstr "ændrer kortlægning af modulo 16"
-#: mensural-ligature-engraver.cc:332
-msgid "ligature with less than 2 heads -> skipping"
-msgstr ""
+#: stem-engraver.cc:100
+msgid "tremolo duration is too long"
+msgstr "tremololængde er for lang"
-#: mensural-ligature-engraver.cc:347
-msgid "can not determine pitch of ligature primitive -> skipping"
-msgstr ""
+#: stem-engraver.cc:152
+#, c-format
+msgid "adding note head to incompatible stem (type = %d/%d)"
+msgstr "tilføjer nodehoved til inkompatibel nodehals (type = %d/%d)"
-#: mensural-ligature-engraver.cc:370
-msgid "prime interval within ligature -> skipping"
-msgstr ""
+#: stem-engraver.cc:155
+msgid "maybe input should specify polyphonic voices"
+msgstr "måske skal inddata specificere polyfoniske stemmer"
-#: mensural-ligature-engraver.cc:380
-msgid "mensural ligature: duration none of L, B, S -> skipping"
-msgstr ""
+#: stem.cc:128
+msgid "weird stem size, check for narrow beams"
+msgstr "mærkelig nodehalsstørrelse; kontroller for smalle bjælker"
-#: mensural-ligature.cc:152
+#: system.cc:201
#, c-format
-msgid "Mensural_ligature: thickness undefined on flexa %d; assuming 1.4"
-msgstr ""
+msgid "Element count %d"
+msgstr "Elementantal %d"
-#: mensural-ligature.cc:166
+#: system.cc:512
#, c-format
-msgid "Mensural_ligature: delta-pitch undefined on flexa %d; assuming 0"
-msgstr ""
+msgid "Grob count %d"
+msgstr "Grobantal %d"
-#: mensural-ligature.cc:177
+#. TODO: Also print the arguments of the markup!
+#: text-interface.cc:138
#, c-format
-msgid "Mensural_ligature: flexa-width undefined on flexa %d; assuming 2.0"
-msgstr ""
+msgid "Markup depth exceeds maximal value of %d; Markup: %s"
+msgstr "Opmærkningsdybde er større end maksimalværdi for %d; Opmærkning: %s"
-#: mensural-ligature.cc:208
-msgid "Mensural_ligature: unexpected case fall-through"
-msgstr ""
+#: text-spanner-engraver.cc:72
+msgid "cannot find start of text spanner"
+msgstr "kan ikke finde start på tekstbro"
-#: mensural-ligature.cc:217
-msgid "Menusral_ligature: (join_left == 0)"
-msgstr ""
+#: text-spanner-engraver.cc:85
+msgid "already have a text spanner"
+msgstr "har allerede en tekstbro"
-#: midi-item.cc:144
-#, c-format
-msgid "no such instrument: `%s'"
-msgstr "instrumentet findes ikke: \"%s\""
+#: text-spanner-engraver.cc:130
+msgid "unterminated text spanner"
+msgstr "uafsluttet tekstbro"
-#: midi-item.cc:234
-msgid "silly duration"
-msgstr "tåbelig længde"
+#: tie-engraver.cc:121
+msgid "unterminated tie"
+msgstr "uafsluttet bindebue"
+
+#: tie-engraver.cc:373
+msgid "lonely tie"
+msgstr "ensom bindebue"
-#: midi-item.cc:247
-msgid "silly pitch"
-msgstr "tåbelig tone"
+#.
+#. Todo: should make typecheck?
+#.
+#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#: time-signature-engraver.cc:95
+#, c-format
+msgid "strange time signature found: %d/%d"
+msgstr "mærkelig tidssignatur fundet: %d/%d"
-#: music-output-def.cc:113
+#: translator-ctors.cc:65
#, c-format
-msgid "can't find `%s' context"
-msgstr "kan ikke finde omgivelsen \"%s\""
+msgid "unknown translator: `%s'"
+msgstr "ukendt oversætter: »%s«"
-#: music.cc:159
+#: translator-group-ctors.cc:40
#, c-format
-msgid "Transposition by %s makes accidental larger than two"
-msgstr "Transponering med %s medfører løst fortegn større end to"
+msgid "fatal error. Couldn't find type: %s"
+msgstr "fatal fejl. Kunne ikke finde type: %s"
-#: my-lily-lexer.cc:142
+#: translator-group.cc:188
#, c-format
-msgid "Identifier name is a keyword: `%s'"
-msgstr "Identificerernavn er et nøgleord: \"%s\""
+msgid "cannot find: `%s'"
+msgstr "kan ikke finde: »%s«"
-#: my-lily-lexer.cc:162
+#: translator.cc:320
#, c-format
-msgid "error at EOF: %s"
-msgstr "fejl ved filslutning: %s"
+msgid "Two simultaneous %s events, junking this one"
+msgstr "To samtidige %s hændelser, forkaster denne"
-#: my-lily-parser.cc:44
-msgid "Parsing..."
-msgstr "Tolker..."
+#: translator.cc:321
+#, c-format
+msgid "Previous %s event here"
+msgstr "Forrige %s hændelse her"
-#: my-lily-parser.cc:54
-msgid "Braces don't match"
-msgstr "Klammer passer ikke"
+#: ttf.cc:480 ttf.cc:528
+#, c-format
+msgid "font index %d too large for font `%s', using index 0"
+msgstr "skriftindeks %d er for stor for skrifttypen »%s«, bruger indeks 0"
-#: note-collision.cc:340
-msgid "Too many clashing notecolumns. Ignoring them."
-msgstr "For mange overlappende nodekolonner. Ignorerer dem."
+#: ttf.cc:512 ttf.cc:562
+msgid "font index must be non-negative, using index 0"
+msgstr "skriftindeks skal være ikke-negativ, bruger indeks 0"
-#: note-head.cc:134
-msgid "Symbol not found, "
-msgstr "Symbol ikke fundet, "
+#: tuplet-engraver.cc:110
+msgid "No tuplet to end"
+msgstr "Ingen irregulær nodeværdi at afslutte"
-#: output-property-music-iterator.cc:20 request-chord-iterator.cc:76
+#: vaticana-ligature-engraver.cc:400
#, c-format
-msgid "Junking request: `%s'"
-msgstr "Stryger forespørgslen: \"%s\""
+msgid "ignored prefix(es) `%s' of this head according to restrictions of the selected ligature style"
+msgstr "ignorerede præfiks »%s« for dette hoved jævnfør begrænsningerne for den valgte fraseringsbuestil"
-#: paper-def.cc:122
-#, c-format
-msgid "paper output to `%s'..."
-msgstr "papirsuddata til \"%s\"..."
+#: vaticana-ligature-engraver.cc:466
+msgid "Ambiguous use of dots in ligature: there are multiple dotted notes with the same pitch. The ligature should be split."
+msgstr "Tvetydig brug af prikker i fraseringsbue: Der er flere punkterede noder med samme tonehøjde. Fraseringsbuen bør opdeles."
-#: paper-outputter.cc:57
-msgid ", at "
-msgstr ", ved "
+#: vaticana-ligature-engraver.cc:524
+msgid "This ligature has a dotted head followed by a non-dotted head. The ligature should be split after the last dotted head before this head."
+msgstr "Denne fraseringsbue har et punkteret hoved efterfulgt af et hoved uden punktering. Fraseringsbuen bør opdeles efter det sidste punkterede hoved før dette hoved."
-#: paper-score.cc:77
+#: vaticana-ligature-engraver.cc:736
#, c-format
-msgid "Element count %d (spanners %d) "
-msgstr ""
+msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
+msgstr "Vaticana_ligature_engraver: sætter »spacing-increment = %f«: ptr =%ul"
-#: paper-score.cc:82
-msgid "Preprocessing elements..."
-msgstr "Forbehandler element..."
+#: vaticana-ligature.cc:94
+msgid "flexa-height undefined; assuming 0"
+msgstr "flexa-height er ikke defineret; bruger 0"
-#: paper-score.cc:115
-msgid "Outputting Score, defined at: "
-msgstr "Udskriver partitur, defineret ved: "
+#: vaticana-ligature.cc:99
+msgid "ascending vaticana style flexa"
+msgstr "stigende vaticanastil flexa"
-#: parse-scm.cc:80
-msgid "GUILE signaled an error for the expression begining here"
-msgstr "GUILE signalerede en fejl for udtrykket, der begynder her"
+#: vertical-align-engraver.cc:95
+msgid "Ignoring Vertical_align_engraver in VerticalAxisGroup"
+msgstr "Ignorerer Vertical_align_engraver i VerticalAxisGroup"
-#.
-#. 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_;
-#.
-#: part-combine-music-iterator.cc:116
-#, c-format
-msgid "I'm one myself: `%s'"
-msgstr "Jeg er selv én: \"%s\""
+#. fixme: be more verbose.
+#: volta-engraver.cc:110
+msgid "cannot end volta spanner"
+msgstr "kan ikke afslutte volta-bro"
-#: part-combine-music-iterator.cc:119
-#, c-format
-msgid "none of these in my family: `%s'"
-msgstr "ingen af disse i min familie: \"%s\""
+#: volta-engraver.cc:120
+msgid "already have a volta spanner, ending that one prematurely"
+msgstr "har allerede en volta-bro, stopper denne for tidligt"
-#: percent-repeat-engraver.cc:116
-msgid "Don't know how to handle a percent repeat of this length."
-msgstr "Véd ikke hvordan en procenttegnsgentagelse (percent) af denne længde skal håndteres."
+#: volta-engraver.cc:124
+msgid "also already have an ended spanner"
+msgstr "har også allerede en afsluttet bro"
-#: percent-repeat-iterator.cc:53
-msgid "no one to print a percent"
-msgstr "der er ingen som kan skrive et procent-tegn"
+#: volta-engraver.cc:125
+msgid "giving up"
+msgstr "giver op"
-#: performance.cc:51
-msgid "Track ... "
-msgstr "Spor... "
+#: parser.yy:463 parser.yy:847 parser.yy:928 parser.yy:1150
+msgid "bad expression type"
+msgstr "ugyldigt udtrykstype"
-#: performance.cc:83
-msgid "Creator: "
-msgstr "Skaber: "
+#: parser.yy:759 parser.yy:1361 parser.yy:1406
+msgid "not a context mod"
+msgstr "ikke en kontekst-mod"
-#: performance.cc:103
-msgid "at "
-msgstr "ved "
+#: parser.yy:954
+msgid "Missing music in \\score"
+msgstr "Mangler musik i \\score"
-#: performance.cc:114
-#, c-format
-msgid "from musical definition: %s"
-msgstr "fra musikdefinition: %s"
+#: parser.yy:991
+msgid "\\paper cannot be used in \\score, use \\layout instead"
+msgstr "\\paper kan ikke bruges i \\score, brug \\layout i stedet for"
-#: performance.cc:169
-#, c-format
-msgid "MIDI output to `%s'..."
-msgstr "MIDI-uddata til \"%s\"..."
+#: parser.yy:1027
+msgid "Spurious expression in \\score"
+msgstr "Falsk udtryk i \\score"
-#: phrasing-slur-engraver.cc:117
-msgid "unterminated phrasing slur"
-msgstr "uafsluttet fraseringsbue"
+#: parser.yy:1057
+msgid "need \\paper for paper block"
+msgstr "kræver \\paper for papirblok"
-#: phrasing-slur-engraver.cc:132
-msgid "can't find start of phrasing slur"
-msgstr "kan ikke finde start på fraseringsbue"
+#: parser.yy:1234
+msgid "music expected"
+msgstr "forventede musik"
-#: piano-pedal-engraver.cc:230 piano-pedal-engraver.cc:245
-#: piano-pedal-engraver.cc:300 piano-pedal-performer.cc:82
-#, c-format
-msgid "can't find start of piano pedal: `%s'"
-msgstr "kan ikke finde start på pianopedal: \"%s\""
+#: parser.yy:1244 parser.yy:1278
+msgid "unexpected post-event"
+msgstr "uventet post-hændelse"
-#: piano-pedal-engraver.cc:405
-msgid "unterminated pedal bracket"
-msgstr ""
+#: parser.yy:1286
+msgid "Ignoring non-music expression"
+msgstr "Ignorerer ikke-musik udtryk"
-#: pitch.cc:25
-msgid "Pitch arguments out of range"
-msgstr "Toneargument udenfor intervallet"
+#: parser.yy:1587
+msgid "not a symbol"
+msgstr "ikke et symbol"
-#: porrectus.cc:35
-msgid "(left_head == 0)"
-msgstr ""
+#: parser.yy:2337 parser.yy:2451 parser.yy:2464 parser.yy:2473
+msgid "bad grob property path"
+msgstr "ugyldig grob-egenskabssti"
-#: porrectus.cc:46
-msgid "undefined left_head"
-msgstr ""
+#: parser.yy:2431
+msgid "only \\consists and \\remove take non-string argument."
+msgstr "kun \\consists og \\remove bruger ikke-streng argument."
-#: porrectus.cc:65
-msgid "(right_head == 0)"
-msgstr ""
+#: parser.yy:2492
+msgid "bad context property path"
+msgstr "ugyldig kontekst-egenskabssti"
-#: porrectus.cc:76
-msgid "undefined right_head"
-msgstr ""
+#: parser.yy:2593
+msgid "simple string expected"
+msgstr "forventede simpel streng"
-#: porrectus.cc:96
-msgid "junking lonely porrectus"
-msgstr ""
+#: parser.yy:2611
+msgid "symbol expected"
+msgstr "forventede symbol"
-#: porrectus.cc:106
-msgid "porrectus style undefined; using mensural"
-msgstr ""
+#: parser.yy:2747
+msgid "not a rhythmic event"
+msgstr "ikke en rytmisk hændelse"
-#: porrectus.cc:251
-msgid "ascending vaticana style porrectus"
-msgstr ""
+#: parser.yy:2797
+msgid "post-event expected"
+msgstr "forventede post-hændelse"
-#: property-iterator.cc:64
-#, c-format
-msgid "Not a grob name, `%s'."
-msgstr ""
+#: parser.yy:2806 parser.yy:2811
+msgid "have to be in Lyric mode for lyrics"
+msgstr "skal være i teksttilstand (Lyric mode) for tekst"
-#: rest-collision.cc:186
-msgid "too many colliding rests"
-msgstr "for mange kolliderende pauser"
+#: parser.yy:2887
+msgid "expecting string or post-event as script definition"
+msgstr "forventer streng eller post-hændelse som skriptdefinition"
-#: scm-option.cc:44
-msgid "lilypond -e EXPR means:"
-msgstr ""
+#: parser.yy:2991
+msgid "not an articulation"
+msgstr "ikke en artikulation"
-#: scm-option.cc:46
-msgid " Evalute the Scheme EXPR before parsing any .ly files."
-msgstr ""
+#: parser.yy:3063 parser.yy:3106
+msgid "not a duration"
+msgstr "ikke en længde"
-#: scm-option.cc:48
-msgid " Multiple -e options may be given, they will be evaluated sequentially."
-msgstr ""
+#: parser.yy:3127
+msgid "bass number expected"
+msgstr "forventede bass-nummer"
-#: scm-option.cc:50
-msgid " The function ly-set-option allows for access to some internal variables."
-msgstr ""
+#: parser.yy:3219
+msgid "have to be in Note mode for notes"
+msgstr "skal være i nodetilstand (Note mode) for noder"
-#: scm-option.cc:52
-msgid "Usage: lilypond -e \"(ly-set-option SYMBOL VAL)\""
-msgstr ""
+#: parser.yy:3258
+msgid "have to be in Chord mode for chords"
+msgstr "skal være i akkordtilstand (Chord mode) for akkord"
-#: scm-option.cc:54
-msgid "Where SYMBOL VAL pair is any of:"
-msgstr ""
+#: parser.yy:3301
+msgid "markup outside of text script or \\lyricmode"
+msgstr "opmærkning uden for tekstskript eller \\lyricmode"
-#: scm-option.cc:122
-msgid "Unknown internal option!"
-msgstr ""
+#: parser.yy:3306
+msgid "unrecognized string, not in text script or \\lyricmode"
+msgstr "streng blev ikke genkendt, ikke i tekstskript eller \\lyricmode"
-#: score-engraver.cc:102
-#, c-format
-msgid "can't find `%s'"
-msgstr "kan ikke finde: '%s'"
+#: parser.yy:3458 parser.yy:3467
+msgid "not an unsigned integer"
+msgstr "ikke et ej underskrevet heltal"
-#: score-engraver.cc:103
-msgid "Fonts have not been installed properly. Aborting"
-msgstr ""
+#: parser.yy:3541
+msgid "not a markup"
+msgstr "ikke en opmærkning"
-#: score-engraver.cc:207
-#, c-format
-msgid "unbound spanner `%s'"
-msgstr "ubunden bro \"%s\""
+#: lexer.ll:192
+msgid "stray UTF-8 BOM encountered"
+msgstr "mødte malplaceret UTF-8 BOM"
-#: score.cc:92
+#: lexer.ll:195
+msgid "Skipping UTF-8 BOM"
+msgstr "Udelader UTF-8 BOM"
+
+#: lexer.ll:247
#, c-format
-msgid "stack size cur %d, max %d\n"
-msgstr ""
+msgid "Renaming input to: `%s'"
+msgstr "Omdøber inddata til: »%s«"
-#: score.cc:109
-msgid "Interpreting music..."
-msgstr "Tolker musik..."
+#: lexer.ll:264
+msgid "quoted string expected after \\version"
+msgstr "citatstreng forventet efter \\version"
-#: score.cc:122
-msgid "Need music in a score"
-msgstr "Behøver musik i partitur"
+#: lexer.ll:268
+msgid "quoted string expected after \\sourcefilename"
+msgstr "citatstreng forventet efter \\sourcefilename"
-#. should we? hampers debugging.
-#: score.cc:135
-msgid "Errors found/*, not processing score*/"
-msgstr "Fejl fundne/*, behandler ikke partitur*/"
+#: lexer.ll:272
+msgid "integer expected after \\sourcefileline"
+msgstr "heltal ventet efter \\sourcefileline"
-#: score.cc:142
-#, c-format
-msgid "elapsed time: %.2f seconds"
-msgstr "tidsforbrug: %.2f sekunder"
+#: lexer.ll:299
+msgid "\\maininput not allowed outside init files"
+msgstr "\\maininput er ikke tilladt uden for init-filer"
-#: script-engraver.cc:66
+#: lexer.ll:323
#, c-format
-msgid "Don't know how to interpret articulation `%s'"
-msgstr "Kan ikke tolke artikulering \"%s\""
-
-#. this shouldn't happen, but let's continue anyway.
-#: separation-item.cc:53 separation-item.cc:101
-msgid "Separation_item: I've been drinking too much"
-msgstr "Separation_item: Jeg har drukket for meget"
+msgid "wrong or undefined identifier: `%s'"
+msgstr "fejlagtig eller udefineret identificerer: »%s«"
-#: simple-spacer.cc:254
-#, c-format
-msgid "No spring between column %d and next one"
-msgstr ""
+#: lexer.ll:348
+msgid "string expected after \\include"
+msgstr "streng ventet efter \\include"
-#: slur-engraver.cc:140
-msgid "unterminated slur"
-msgstr "uafsluttet legatobue"
+#: lexer.ll:358
+msgid "end quote missing"
+msgstr "slutcitationstegn mangler"
-#. How to shut up this warning, when Voice_devnull_engraver has
-#. eaten start request?
-#: slur-engraver.cc:157
-msgid "can't find start of slur"
-msgstr "kan ikke finde start på legatobue"
+#: lexer.ll:713
+msgid "EOF found inside a comment"
+msgstr "filslutning (EOF) fundet inden i en kommentar"
-#: slur.cc:53
-msgid "Putting slur over rest."
-msgstr "Sætter legatobue over pause."
+#: lexer.ll:718
+msgid "EOF found inside string"
+msgstr "filslutning (EOF) fundet inden i streng"
-#: slur.cc:424
-msgid "Slur over rest?"
-msgstr "Legatobue over pause?"
+#: lexer.ll:733
+msgid "Unfinished main input"
+msgstr "Ufærdige hovedinddata"
-#: source-file.cc:65
+#: lexer.ll:804
#, c-format
-msgid "Huh? Got %d, expected %d characters"
-msgstr "Øh? Fik %d, forventede %d tegn"
+msgid "invalid character: `%s'"
+msgstr "ugyldigt tegn: »%s«"
-#: spacing-spanner.cc:379
+#: lexer.ll:924
#, c-format
-msgid "Global shortest duration is %s\n"
-msgstr ""
+msgid "unknown escaped string: `\\%s'"
+msgstr "ukendt undvigestreng: »\\%s«"
-#: spring-smob.cc:32
+#: lexer.ll:944
#, c-format
-msgid "#<spring smob d= %f>"
-msgstr ""
+msgid "undefined character or shorthand: %s"
+msgstr "ikke defineret tegn eller stenografi: %s"
-#: staff-symbol.cc:62
-msgid "staff symbol: indentation yields beyond end of line"
-msgstr ""
+#: lexer.ll:1235
+msgid "non-UTF-8 input"
+msgstr "ikke-UTF-i-inddata"
-#: stem-engraver.cc:117
+#: lexer.ll:1279
#, c-format
-msgid "Adding note head to incompatible stem (type = %d)"
-msgstr "Tilføjer nodehoved til inkompatibel nodehals (type = %d)"
-
-#: stem.cc:118
-msgid "Weird stem size; check for narrow beams"
-msgstr "Mærkelig nodehalsstørrelse; tjek for smalle bjælker"
+msgid "Invalid version string \"%s\""
+msgstr "Ugyldig versionstreng »%s«"
-#: streams.cc:34
+#: lexer.ll:1284
#, c-format
-msgid "can't create directory: `%s'"
-msgstr "kan ikke oprette katalog: \"%s\""
+msgid "file too old: %s (oldest supported: %s)"
+msgstr "fil er for gammel: %s (ældest understøttet: %s)"
-#: streams.cc:48
-msgid "Error syncing file (disk full?)"
-msgstr "Fejl ved synkning af fil (disken fuld?)"
+#: lexer.ll:1285
+msgid "consider updating the input with the convert-ly script"
+msgstr "overvej at opdatere inddata med skriptet convert-ly"
-#: system.cc:125
+#: lexer.ll:1291
#, c-format
-msgid "Element count %d."
-msgstr "Elementantal %d."
-
-#: system.cc:377
-#, fuzzy, c-format
-msgid "Grob count %d "
-msgstr "Elementantal %d "
-
-#: system.cc:391
-msgid "Calculating column positions..."
-msgstr "Beregner kolonnepositioner..."
-
-#: text-spanner-engraver.cc:92
-msgid "can't find start of text spanner"
-msgstr "kan ikke finde start på tekstbro"
+msgid "program too old: %s (file requires: %s)"
+msgstr "program for gammelt: %s (fil kræver: %s)"
+
+#: auto-beam.scm:147
+msgid "Beam end fits no pattern"
+msgstr "Bjælkeslutning passer ikke til et mønster"
+
+#: backend-library.scm:27
+#, scheme-format
+msgid "Invoking `~a'..."
+msgstr "Starter »~a« ..."
+
+#: backend-library.scm:31
+#, scheme-format
+msgid "`~a' failed (~a)\n"
+msgstr "»~a« mislykkedes (~a)\n"
+
+#: backend-library.scm:94
+#, scheme-format
+msgid "Converting to `~a'...\n"
+msgstr "Konverterer til »~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
+#, scheme-format
+msgid "Converting to ~a..."
+msgstr "Konverterer til ~a ..."
+
+#: backend-library.scm:141
+#, scheme-format
+msgid "Writing header field `~a' to `~a'..."
+msgstr "Skriver teksthovedfelt »~a« til »~a« ..."
+
+#: backend-library.scm:190
+#, scheme-format
+msgid "missing stencil expression `~S'"
+msgstr "manglende stenciludtryk »~S«"
+
+#: bar-line.scm:133
+#, scheme-format
+msgid "Bar glyph ~a not known. Ignoring."
+msgstr "Bjælkeskrifttegn ~a er ikke kendt. Ignorerer."
+
+#: bar-line.scm:161
+#, scheme-format
+msgid "Annotation '~a' is allowed in the first argument of a bar line definition only."
+msgstr "Annotation »~a« er kun tilladt i det første argument for en bjælkelinjedefinition."
+
+#: bar-line.scm:169
+#, scheme-format
+msgid "Replacement '~a' is allowed in the last argument of a bar line definition only."
+msgstr "Erstatning »~a« er kun tilladt i det sidste argument for en bjælkelinjedefinition."
+
+#: bar-line.scm:230
+#, scheme-format
+msgid "add-bar-glyph-print-procedure: glyph '~a' has to be a single ASCII character."
+msgstr "add-bar-glyph-print-procedure: skrifttegnet »~a« skal være et enkelt ASCII-tegn."
+
+#: bar-line.scm:795
+#, scheme-format
+msgid "No span bar glyph defined for bar glyph '~a'; ignoring."
+msgstr "Intet skrifttegn for omfangsbjælke defineret for bjælkeskrifttegn »~a«; ignorerer."
+
+#: chord-entry.scm:52
+#, scheme-format
+msgid "Spurious garbage following chord: ~A"
+msgstr "Falsk affald efter akkord: ~A"
+
+#: define-context-properties.scm:31 define-grob-properties.scm:21
+#: define-music-properties.scm:21
+#, scheme-format
+msgid "symbol ~S redefined"
+msgstr "symbol ~S omdefineret"
+
+#: define-event-classes.scm:74
+#, scheme-format
+msgid "unknown parent class `~a'"
+msgstr "ukendt overklasse »~a«"
+
+#: define-event-classes.scm:108
+#, scheme-format
+msgid "Cannot redefine event class `~S'"
+msgstr "Kan ikke omdefinere hændelsesklasse »~S«"
+
+#: define-event-classes.scm:110
+#, scheme-format
+msgid "Undefined parent event class `~S'"
+msgstr "Overhændelsesklassen »~S« er ikke defineret"
+
+#: define-markup-commands.scm:1062
+msgid "no systems found in \\score markup, does it have a \\layout block?"
+msgstr "ingen systemer fundet i \\score-opmærkning, har den en \\layout-blok?"
+
+#: define-markup-commands.scm:2886
+#, scheme-format
+msgid "Cannot find glyph ~a"
+msgstr "Kan ikke finde teksttegn ~a"
+
+#: define-markup-commands.scm:3362
+#, scheme-format
+msgid "no brace found for point size ~S "
+msgstr "ingen akkolade fundet for punktstørrelse ~S "
+
+#: define-markup-commands.scm:3363
+#, scheme-format
+msgid "defaulting to ~S pt"
+msgstr "bruger standarden ~S pt"
+
+#: define-markup-commands.scm:3615
+#, scheme-format
+msgid "not a valid duration string: ~a"
+msgstr "ikke en gyldig længdestreng: ~a"
+
+#: define-markup-commands.scm:3826
+#, scheme-format
+msgid "not a valid duration string: ~a - ignoring"
+msgstr "ikke en gyldig længdestreng: ~a - ignorerer"
+
+#: define-music-types.scm:797
+#, scheme-format
+msgid "symbol expected: ~S"
+msgstr "forventede symbol: ~S"
+
+#: define-music-types.scm:800
+#, scheme-format
+msgid "cannot find music object: ~S"
+msgstr "kan ikke finde musikobjekt: ~S"
+
+#: define-music-types.scm:820
+#, scheme-format
+msgid "bad make-music argument: ~S"
+msgstr "ugyldigt make-music-argument: ~S"
+
+#: define-note-names.scm:972
+msgid "Select note names language."
+msgstr "Vælg sprog for nodenavne."
+
+#: define-note-names.scm:978
+#, scheme-format
+msgid "Using `~a' note names..."
+msgstr "Bruger »~a« nodenavne ..."
+
+#: define-note-names.scm:981
+#, scheme-format
+msgid "Could not find language `~a'. Ignoring."
+msgstr "Kunne ikke finde sprog »~a«. Ignorerer."
+
+#: document-backend.scm:135
+#, scheme-format
+msgid "pair expected in doc ~s"
+msgstr "par forventet i dokument ~s"
+
+#: document-backend.scm:202
+#, scheme-format
+msgid "cannot find interface for property: ~S"
+msgstr "kan ikke finde grænseflade for egenskab: ~S"
+
+#: document-backend.scm:212
+#, scheme-format
+msgid "unknown Grob interface: ~S"
+msgstr "ukendt Grob-grænseflade: ~S"
+
+#: documentation-lib.scm:62
+#, scheme-format
+msgid "Processing ~S..."
+msgstr "Behandler ~S..."
+
+#: documentation-lib.scm:178
+#, scheme-format
+msgid "Writing ~S..."
+msgstr "Skriver ~S ..."
+
+#: documentation-lib.scm:190
+#, scheme-format
+msgid "cannot find description for property `~S' (~S)"
+msgstr "kan ikke finde beskrivelse for egenskab »~S« (~S)"
+
+#: documentation-lib.scm:211
+#, scheme-format
+msgid "cannot find description for property ~S (~S)"
+msgstr "kan ikke finde beskrivelse for egenskab ~S (~S)"
+
+#: flag-styles.scm:162
+#, scheme-format
+msgid "flag stroke `~a' or `~a' not found"
+msgstr "flagslag »~a« eller »~a« blev ikke fundet"
+
+#: framework-eps.scm:108
+#, scheme-format
+msgid "Writing ~a..."
+msgstr "Skriver ~a ..."
+
+#: framework-ps.scm:281
+#, scheme-format
+msgid "cannot embed ~S=~S"
+msgstr "kan ikke indlejre ~S=~S"
+
+#: framework-ps.scm:324
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
+msgstr "kan ikke udtrække fil der matcher ~a fra ~a"
+
+#: framework-ps.scm:342
+#, scheme-format
+msgid "do not know how to embed ~S=~S"
+msgstr "ved ikke hvordan der skal indlejres ~S=~S"
+
+#: framework-ps.scm:367
+#, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
+msgstr "ved ikke hvordan skrifttype skal indlejres ~s ~s ~s"
+
+#: framework-ps.scm:729
+msgid ""
+"\n"
+"The PostScript backend does not support the\n"
+"system-by-system output. For that, use the EPS backend instead,\n"
+"\n"
+" lilypond -dbackend=eps FILE\n"
+"\n"
+"If have cut & pasted a lilypond fragment from a webpage, be sure\n"
+"to only remove anything before\n"
+"\n"
+" %% ****************************************************************\n"
+" %% Start cut-&-pastable-section\n"
+" %% ****************************************************************\n"
+msgstr ""
+"\n"
+"PostScript-motorern understøtter ikke\n"
+"system efter system-uddata. Her bruges EPS-motoren i stedet,\n"
+"\n"
+" lilypond -dbackend=eps FIL\n"
+"\n"
+"Hvis du har klippet og indsat et lilypondfragment fra en internetside, så\n"
+"vær sikker på kun at fjerne foran\n"
+"\n"
+" %% ****************************************************************\n"
+" %% Start cut-&-pastable-section\n"
+" %% ****************************************************************\n"
+
+#: framework-svg.scm:84
+#, scheme-format
+msgid "Updating font into: ~a"
+msgstr "Opdaterer skrifttype til: ~a"
+
+#: graphviz.scm:64
+#, scheme-format
+msgid "Writing graph `~a'..."
+msgstr "Skriver graf »~a« ..."
+
+#: layout-beam.scm:40
+#, scheme-format
+msgid "Error in beam quanting. Expected (~S,~S) found ~S."
+msgstr "Fejl i bjælkequanting. Forventede (~S,~S) fandt ~S."
+
+#: layout-beam.scm:54
+#, scheme-format
+msgid "Error in beam quanting. Expected ~S 0, found ~S."
+msgstr "Fejl i bjælkequanting. Forventede ~S 0, fandt ~S."
+
+#: lily-library.scm:350
+msgid "Music unsuitable for context-mod"
+msgstr "Musik uegnet for context-mod"
+
+#: lily-library.scm:405
+#, scheme-format
+msgid "Cannot find context-def \\~a"
+msgstr "Kan ikke finde context-def \\~a"
+
+#: lily-library.scm:421
+msgid "Music unsuitable for output-def"
+msgstr "Musik uegnet for output-def"
+
+#: lily-library.scm:921
+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 ""
+"Find indekset mellem @var{start} og @var{end} (et heltal)\n"
+"som laver det bedste match til @var{target-val} hvis\n"
+"anvendt på funktionen @var{getter}."
+
+#: lily-library.scm:1015
+#, scheme-format
+msgid "unknown unit: ~S"
+msgstr "ukendt enhed: ~S"
+
+#: lily-library.scm:1040
+#, scheme-format
+msgid "no \\version statement found, please add~afor future compatibility"
+msgstr "ingen \\version-udtryk fundet, tilføj venligst ~afor fremtidig kompatibilitet"
+
+#: lily.scm:75
+msgid "call-after-session used after session start"
+msgstr "call-after-sessin brugt efter sessionstart"
+
+#: lily.scm:93
+msgid "define-session used after session start"
+msgstr "define-session brugt efter sessionstart"
+
+#: lily.scm:399
+msgid "Using (ice-9 curried-definitions) module\n"
+msgstr "Bruger (ice-9 curried-definitions) modul\n"
+
+#: lily.scm:402
+msgid "Guile 1.8\n"
+msgstr "Guile 1.8\n"
+
+#: lily.scm:459
+#, scheme-format
+msgid "cannot find: ~A"
+msgstr "kan ikke finde: ~A"
+
+#: lily.scm:886
+msgid "Success: compilation successfully completed"
+msgstr "Succes: Kompilation blev færdig"
+
+#: lily.scm:887
+msgid "Compilation completed with warnings or errors"
+msgstr "Kompilation færdig med advarsler eller fejl"
+
+#: lily.scm:948
+#, scheme-format
+msgid "job ~a terminated with signal: ~a"
+msgstr "job ~a afsluttedes med signal: ~a"
+
+#: lily.scm:951
+#, scheme-format
+msgid ""
+"logfile ~a (exit ~a):\n"
+"~a"
+msgstr ""
+"logfil ~a (afslut ~a):\n"
+"~a"
+
+#: lily.scm:973 lily.scm:1062
+#, scheme-format
+msgid "failed files: ~S"
+msgstr "mislykkede filer: ~S"
+
+#: lily.scm:1053
+#, scheme-format
+msgid "Redirecting output to ~a..."
+msgstr "Sender uddata videre til ~a ..."
+
+#: lily.scm:1072 ps-to-png.scm:66
+#, scheme-format
+msgid "Invoking `~a'...\n"
+msgstr "Starter »~a« ...\n"
+
+#: ly-syntax-constructors.scm:66
+#, scheme-format
+msgid "~a function cannot return ~a"
+msgstr "~a-funktion kan ikke returnere ~a"
+
+#: ly-syntax-constructors.scm:76
+#, scheme-format
+msgid "wrong type for argument ~a. Expecting ~a, found ~s"
+msgstr "forker type for argument ~a. Forventede ~a, fandt ~s"
+
+#: ly-syntax-constructors.scm:200
+#, scheme-format
+msgid "Invalid property operation ~a"
+msgstr "Ugyldig egenskabsoperation ~a"
+
+#: markup-macros.scm:331
+#, scheme-format
+msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S"
+msgstr "Forkert antal argumenter. Forventede: ~A, fandt ~A: ~S"
+
+#: markup-macros.scm:337
+#, scheme-format
+msgid "Invalid argument in position ~A. Expect: ~A, found: ~S."
+msgstr "Ugyldigt argument i postion ~A. Forventede: ~A, fandt: ~S."
+
+#: markup-macros.scm:373
+#, scheme-format
+msgid "Not a markup command: ~A"
+msgstr "Ikke en opmærkningskommando: ~A"
+
+#: modal-transforms.scm:38
+msgid "'from' pitch not in scale; ignoring"
+msgstr "»fra« tonehøjde ikke i skala; ignorerer"
+
+#: modal-transforms.scm:42 modal-transforms.scm:75
+msgid "'to' pitch not in scale; ignoring"
+msgstr "»til« tonehøjde ikke i skala; ignorerer"
+
+#: modal-transforms.scm:46
+msgid "pitch to be transposed not in scale; ignoring"
+msgstr "tonehøjde der skal transponeres er ikke i skala; ignorerer"
+
+#: modal-transforms.scm:71
+msgid "'around' pitch not in scale; ignoring"
+msgstr "»omkring« tonehøjde er ikke i skala; ignorerer"
+
+#: modal-transforms.scm:79
+msgid "pitch to be inverted not in scale; ignoring"
+msgstr "tonehøjde der skal vendes om er ikke i skala; ignorerer"
+
+#: modal-transforms.scm:95
+msgid "negative replication count; ignoring"
+msgstr "negativ replikationsantal; ignorerer"
+
+#: music-functions.scm:311
+#, scheme-format
+msgid "invalid tremolo repeat count: ~a"
+msgstr "ugyldig gentagantal for tremole: ~a"
+
+#: music-functions.scm:340
+#, scheme-format
+msgid "unknown repeat type `~S': must be volta, unfold, percent, or tremolo"
+msgstr "ukendt gentagtype »~S«: skal være volta, unfold, procent eller tremolo"
+
+#: music-functions.scm:344
+msgid "More alternatives than repeats. Junking excess alternatives"
+msgstr "Flere alternativer end gentagelser. Stryger tiloversblevne alternativer"
+
+#: music-functions.scm:480
+#, scheme-format
+msgid "bad grob property path ~a"
+msgstr "ugyldig grob-egenskabssti ~a"
+
+#: music-functions.scm:779
+msgid "Bad chord repetition"
+msgstr "Ugyldig akkordgentagelse"
+
+#: music-functions.scm:884
+#, scheme-format
+msgid "music expected: ~S"
+msgstr "forventede musik: ~S"
+
+#: music-functions.scm:1226
+#, scheme-format
+msgid "cannot find quoted music: `~S'"
+msgstr "kan ikke finde citeret musik: »~S«"
+
+#: music-functions.scm:1366
+msgid "Add @var{octave-shift} to the octave of @var{pitch}."
+msgstr "Tilføj @var{octave-shift} til oktaven for @var{pitch}."
+
+#: music-functions.scm:1429
+#, scheme-format
+msgid "Unknown octaveness type: ~S "
+msgstr "Ukendt octaveness-type: ~S "
+
+#: music-functions.scm:1430
+msgid "Defaulting to 'any-octave."
+msgstr "Bruger standarden »any-octave«."
+
+#: music-functions.scm:1822
+#, scheme-format
+msgid "unknown accidental style: ~S"
+msgstr "ukendt utilsigte stil: ~S"
+
+#: music-functions.scm:2040
+msgid "Missing duration"
+msgstr "Manglende længde"
+
+#: music-functions.scm:2549
+#, scheme-format
+msgid "not a symbol list: ~a"
+msgstr "ikke en symbolliste: ~a"
+
+#: music-functions.scm:2552
+#, scheme-format
+msgid "conflicting tag group ~a"
+msgstr "mærkegruppe er i konflikt ~a"
+
+#: output-ps.scm:290 output-svg.scm:539
+#, scheme-format
+msgid "unknown line-cap-style: ~S"
+msgstr "ukendt line-cap-style: ~S"
+
+#: output-ps.scm:295 output-svg.scm:545
+#, scheme-format
+msgid "unknown line-join-style: ~S"
+msgstr "ukendt line-join-style: ~S"
+
+#: output-svg.scm:148
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
+msgstr "kan ikke tyde Pangobeskrivelse: ~a"
+
+#: output-svg.scm:228
+msgid "Glyph must have a unicode value"
+msgstr "Skrifttegn skal have en unicodeværdi"
+
+#: output-svg.scm:280 output-svg.scm:290
+#, scheme-format
+msgid "cannot find SVG font ~S"
+msgstr "kan ikke finde SVGskriften ~S"
+
+#: paper.scm:122
+msgid "set-global-staff-size: not in toplevel scope"
+msgstr "set-global-staff-size: ikke i topniveauanvendelsesområde"
+
+#: paper.scm:322
+#, scheme-format
+msgid "This is not a \\layout {} object, ~S"
+msgstr "Dette er ikke et \\layout {}-objekt, ~S"
+
+#: paper.scm:330
+#, scheme-format
+msgid "Unknown paper size: ~a"
+msgstr "Ukendt papirstørrelse: ~a"
+
+#. TODO: should raise (generic) exception with throw, and catch
+#. that in parse-scm.cc
+#: paper.scm:349
+msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
+msgstr "Skal bruge #(set-paper-size .. ) inden i \\paper { ... }"
+
+#: parser-clef.scm:154
+#, scheme-format
+msgid "unknown clef type `~a'"
+msgstr "ukendt nøgletype »~a«"
+
+#: parser-clef.scm:155
+#, scheme-format
+msgid "supported clefs: ~a"
+msgstr "understøttede nøgler: ~a"
+
+#: parser-ly-from-scheme.scm:74
+msgid "error in #{ ... #}"
+msgstr "fejl i #{ ... #}"
+
+#: part-combiner.scm:748
+#, scheme-format
+msgid "quoted music `~a' is empty"
+msgstr "citeret musik »~a« er tom"
+
+#: ps-to-png.scm:70
+#, scheme-format
+msgid "~a exited with status: ~S"
+msgstr "~a afsluttede med status: ~S"
+
+#: to-xml.scm:190
+#, scheme-format
+msgid "assertion failed: ~S"
+msgstr "påstand mislykkedes: ~S"
+
+#: translation-functions.scm:389
+#, scheme-format
+msgid "Negative fret for pitch ~a on string ~a"
+msgstr "Ugyldig bånd for tonehøjde ~a på streng ~a"
+
+#: translation-functions.scm:392
+#, scheme-format
+msgid "Missing fret for pitch ~a on string ~a"
+msgstr "Mangler bånd for tonehøjde ~a på streng ~a"
+
+#: translation-functions.scm:435
+#, scheme-format
+msgid "No open string for pitch ~a"
+msgstr "Ingen åben streng for tonehøjde ~a"
+
+#: translation-functions.scm:450 translation-functions.scm:462
+#, scheme-format
+msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
+msgstr "Anmodet streng for tonehøjde kræver negativ bånd: streng ~a tonehøjde ~a"
+
+#: translation-functions.scm:453
+msgid "Ignoring string request and recalculating."
+msgstr "Ignorerer strengforespørgsel og genberegning."
+
+#: translation-functions.scm:465
+msgid "Ignoring note in tablature."
+msgstr "Ignorerer node i tabulatur."
+
+#: translation-functions.scm:490
+#, scheme-format
+msgid "No string for pitch ~a (given frets ~a)"
+msgstr "Ingen streng for tonehøjde ~a (givne bånd ~a)"
+
+#: translation-functions.scm:595
+#, scheme-format
+msgid ""
+"No label for fret ~a (on string ~a);\n"
+"only ~a fret labels provided"
+msgstr ""
+"Ingen etiket for bånd ~a (på streng ~a);\n"
+"kun ~a båndetiketter tilbudt"
-#: text-spanner-engraver.cc:112
-msgid "already have a text spanner"
-msgstr "har allerede en tekstbro"
+# "pitch" hær skal alltså være en ton i et akkord
+#~ msgid "invalid inversion pitch: not part of chord: %s"
+#~ msgstr "ugyldig tone for inversion: ikke del af en akkord: %s"
-#: text-spanner-engraver.cc:167
-msgid "unterminated text spanner"
-msgstr "uafsluttet tekstbro"
+#~ msgid "can't find start of (de)crescendo"
+#~ msgstr "kan ikke finde starten på crescendo/diminuendo"
-#: text-spanner.cc:130
-msgid "Text_spanner too small"
-msgstr "Tekst_bro for lille"
+#~ msgid "already have a crescendo"
+#~ msgstr "har allerede et crescendo"
-#. Not using ngettext's plural feature here, as this message is
-#. more of a programming error.
-#: tfm-reader.cc:108
-#, c-format
-msgid "TFM header of `%s' has only %u word (s)"
-msgstr "TFM-rubrik i \"%s\" har kun %u ord"
+#~ msgid "already have a decrescendo"
+#~ msgstr "har allerede et diminuendo"
-#: tfm-reader.cc:142
-#, c-format
-msgid "%s: TFM file has %u parameters, which is more than the %u I can handle"
-msgstr "%s: TFM-fil har %u parametre, hvilket er mere end de %u jeg kan håndtere"
+#~ msgid "Cresc started here"
+#~ msgstr "Cresc startede her"
-#: tfm.cc:83
-#, c-format
-msgid "can't find ascii character: %d"
-msgstr "kan ikke finde ASCII-tegn: %d"
+#~ msgid "unterminated (de)crescendo"
+#~ msgstr "uafsluttet crescendo/diminuendo"
-#: tie-engraver.cc:216
-msgid "lonely tie"
-msgstr "ensom bindebue"
+#~ msgid "Nothing to connect extender to on the left. Ignoring extender request."
+#~ msgstr "Der er ingenting at forbinde udvideren mod til venstre. Ignorerer ønsket om udvider"
-#: tie-performer.cc:161
-msgid "No ties were created!"
-msgstr "Ingen bindebuer blev lavet!"
+#~ msgid "no one to print a repeat brace"
+#~ msgstr "der er ingen som kan skrive et gentagelsestegn"
-#: time-scaled-music-iterator.cc:25
-msgid "no one to print a tuplet start bracket"
-msgstr "der findes ingen som kan skrive en startklamme for tuppel"
+#~ msgid "couldn't find any font satisfying "
+#~ msgstr "kunne ikke finde nogen skrifttype som opfylder "
-#: translator-ctors.cc:53
-#, c-format
-msgid "unknown translator: `%s'"
-msgstr "ukendt oversætter: \"%s\""
+#~ msgid "No feasible line breaking found"
+#~ msgstr "Ingen mulig linjebrydning fandtes"
-#: translator-def.cc:87
-msgid "Program has no such type"
-msgstr "Programmet har ingen sådan type"
+#~ msgid "crescendo too small"
+#~ msgstr "crescendo for lille"
-#: translator-def.cc:93
-#, c-format
-msgid "Already contains: `%s'"
-msgstr "Indholder allerede: \"%s\""
+#~ msgid "Nothing to connect hyphen to on the left. Ignoring hyphen request."
+#~ msgstr "Der er ingenting at forbinde bindestregen med til venstre. Ignorerer bindestregsforespørgslen."
-#: translator-def.cc:94
-#, c-format
-msgid "Not adding translator: `%s'"
-msgstr "Tilføjer ikke oversætter: \"%s\""
+#~ msgid "Kpathsea couldn't find TFM file `%s'"
+#~ msgstr "Kpathsea kunne ikke finde TMF-fil: \"%s\""
-#: translator-def.cc:209
-#, c-format
-msgid "can't find: `%s'"
-msgstr "kan ikke finde: \"%s\""
+#~ msgid "lyrics found without any matching notehead"
+#~ msgstr "tekst fundet uden noget tilhørende nodehoved"
-#: translator-group.cc:159
-#, c-format
-msgid "can't find or create `%s' called `%s'"
-msgstr "kan ikke finde eller oprette \"%s\" kaldet \"%s\""
+#~ msgid "Huh? Melismatic note found to have associated lyrics."
+#~ msgstr "Øh? Melismatisk node har tilhørende tekst."
-#: translator-group.cc:244
-#, c-format
-msgid "can't find or create: `%s'"
-msgstr "kan ikke finde eller oprette: \"%s\""
+#~ msgid "set options, use -e '(ly-option-usage)' for help"
+#~ msgstr "sæt alternativer, brug -e '(ly-option-usage)' for hjælp"
-#: volta-engraver.cc:111
-msgid "No volta spanner to end"
-msgstr "Ingen volte-bro at afslutte"
+#~ msgid "EXT"
+#~ msgstr "FMT"
-#: volta-engraver.cc:121
-msgid "Already have a volta spanner. Stopping that one prematurely."
-msgstr "Har allerede en volte-bro. Stopper denne for tidligt."
+#~ msgid "prepend DIR to dependencies"
+#~ msgstr "tilføj KATALOG efter afhængigheder"
-#: volta-engraver.cc:125
-msgid "Also have a stopped spanner. Giving up."
-msgstr "Har også en stoppet bro. Giver op."
+#~ msgid "inhibit file output naming and exporting"
+#~ msgstr "hindr navngivning af filuddata og eksportering"
-#: parser.yy:434
-#, fuzzy
-msgid "Identifier should have alphabetic characters only"
-msgstr "Identificerer må kun indeholde alfabetiske tegn"
+#~ msgid ""
+#~ "LilyPond is a music typesetter. It produces beautiful sheet music\n"
+#~ "using a high level description file as input. LilyPond is part of \n"
+#~ "the GNU Project.\n"
+#~ msgstr ""
+#~ "LilyPond er en musiktypesætter. Den producerer smukke noder fra en\n"
+#~ "højniveaubeskrivning af musikken i en fil. LilyPond er en del af\n"
+#~ "GNU-projektet.\n"
-#: parser.yy:729
-msgid "More alternatives than repeats. Junking excess alternatives."
-msgstr "Flere alternativer end gentagelser. Stryger tiloversblevne alternativer."
+#~ msgid "GNU LilyPond -- The music typesetter"
+#~ msgstr "GNU Lilypond -- Musiktypesætteren"
-#: parser.yy:798
-msgid "Second argument must be a symbol"
-msgstr "Andet argument skal være et symbol"
+#~ msgid "silly pitch"
+#~ msgstr "tåbelig tone"
-#: parser.yy:803
-#, fuzzy
-msgid "First argument must be a procedure taking one argument"
-msgstr "Første argument skal være en procedure som tager 1 argument"
+#~ msgid "Transposition by %s makes accidental larger than two"
+#~ msgstr "Transponering med %s medfører løst fortegn større end to"
-#: parser.yy:1380
-msgid "Expecting string as script definition"
-msgstr "Forventer streng som skriptdefinition"
+#~ msgid "Too many clashing notecolumns. Ignoring them."
+#~ msgstr "For mange overlappende nodekolonner. Ignorerer dem."
-#: parser.yy:1390
-msgid "Can't specify direction for this request"
-msgstr "Kan ikke angive retning for denne forespørgsel"
+#~ msgid "paper output to `%s'..."
+#~ msgstr "papirsuddata til \"%s\"..."
-#: parser.yy:1516
-msgid "Expecting musical-pitch value"
-msgstr "Forventer nodeværdi"
+#~ msgid "Don't know how to handle a percent repeat of this length."
+#~ msgstr "Véd ikke hvordan en procenttegnsgentagelse (percent) af denne længde skal håndteres."
-#: parser.yy:1527
-msgid "Must have duration object"
-msgstr "Skal have tidslængdeobjekt"
+#~ msgid "unterminated phrasing slur"
+#~ msgstr "uafsluttet fraseringsbue"
-#: parser.yy:1536 parser.yy:1544
-msgid "Have to be in Lyric mode for lyrics"
-msgstr "Skal være i teksttilstand (Lyric mode) for tekst"
+#~ msgid "can't find start of phrasing slur"
+#~ msgstr "kan ikke finde start på fraseringsbue"
-#: parser.yy:1715 parser.yy:1768
-#, c-format
-msgid "not a duration: %d"
-msgstr "ikke en tidslængde: %d"
+#~ msgid "Pitch arguments out of range"
+#~ msgstr "Toneargument udenfor intervallet"
-#: parser.yy:1855
-msgid "Have to be in Note mode for notes"
-msgstr "Skal være i nodetilstand (Note mode) for noder"
+#~ msgid "Separation_item: I've been drinking too much"
+#~ msgstr "Separation_item: Jeg har drukket for meget"
-#: parser.yy:1954
-msgid "Have to be in Chord mode for chords"
-msgstr "Skal være i akkordtilstand (Chord mode) for akkord"
+#~ msgid "can't find start of slur"
+#~ msgstr "kan ikke finde start på legatobue"
-#: parser.yy:2134
-msgid "need integer number arg"
-msgstr "behøver heltalsargument"
+#~ msgid "Putting slur over rest."
+#~ msgstr "Sætter legatobue over pause."
-#: parser.yy:2206
-msgid "Suspect duration found following this beam"
-msgstr ""
+#~ msgid "Slur over rest?"
+#~ msgstr "Legatobue over pause?"
-#: lexer.ll:178
-msgid "EOF found inside a comment"
-msgstr "filslutning fundet inden i en kommentar"
+#~ msgid "Huh? Got %d, expected %d characters"
+#~ msgstr "Øh? Fik %d, forventede %d tegn"
-#: lexer.ll:192
-msgid "\\maininput disallowed outside init files"
-msgstr "\\maininput forbudt udenfor init-filer"
+#~ msgid "Error syncing file (disk full?)"
+#~ msgstr "Fejl ved synkning af fil (disken fuld?)"
-#: lexer.ll:216
-#, c-format
-msgid "wrong or undefined identifier: `%s'"
-msgstr "fejlagtig eller udefineret identificerer: \"%s\""
+#~ msgid "TFM header of `%s' has only %u word (s)"
+#~ msgstr "TFM-rubrik i \"%s\" har kun %u ord"
-#. backup rule
-#: lexer.ll:225
-msgid "Missing end quote"
-msgstr "Mangler slutcitationstegn"
+#~ msgid "%s: TFM file has %u parameters, which is more than the %u I can handle"
+#~ msgstr "%s: TFM-fil har %u parametre, hvilket er mere end de %u jeg kan håndtere"
-#. backup rule
-#: lexer.ll:247 lexer.ll:251
-msgid "white expected"
-msgstr "forventede mellemrum"
+#~ msgid "can't find ascii character: %d"
+#~ msgstr "kan ikke finde ASCII-tegn: %d"
-#: lexer.ll:260
-msgid "Can't evaluate Scheme in safe mode"
-msgstr "Kan ikke evaluere Scheme i sikker tilstand"
+#~ msgid "Program has no such type"
+#~ msgstr "Programmet har ingen sådan type"
-#: lexer.ll:364
-#, fuzzy
-msgid "Brace found at end of lyric. Did you forget a space?"
-msgstr "Krølleparentes fundet i slutning af tekst. Glemte du et mellemrum?"
+#~ msgid "Already contains: `%s'"
+#~ msgstr "Indholder allerede: \"%s\""
-#: lexer.ll:480
-#, c-format
-msgid "invalid character: `%c'"
-msgstr "ugyldigt tegn: \"%c\""
+#~ msgid "Second argument must be a symbol"
+#~ msgstr "Andet argument skal være et symbol"
-#: lexer.ll:566
-#, c-format
-msgid "unknown escaped string: `\\%s'"
-msgstr "ukendt \"escaped\" streng: \"\\%s\""
+#~ msgid "Can't specify direction for this request"
+#~ msgstr "Kan ikke angive retning for denne forespørgsel"
-#: lexer.ll:657
-#, fuzzy, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "fejlagtig lilypond-version: %s (%s, %s)"
+#~ msgid "Expecting musical-pitch value"
+#~ msgstr "Forventer nodeværdi"
-#: lexer.ll:658
-#, fuzzy
-msgid "Consider updating the input with the convert-ly script"
-msgstr "Overvej at konvertere inddata med skriptet \"convert-ly\""
+#~ msgid "Brace found at end of lyric. Did you forget a space?"
+#~ msgstr "Krølleparentes fundet i slutning af tekst. Glemte du et mellemrum?"
#~ msgid "Generate .dvi with LaTeX for LilyPond"
-#~ msgstr "Generér .dvi med LaTeX for LilyPond"
+#~ msgstr "Generér .dvi med LaTeX for LilyPond"
# %s er progravnavnet (mup2ly)
#~ msgid "%s is far from completed. Not all constructs are recognised."
-#~ msgstr "%s er langt fra færdig, og kan ikke genkende alle konstruktioner."
+#~ msgstr "%s er langt fra færdig, og kan ikke genkende alle konstruktioner."
#~ msgid "Cleaning `%s'..."
#~ msgstr "Renser \"%s\"..."
#~ msgid "EOF in a string"
#~ msgstr "EOF i en streng"
-# det handlar om mmap hær
+# det handlar om mmap hær
#~ msgid "can't map file"
-#~ msgstr "kan ikke lave \"mmap\" på filen"
-
-#~ msgid "<stdin>"
-#~ msgstr "<stdin>"
-
-#~ msgid "programming error: "
-#~ msgstr "programmeringsfejl: "
-
-#~ msgid "can't find start of beam"
-#~ msgstr "kan ikke finde start på bjælke"
-
-#~ msgid "weird beam vertical offset"
-#~ msgstr "underlig lodret afstand for bjælke"
-
-#~ msgid "unknown spacing pair `%s', `%s'"
-#~ msgstr "ukendt afstandspar \"%s\", \"%s\""
-
-#~ msgid "no Grace context available"
-#~ msgstr "ingen forslagsnodeomgivelse (Grace) tilgængelig"
-
-#~ msgid "Unattached grace notes. Attaching to last musical column."
-#~ msgstr "Ikke-fæstede forslagsnoder. Fæster ved sidste musikkolonne."
+#~ msgstr "kan ikke lave \"mmap\" på filen"
#~ msgid "evalute EXPR as Scheme after .scm init is read"
-#~ msgstr "evaluér UDTR som Scheme efter .scm-init er læst"
+#~ msgstr "evaluér UDTR som Scheme efter .scm-init er læst"
#~ msgid "This binary was compiled with the following options:"
-#~ msgstr "Dette program blev oversat med følgende flag:"
+#~ msgstr "Dette program blev oversat med følgende flag:"
#~ msgid "ly_get_mus_property (): Not a Music"
#~ msgstr "ly_get_mus_property (): Ikke en \"Music\""
#~ msgid "ly_music_name (): Not a music expression"
#~ msgstr "ly_music_name (): Ikke et musikudtryk"
-#~ msgid "writing header field `%s' to `%s'..."
-#~ msgstr "skriver rubrikfelt \"%s\" til \"%s\"..."
-
#~ msgid ""
#~ "`%s' is deprecated. Use\n"
#~ " \\property %s.%s \\override #'%s = #%s"
#~ msgstr ""
-#~ "\"%s\" er forældet. Brug\n"
+#~ "\"%s\" er forældet. Brug\n"
#~ " \\property %s.%s \\override #'%s = #%s"
#~ msgid "Wrong type for property: %s, type: %s, value found: %s, type: %s"
-#~ msgstr "Forkert type for egenskab: %s, type: %s, værdi fundet: %s, type: %s"
+#~ msgstr "Forkert type for egenskab: %s, type: %s, værdi fundet: %s, type: %s"
#~ msgid "too many notes for rest collision"
-#~ msgstr "for mange noder for pausesammenstød"
-
-#~ msgid "Scheme options:"
-#~ msgstr "Scheme-flag:"
+#~ msgstr "for mange noder for pausesammenstød"
#~ msgid "Can't find property type-check for `%s'. Perhaps you made a typing error? Doing assignment anyway."
-#~ msgstr "Kan ikke finde egenskabstypekontrol for \"%s\". MÃ¥ske har du lavet en tastefejl? Laver tildeling alligevel."
+#~ msgstr "Kan ikke finde egenskabstypekontrol for \"%s\". MÃ¥ske har du lavet en tastefejl? Laver tildeling alligevel."
#~ msgid "ly-get-trans-property: expecting a Translator_group argument"
#~ msgstr "ly-get-trans-property: forventede et Translator_group-argument"
#~ msgstr "Forventer %d argumenter"
#~ msgid "Oldest supported input version: %s"
-#~ msgstr "Ældste inddataversion som understøttes: %s"
+#~ msgstr "Ældste inddataversion som understøttes: %s"
#~ msgid "#32 in quarter: %d"
#~ msgstr "#32 i fjerdedel: %d"
-#~ msgid "LY output to `%s'..."
-#~ msgstr "LY-uddata til \"%s\"..."
-
-#~ msgid "track %d:"
-#~ msgstr "spor %d:"
-
-#~ msgid "Processing..."
-#~ msgstr "Behandler..."
-
-#~ msgid "Creating voices..."
-#~ msgstr "Laver stemmer..."
-
-#~ msgid "track "
-#~ msgstr "spor "
-
-#~ msgid "NOT Filtering tempo..."
-#~ msgstr "Filtrerer IKKE tempo..."
-
-#~ msgid "NOT Quantifying columns..."
-#~ msgstr "Kvantificerer IKKE kolonner..."
-
-#~ msgid "Quantifying columns..."
-#~ msgstr "Kvantificerer kolonner..."
-
-#~ msgid "Settling columns..."
-#~ msgstr "Bestemmer kolonner..."
-
-#~ msgid "% MIDI copyright:"
-#~ msgstr "% MIDI-copyright:"
-
-#~ msgid "% MIDI instrument:"
-#~ msgstr "% MIDI-instrument:"
-
#~ msgid "lily indent level: %d"
#~ msgstr "indenteringsniveau for lily: %d"
-# Kanske man ikke skal oversætta, men når får de tage bort _() i stællet for
-# at skrive en fånig kommentar
+# Kanske man ikke skal oversætta, men når får de tage bort _() i stællet for
+# at skrive en fånig kommentar
#~ msgid "% Creator: "
-#~ msgstr "% Kreatør: "
+#~ msgstr "% Kreatør: "
#~ msgid "% Automatically generated"
#~ msgstr "% Automatgenereret"
#~ msgid "% from input file: "
#~ msgstr "% fra inddatafil: "
-#~ msgid "write exact durations, e.g.: a4*385/384"
-#~ msgstr "skriv eksakte tidslængder, fx: a4*385/384"
-
#~ msgid "enable debugging output"
-#~ msgstr "aktivér fejlsøgningsuddata"
-
-#~ msgid "don't output tuplets, double dots or rests, smallest is 32"
-#~ msgstr "udskriv ikke tupler, dobbeltpunktninger eller pauser, mindste er 32"
-
-#~ msgid "set FILE as default output"
-#~ msgstr "sæt FIL som standarduddata"
-
-#~ msgid "don't output tuplets"
-#~ msgstr "udskriv ikke tupler"
-
-#~ msgid "be quiet"
-#~ msgstr "vær stille"
-
-#~ msgid "don't output rests or skips"
-#~ msgstr "udskriv ikke pauser eller hop"
-
-#~ msgid "set smallest duration"
-#~ msgstr "indstil mindste længde"
+#~ msgstr "aktivér fejlsøgningsuddata"
#~ msgid "don't timestamp the output"
#~ msgstr "tidsstempl ikke uddata"
-#~ msgid "be verbose"
-#~ msgstr "vær udførlig"
-
#~ msgid "assume no double dotted notes"
#~ msgstr "antag ingen dobbeltpunktede noder"
#~ msgstr "Brug: %s [FLAG]... [FIL]"
#~ msgid "Translate MIDI-file to lilypond"
-#~ msgstr "Oversæt MIDI-fil til lilypond"
-
-#~ msgid "no_double_dots: %d\n"
-#~ msgstr "no_double_dots: %d\n"
-
-#~ msgid "no_rests: %d\n"
-#~ msgstr "no_rests: %d\n"
-
-#~ msgid "no_quantify_b_s: %d\n"
-#~ msgstr "no_quantify_b_s: %d\n"
-
-#~ msgid "no_smaller_than: %d (1/%d)\n"
-#~ msgstr "no_smaller_than: %d (1/%d)\n"
-
-#~ msgid "no_tuplets: %d\n"
-#~ msgstr "no_tuplets: %d\n"
+#~ msgstr "Oversæt MIDI-fil til lilypond"
#~ msgid "zero length string encountered"
-#~ msgstr "streng med længde nul mødtes"
-
-#~ msgid "MIDI header expected"
-#~ msgstr "forventede MIDI-rubrik"
+#~ msgstr "streng med længde nul mødtes"
#~ msgid "invalid header length"
-#~ msgstr "ugyldig rubriklængde"
-
-#~ msgid "invalid MIDI format"
-#~ msgstr "ugyldigt MIDI-format"
-
-#~ msgid "invalid number of tracks"
-#~ msgstr "ugyldigt antal spor"
+#~ msgstr "ugyldig rubriklængde"
#~ msgid "can't handle non-metrical time"
-#~ msgstr "kan ikke håndtere ikke-metrisk tid"
+#~ msgstr "kan ikke håndtere ikke-metrisk tid"
#~ msgid "Junking note-end event: channel = %d, pitch = %d"
-#~ msgstr "Stryger nodeslutshændelse: kanal = %d, tone = %d"
-
-#~ msgid "invalid running status"
-#~ msgstr "ugyldig kørselstatus"
-
-#~ msgid "unimplemented MIDI meta-event"
-#~ msgstr "uimplementeret MIDI-metahændelse"
-
-#~ msgid "invalid MIDI event"
-#~ msgstr "ugyldig MIDI-hændelse"
-
-#~ msgid "MIDI track expected"
-#~ msgstr "forventede MIDI-spor"
-
-#~ msgid "invalid track length"
-#~ msgstr "ugyldig sporlængde"
+#~ msgstr "Stryger nodeslutshændelse: kanal = %d, tone = %d"
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: lilypond 2.19.17\n"
+"Project-Id-Version: lilypond 2.19.19\n"
"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
"lilypond.bugs\n"
-"POT-Creation-Date: 2015-03-15 11:17+0000\n"
+"POT-Creation-Date: 2015-04-26 11:25+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "dot `%s' not found"
msgstr ""
-#: dynamic-engraver.cc:168
+#: dynamic-engraver.cc:169
#, c-format
msgid ""
"unknown crescendo style: %s\n"
"defaulting to hairpin."
msgstr ""
-#: dynamic-engraver.cc:233 slur-proto-engraver.cc:119
+#: dynamic-engraver.cc:234 slur-proto-engraver.cc:119
#, c-format
msgid "unterminated %s"
msgstr ""
msgid "(search path: `%s')"
msgstr ""
-#: 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 ""
-#: key-engraver.cc:198
+#: key-engraver.cc:197
msgid "Incomplete keyAlterationOrder for key signature"
msgstr ""
msgid "placing below"
msgstr ""
-#: note-collision.cc:510
+#: note-collision.cc:512
msgid "this Voice needs a \\voiceXx or \\shiftXx setting"
msgstr ""
msgid "FreeType error: %s"
msgstr ""
-#: open-type-font.cc:112
+#: open-type-font.cc:116
#, c-format
msgid "unsupported font format: %s"
msgstr ""
-#: open-type-font.cc:114
+#: open-type-font.cc:118
#, c-format
msgid "error reading font file %s: %s"
msgstr ""
-#: open-type-font.cc:189
+#: open-type-font.cc:193
#, c-format
msgid "FT_Get_Glyph_Name () Freetype error: %s"
msgstr ""
-#: open-type-font.cc:337 pango-font.cc:257
+#: open-type-font.cc:341 pango-font.cc:257
#, c-format
msgid "FT_Get_Glyph_Name () error: %s"
msgstr ""
msgid "best score for this sys-count: %f"
msgstr ""
-#: 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 ""
msgid "staff-affinities should only decrease"
msgstr ""
-#: 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.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 ""
-#: 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 ""
-#: page-turn-page-breaking.cc:300
+#: page-turn-page-breaking.cc:301
#, c-format
msgid "break starting at page %d"
msgstr ""
-#: page-turn-page-breaking.cc:301
+#: page-turn-page-breaking.cc:302
#, c-format
msgid "\tdemerits: %f"
msgstr ""
-#: page-turn-page-breaking.cc:302
+#: page-turn-page-breaking.cc:303
#, c-format
msgid "\tsystem count: %d"
msgstr ""
-#: page-turn-page-breaking.cc:303
+#: page-turn-page-breaking.cc:304
#, c-format
msgid "\tpage count: %d"
msgstr ""
-#: page-turn-page-breaking.cc:304
+#: page-turn-page-breaking.cc:305
#, c-format
msgid "\tprevious break: %d"
msgstr ""
msgid "program option -dpreview not supported by backend `%s'"
msgstr ""
-#: paper-column-engraver.cc:263
+#: paper-column-engraver.cc:264
msgid ""
"forced break was overridden by some other event, should you be using bar "
"checks?"
msgid "cannot end %s"
msgstr ""
-#: slur.cc:434
+#: slur.cc:436
#, c-format
msgid "Ignoring grob for slur: %s. avoid-slur not set?"
msgstr ""
msgid "not a valid duration string: ~a - ignoring"
msgstr ""
-#: define-music-types.scm:798
+#: define-music-types.scm:794
#, scheme-format
msgid "symbol expected: ~S"
msgstr ""
-#: define-music-types.scm:801
+#: define-music-types.scm:797
#, scheme-format
msgid "cannot find music object: ~S"
msgstr ""
-#: define-music-types.scm:821
+#: define-music-types.scm:817
#, scheme-format
msgid "bad make-music argument: ~S"
msgstr ""
msgid "error in #{ ... #}"
msgstr ""
-#: part-combiner.scm:748
+#: part-combiner.scm:763
#, scheme-format
msgid "quoted music `~a' is empty"
msgstr ""
include $(depth)/make/stepmake.make
-CFLAGS += -DPy_BUILD_CORE -Wall
+CFLAGS += -DPy_BUILD_CORE -Wall $(PYTHON_CFLAGS)
+LDFLAGS += $(PYTHON_LIBS)
# unset al guile stuff from configure
CONFIG_LDFLAGS=
dash structure. Each @code{dash-element} has a starting t value,
an ending t-value, a @code{dash-fraction}, and a @code{dash-period}.")
(dash-fraction ,number? "Size of the dashes, relative to
-@code{dash-period}. Should be between @code{0.1} and @code{1.0}
-(continuous line). If set to @code{0.0}, a dotted line is produced")
+@code{dash-period}. Should be between @code{0.1} and
+@code{1.0} (continuous line). If set to @code{0.0}, a dotted line is
+produced")
(dash-period ,number? "The length of one dash together with
whitespace. If negative, no line is drawn at all.")
(default-direction ,ly:dir? "Direction determined by note head
that encloses the stencils that comprise the grob. In the Postscript
backend, as there is no way to group items, the setting of the id property
will have no effect.")
+ (ignore-ambitus ,boolean? "If set, don't consider this notehead
+for ambitus calculation.")
(ignore-collision ,boolean? "If set, don't do note collision
resolution on this @code{NoteColumn}.")
(implicit ,boolean? "Is this an implicit bass figure?")
used.")
(parent-alignment-Y ,number? "Like @code{parent-alignment-X}
but for the Y@tie{}axis.")
+ (parenthesis-friends ,list? "A list of Grob types, as symbols.
+When parentheses enclose a Grob that has 'parenthesis-friends, the
+parentheses widen to include any child Grobs with type among
+'parenthesis-friends.")
(parenthesized ,boolean? "Parenthesize this grob.")
(positions ,number-pair? "Pair of staff coordinates
@code{(@var{left} . @var{right})}, where both @var{left} and
values may also be specified - the unit is half the object width.")
(self-alignment-Y ,number? "Like @code{self-alignment-X} but for
the Y@tie{}axis.")
+ (shape ,symbol? "This setting determines what shape a grob
+has. Valid choices depend on the @code{stencil} callback reading
+this property.")
(sharp-positions ,list? "Sharps in key signatures are placed
within the specified ranges of staff-positions. The general form
is a list of pairs, with one pair for each type of clef, in order
. (
(duration-log . 2)
(glyph-name . ,note-head::calc-glyph-name)
+ (ignore-ambitus . #t)
(stencil . ,ly:note-head::print)
(Y-offset . ,staff-symbol-referencer::callback)
(Y-extent . ,grob::always-Y-extent-from-stencil)
(extra-spacing-height . ,ly:note-head::include-ledger-line-height)
(glyph-name . ,note-head::calc-glyph-name)
(ligature-flexa . #f)
+ (parenthesis-friends . (accidental-grob dot))
(stem-attachment . ,ly:note-head::calc-stem-attachment)
(stencil . ,ly:note-head::print)
(X-offset . ,ly:note-head::stem-x-shift)
;; horizontal attachment. ParenthesesItem does not reserve
;; space of its own, however.
(X-extent . (0 . 0))
+ (Y-extent . ,parentheses-item::y-extent)
(meta . ((class . Item)
(interfaces . (font-interface
parentheses-interface))))))
(cross-staff . ,ly:rest::calc-cross-staff)
(duration-log . ,stem::calc-duration-log)
(minimum-distance . 0.25)
+ (parenthesis-friends . (dot))
(stencil . ,ly:rest::print)
(voiced-position . 4)
(X-extent . ,ly:rest::width)
(parent-alignment-X . ,CENTER)
(slope . ,ly:stem-tremolo::calc-slope)
(stencil . ,ly:stem-tremolo::print)
- (style . ,ly:stem-tremolo::calc-style)
+ (shape . ,ly:stem-tremolo::calc-shape)
(X-extent . ,ly:stem-tremolo::width)
(X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
(Y-extent . ,(grob::unpure-Y-extent-from-stencil ly:stem-tremolo::pure-height))
(duration-log . ,note-head::calc-duration-log)
(font-series . bold)
(font-size . -2)
+ (parenthesis-friends . (dot))
(stem-attachment . (0.0 . 1.35))
(stencil . ,tab-note-head::print)
(whiteout . #t)
context 'measureLength new-measure-length))))
'Timing)
'Score)
- (make-music 'TimeSignatureEvent music))))
+ ;; (make-music 'TimeSignatureEvent music) would always
+ ;; create a Bottom context. So instead, we just send the
+ ;; event to whatever context may be currently active. If
+ ;; that is not contained within an existing context with
+ ;; TimeSignatureEngraver at the time \time is iterated, it
+ ;; will drop through the floor which mostly means that
+ ;; point&click and tweaks are not available for any time
+ ;; signatures engraved due to the Timing property changes
+ ;; but without a \time of its own. This is more a
+ ;; "notification" rather than an "event" (which is always
+ ;; sent to Bottom) but we don't currently have iterators for
+ ;; that.
+ (make-apply-context
+ (lambda (context)
+ (ly:broadcast (ly:context-event-source context)
+ (ly:make-stream-event
+ (ly:make-event-class 'time-signature-event)
+ (ly:music-mutable-properties music))))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Some MIDI callbacks -- is this a good place for them?
(define-extra-display-method PartCombineMusic (expr parser)
(with-music-match (expr (music 'PartCombineMusic
+ direction ?dir
elements ((music 'UnrelativableMusic
element (music 'ContextSpeccedMusic
context-id "one"
context-id "two"
context-type 'Voice
element ?sequence2)))))
- (format #f "\\partcombine ~a~a~a"
+ (format #f "\\partcombine~a ~a~a~a"
+ (cond ((equal? ?dir UP) "Up")
+ ((equal? ?dir DOWN) "Down")
+ (else ""))
(music->lily-string ?sequence1 parser)
(new-line->lily-string)
(music->lily-string ?sequence2 parser))))
+(define-extra-display-method ContextSpeccedMusic (expr parser)
+ "If `expr' is a \\partcombine expression, return \"\\partcombine ...\".
+Otherwise, return #f."
+ (with-music-match
+ (expr (music 'ContextSpeccedMusic
+ context-type 'Staff
+ element (music 'SimultaneousMusic
+ elements ((music 'ContextSpeccedMusic
+ context-id "one"
+ context-type 'Voice)
+ (music 'ContextSpeccedMusic
+ context-id "two"
+ context-type 'Voice)
+ (music 'ContextSpeccedMusic
+ context-id "shared"
+ context-type 'Voice)
+ ?pc-music))))
+ (with-music-match
+ (?pc-music (music 'PartCombineMusic))
+ (format #f "~a" (music->lily-string ?pc-music parser)))))
+
(define-display-method UnrelativableMusic (expr parser)
(music->lily-string (ly:music-property expr 'element) parser))
Syntax: @var{note}@code{\\x}, where @code{\\x} is a dynamic mark like
@code{\\ppp} or @code{\\sfz}. A complete list is in file
@file{ly/@/dynamic-scripts-init.ly}.")
- (types . (general-music post-event event dynamic-event absolute-dynamic-event))
+ (types . (post-event event dynamic-event absolute-dynamic-event))
))
(AlternativeEvent
. ((description . "Create an alternative event.")
- (types . (general-music event alternative-event))
+ (types . (event alternative-event))
))
(AnnotateOutputEvent
. ((description . "Print an annotation of an output element.")
- (types . (general-music event annotate-output-event post-event))
+ (types . (event annotate-output-event post-event))
))
(ApplyContext
. ((description . "Call the argument with the current context during
interpreting phase.")
- (types . (general-music apply-context))
+ (types . (apply-context))
(iterator-ctor . ,ly:apply-context-iterator::constructor)
))
Arguments to @var{func} are 1.@tie{}the grob, 2.@tie{}the originating
context, and 3.@tie{}the context where @var{func} is called.")
- (types . (general-music event apply-output-event))
+ (types . (event apply-output-event))
))
(ArpeggioEvent
. ((description . "Make an arpeggio on this note.
Syntax: @w{@var{note}@code{-\\arpeggio}}")
- (types . (general-music post-event arpeggio-event event))
+ (types . (post-event arpeggio-event event))
))
;; todo: use articulation-event for slur as well.
\n(no direction specified), and where @code{y} is an articulation\
\n(such as @w{@code{-.}}, @w{@code{->}}, @code{\\tenuto}, @code{\\downbow}).
See the Notation Reference for details.")
- (types . (general-music post-event event articulation-event script-event))
+ (types . (post-event event articulation-event script-event))
))
(AutoChangeMusic
(iterator-ctor . ,ly:auto-change-iterator::constructor)
(start-callback . ,ly:music-wrapper::start-callback)
(length-callback . ,ly:music-wrapper::length-callback)
- (types . (general-music music-wrapper-music auto-change-instruction))
+ (types . (music-wrapper-music auto-change-instruction))
))
(BarCheck
. ((description . "Check whether this music coincides with
the start of the measure.")
- (types . (general-music bar-check))
+ (types . (bar-check))
(iterator-ctor . ,ly:bar-check-iterator::constructor)
))
(BassFigureEvent
. ((description . "Print a bass-figure text.")
- (types . (general-music event rhythmic-event bass-figure-event))
+ (types . (event rhythmic-event bass-figure-event))
))
(BeamEvent
. ((description . "Start or stop a beam.
Syntax for manual control: @code{c8-[ c c-] c8}")
- (types . (general-music post-event event beam-event span-event))
+ (types . (post-event event beam-event span-event))
))
(BeamForbidEvent
. ((description . "Specify that a note may not auto-beamed.")
- (types . (general-music post-event event beam-forbid-event))
+ (types . (post-event event beam-forbid-event))
))
(BreakDynamicSpanEvent
. ((description . "End an alignment spanner for dynamics here.")
- (types . (general-music post-event break-span-event break-dynamic-span-event event))
+ (types . (post-event break-span-event break-dynamic-span-event event))
))
(BendAfterEvent
. ((description . "A drop/@/fall/@/doit jazz articulation.")
- (types . (general-music post-event bend-after-event event))))
+ (types . (post-event bend-after-event event))))
(BreathingEvent
. ((description . "Create a @q{breath mark} or @q{comma}.
Syntax: @var{note}@code{\\breathe}")
- (types . (general-music event breathing-event))
+ (types . (event breathing-event))
(midi-length . ,breathe::midi-length)))
(ClusterNoteEvent
. ((description . "A note that is part of a cluster.")
;; not a note-event, to ensure that Note_heads_engraver doesn't eat it.
(iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
- (types . (general-music cluster-note-event melodic-event
- rhythmic-event event))
+ (types . (cluster-note-event melodic-event rhythmic-event event))
))
(CompletizeExtenderEvent
. ((description . "Used internally to signal the end of a lyrics block to
ensure extenders are completed correctly when a @code{Lyrics} context ends
before its associated @code{Voice} context.")
- (types . (general-music completize-extender-event event))
+ (types . (completize-extender-event event))
))
(ContextChange
Syntax: @code{\\change Staff = @var{new-id}}")
(iterator-ctor . ,ly:change-iterator::constructor)
- (types . (general-music translator-change-instruction))
+ (types . (translator-change-instruction))
))
(ContextSpeccedMusic
(iterator-ctor . ,ly:context-specced-music-iterator::constructor)
(length-callback . ,ly:music-wrapper::length-callback)
(start-callback . ,ly:music-wrapper::start-callback)
- (types . (context-specification general-music music-wrapper-music))
+ (types . (context-specification music-wrapper-music))
))
(CrescendoEvent
An alternative syntax is @var{note}@code{\\cr} @dots{}
@var{note}@code{\\endcr}.")
- (types . (general-music post-event span-event span-dynamic-event crescendo-event
- event))
+ (types . (post-event span-event span-dynamic-event crescendo-event
+ event))
))
(DecrescendoEvent
An alternative syntax is @var{note}@code{\\decr} @dots{}
@var{note}@code{\\enddecr}.")
- (types . (general-music post-event span-event span-dynamic-event decrescendo-event
- event))
+ (types . (post-event span-event span-dynamic-event decrescendo-event
+ event))
))
(DoublePercentEvent
. ((description . "Used internally to signal double percent repeats.")
- (types . (general-music event double-percent-event rhythmic-event))
+ (types . (event double-percent-event rhythmic-event))
))
(EpisemaEvent
. ((description . "Begin or end an episema.")
- (types . (general-music post-event span-event event episema-event))
+ (types . (post-event span-event event episema-event))
))
(Event
. ((description . "Atomic music event.")
- (types . (general-music event))
+ (types . (event))
))
(EventChord
(length-callback . ,ly:music-sequence::event-chord-length-callback)
(to-relative-callback .
,ly:music-sequence::event-chord-relative-callback)
- (types . (general-music event-chord simultaneous-music))
+ (types . (event-chord simultaneous-music))
))
(ExtenderEvent
. ((description . "Extend lyrics.")
- (types . (general-music post-event extender-event event))
+ (types . (post-event extender-event event))
))
(FingeringEvent
. ((description . "Specify what finger to use for this note.")
- (types . (general-music post-event fingering-event event))
+ (types . (post-event fingering-event event))
))
(FootnoteEvent
. ((description . "Footnote a grob.")
- (types . (general-music event footnote-event))
+ (types . (event footnote-event))
))
(GlissandoEvent
. ((description . "Start a glissando on this note.")
- (types . (general-music post-event glissando-event event))
+ (types . (post-event glissando-event event))
))
(GraceMusic
(start-callback . ,ly:grace-music::start-callback)
(length . ,ZERO-MOMENT)
(iterator-ctor . ,ly:grace-iterator::constructor)
- (types . (grace-music music-wrapper-music general-music))
+ (types . (grace-music music-wrapper-music))
))
(HarmonicEvent
. ((description . "Mark a note as harmonic.")
- (types . (general-music post-event event harmonic-event))
+ (types . (post-event event harmonic-event))
))
(HyphenEvent
. ((description . "A hyphen between lyric syllables.")
- (types . (general-music post-event hyphen-event event))
+ (types . (post-event hyphen-event event))
))
(KeyChangeEvent
Syntax: @code{\\key} @var{name} @var{scale}")
(to-relative-callback . ,(lambda (x p) p))
- (types . (general-music key-change-event event))
+ (types . (key-change-event event))
))
(LabelEvent
. ((description . "Place a bookmarking label.")
- (types . (general-music label-event event))
+ (types . (label-event event))
))
(LaissezVibrerEvent
. ((description . "Don't damp this chord.
Syntax: @var{note}@code{\\laissezVibrer}")
- (types . (general-music post-event event laissez-vibrer-event))
+ (types . (post-event event laissez-vibrer-event))
))
(LigatureEvent
. ((description . "Start or end a ligature.")
- (types . (general-music span-event ligature-event event))
+ (types . (span-event ligature-event event))
))
(LineBreakEvent
. ((description . "Allow, forbid or force a line break.")
- (types . (general-music line-break-event break-event event))
+ (types . (line-break-event break-event event))
))
(LyricCombineMusic
Syntax: @code{\\lyricsto} @var{voicename} @var{lyrics}")
(length . ,ZERO-MOMENT)
- (types . (general-music lyric-combine-music))
+ (types . (lyric-combine-music))
(iterator-ctor . ,ly:lyric-combine-music-iterator::constructor)
))
. ((description . "A lyric syllable. Must be entered in lyrics mode,
i.e., @code{\\lyrics @{ twinkle4 twinkle4 @} }.")
(iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
- (types . (general-music rhythmic-event lyric-event event))
+ (types . (rhythmic-event lyric-event event))
))
(MarkEvent
Syntax: @code{\\mark} @var{marker}
Example: @code{\\mark \"A\"}")
- (types . (general-music mark-event event))
+ (types . (mark-event event))
))
(MeasureCounterEvent
. ((description . "Used to signal the start and end of a measure count.")
- (types . (general-music measure-counter-event span-event event))
+ (types . (measure-counter-event span-event event))
))
(MultiMeasureRestEvent
. ((description . "Used internally by @code{MultiMeasureRestMusic}
to signal rests.")
(iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
- (types . (general-music event rhythmic-event
- multi-measure-rest-event))
+ (types . (event rhythmic-event multi-measure-rest-event))
))
(MultiMeasureRestMusic
Syntax: @code{R2.*4} for 4 measures in 3/4 time.")
(iterator-ctor . ,ly:sequential-iterator::constructor)
(elements-callback . ,mm-rest-child-list)
- (types . (general-music multi-measure-rest))
+ (types . (multi-measure-rest))
))
(MultiMeasureTextEvent
Syntax: @code{R-\\markup @{ \\roman \"bla\" @}}
Note the explicit font switch.")
- (types . (general-music post-event event multi-measure-text-event))
+ (types . (post-event event multi-measure-text-event))
))
(Music
. ((description . "Generic type for music expressions.")
- (types . (general-music))
+ (types . ())
))
(NoteEvent
For iteration inside of chords, @xref{EventChord}.")
(iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
- (types . (general-music event note-event rhythmic-event
- melodic-event))
+ (types . (event note-event rhythmic-event melodic-event))
))
(NoteGroupingEvent
. ((description . "Start or stop grouping brackets.")
- (types . (general-music post-event event note-grouping-event))
+ (types . (post-event event note-grouping-event))
))
(OttavaMusic
. ((description . "Start or stop an ottava bracket.")
(iterator-ctor . ,ly:sequential-iterator::constructor)
(elements-callback . ,make-ottava-set)
- (types . (general-music ottava-music))
+ (types . (ottava-music))
))
(OverrideProperty
Syntax: @code{\\override} [ @var{context} @code{.} ]
@var{object} @var{property} @code{=} @var{value}")
- (types . (general-music layout-instruction-event
- override-property-event))
+ (types . (layout-instruction-event override-property-event))
(iterator-ctor . ,ly:push-property-iterator::constructor)
(untransposable . #t)
))
(PageBreakEvent
. ((description . "Allow, forbid or force a page break.")
- (types . (general-music break-event page-break-event event))
+ (types . (break-event page-break-event event))
))
(PageTurnEvent
. ((description . "Allow, forbid or force a page turn.")
- (types . (general-music break-event page-turn-event event))
+ (types . (break-event page-turn-event event))
))
(PartCombineForceEvent
. ((description . "Override the part-combiner's strategy.")
- (types . (general-music part-combine-force-event event))
+ (types . (part-combine-force-event event))
))
(PartialSet
;; for the overall timing in spite of having a non-zero
;; duration field.
(length-callback . ,ly:music-sequence::cumulative-length-callback)
- (types . (general-music partial-set))
+ (types . (partial-set))
))
(PartCombineMusic
as separate voices.")
(length-callback . ,ly:music-sequence::maximum-length-callback)
(start-callback . ,ly:music-sequence::minimum-start-callback)
- (types . (general-music part-combine-music))
+ (types . (part-combine-music))
(iterator-ctor . ,ly:part-combine-iterator::constructor)
))
(PercentEvent
. ((description . "Used internally to signal percent repeats.")
- (types . (general-music event percent-event rhythmic-event))
+ (types . (event percent-event rhythmic-event))
))
(PercentRepeatedMusic
(iterator-ctor . ,ly:percent-repeat-iterator::constructor)
(start-callback . ,ly:repeated-music::first-start)
(length-callback . ,ly:repeated-music::unfolded-music-length)
- (types . (general-music repeated-music percent-repeated-music))
+ (types . (repeated-music percent-repeated-music))
))
(PesOrFlexaEvent
. ((description . "Within a ligature, mark the previous and the
following note to form a pes (if melody goes up) or a flexa (if melody
goes down).")
- (types . (general-music pes-or-flexa-event event))
+ (types . (pes-or-flexa-event event))
))
(PhrasingSlurEvent
Syntax: @var{note}@code{\\(} and @var{note}@code{\\)}")
(spanner-id . "")
- (types . (general-music post-event span-event event phrasing-slur-event))
+ (types . (post-event span-event event phrasing-slur-event))
))
(PostEvents
. ((description . "Set a context property.
Syntax: @code{\\set @var{context}.@var{prop} = @var{scheme-val}}")
- (types . (layout-instruction-event general-music))
+ (types . (layout-instruction-event))
(iterator-ctor . ,ly:property-iterator::constructor)
(untransposable . #t)
))
property. See @ref{PropertySet}.
Syntax: @code{\\unset @var{context}.@var{prop}}")
- (types . (layout-instruction-event general-music))
+ (types . (layout-instruction-event))
(iterator-ctor . ,ly:property-unset-iterator::constructor)
))
(iterator-ctor . ,ly:music-wrapper-iterator::constructor)
(length-callback . ,ly:music-wrapper::length-callback)
(start-callback . ,ly:music-wrapper::start-callback)
- (types . (general-music music-wrapper-music))
+ (types . (music-wrapper-music))
))
(RelativeOctaveCheck
. ((description . "Check if a pitch is in the correct octave.")
(to-relative-callback . ,ly:relative-octave-check::relative-callback)
- (types . (general-music relative-octave-check))
+ (types . (relative-octave-check))
))
(RelativeOctaveMusic
(iterator-ctor . ,ly:music-wrapper-iterator::constructor)
(length-callback . ,ly:music-wrapper::length-callback)
(start-callback . ,ly:music-wrapper::start-callback)
- (types . (music-wrapper-music general-music relative-octave-music))
+ (types . (music-wrapper-music relative-octave-music))
))
(RepeatedMusic
. ((description . "Repeat music in different ways.")
- (types . (general-music repeated-music))
+ (types . (repeated-music))
))
(RepeatSlashEvent
. ((description . "Used internally to signal beat repeats.")
- (types . (general-music event repeat-slash-event rhythmic-event))
+ (types . (event repeat-slash-event rhythmic-event))
))
(RepeatTieEvent
. ((description . "Ties for starting a second volta bracket.")
- (types . (general-music post-event event repeat-tie-event))
+ (types . (post-event event repeat-tie-event))
))
(RestEvent
Syntax: @code{r4} for a quarter rest.")
(iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
- (types . (general-music event rhythmic-event rest-event))
+ (types . (event rhythmic-event rest-event))
))
(RevertProperty
. ((description . "The opposite of @ref{OverrideProperty}: remove a
previously added property from a graphical object definition.")
- (types . (general-music layout-instruction-event))
+ (types . (layout-instruction-event))
(iterator-ctor . ,ly:pop-property-iterator::constructor)
))
(ScriptEvent
. ((description . "Add an articulation mark to a note.")
- (types . (general-music event))
+ (types . (event))
))
(SequentialMusic
(start-callback . ,ly:music-sequence::first-start-callback)
(elements-callback . ,(lambda (m) (ly:music-property m 'elements)))
(iterator-ctor . ,ly:sequential-iterator::constructor)
- (types . (general-music sequential-music))
+ (types . (sequential-music))
))
(SimultaneousMusic
(length-callback . ,ly:music-sequence::maximum-length-callback)
(to-relative-callback .
,ly:music-sequence::simultaneous-relative-callback)
- (types . (general-music simultaneous-music))
+ (types . (simultaneous-music))
))
(SkipEvent
Syntax: @code{s4} for a skip equivalent to a quarter rest.")
(iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
- (types . (general-music event rhythmic-event skip-event))
+ (types . (event rhythmic-event skip-event))
))
(SkipMusic
Syntax: @code{\\skip} @var{duration}")
(length-callback . ,ly:music-duration-length)
(iterator-ctor . ,ly:simple-music-iterator::constructor)
- (types . (general-music event skip-event))
+ (types . (event skip-event))
))
(SlurEvent
Syntax: @var{note}@code{(} and @var{note}@code{)}")
(spanner-id . "")
- (types . (general-music post-event span-event event slur-event))
+ (types . (post-event span-event event slur-event))
))
(SoloOneEvent
. ((description . "Print @q{Solo@tie{}1}.")
(part-combine-status . solo1)
- (types . (general-music event part-combine-event solo-one-event))
+ (types . (event part-combine-event solo-one-event))
))
(SoloTwoEvent
. ((description . "Print @q{Solo@tie{}2}.")
(part-combine-status . solo2)
- (types . (general-music event part-combine-event solo-two-event))
+ (types . (event part-combine-event solo-two-event))
))
(SostenutoEvent
. ((description . "Depress or release sostenuto pedal.")
- (types . (general-music post-event event pedal-event sostenuto-event))
+ (types . (post-event event pedal-event sostenuto-event))
))
(SpacingSectionEvent
. ((description . "Start a new spacing section.")
- (types . (general-music event spacing-section-event))))
+ (types . (event spacing-section-event))))
(SpanEvent
. ((description . "Event for anything that is started at a
different time than stopped.")
- (types . (general-music event))
+ (types . (event))
))
(StaffSpanEvent
. ((description . "Start or stop a staff symbol.")
- (types . (general-music event span-event staff-span-event))
+ (types . (event span-event staff-span-event))
))
(StringNumberEvent
. ((description . "Specify on which string to play this note.
Syntax: @code{\\@var{number}}")
- (types . (general-music post-event string-number-event event))
+ (types . (post-event string-number-event event))
))
(StrokeFingerEvent
. ((description . "Specify with which finger to pluck a string.
Syntax: @code{\\rightHandFinger @var{text}}")
- (types . (general-music post-event stroke-finger-event event))
+ (types . (post-event stroke-finger-event event))
))
(SustainEvent
. ((description . "Depress or release sustain pedal.")
- (types . (general-music post-event event pedal-event sustain-event))
+ (types . (post-event event pedal-event sustain-event))
))
(TempoChangeEvent
. ((description . "A metronome mark or tempo indication.")
- (types . (general-music event tempo-change-event))
+ (types . (event tempo-change-event))
))
(TextScriptEvent
. ((description . "Print text.")
- (types . (general-music post-event script-event text-script-event event))
+ (types . (post-event script-event text-script-event event))
))
(TextSpanEvent
. ((description . "Start a text spanner, for example, an
octavation.")
- (types . (general-music post-event span-event event text-span-event))
+ (types . (post-event span-event event text-span-event))
))
(TieEvent
. ((description . "A tie.
Syntax: @w{@var{note}@code{-~}}")
- (types . (general-music post-event tie-event event))
+ (types . (post-event tie-event event))
))
(TimeScaledMusic
(length-callback . ,ly:music-wrapper::length-callback)
(start-callback . ,ly:music-wrapper::start-callback)
(iterator-ctor . ,ly:tuplet-iterator::constructor)
- (types . (time-scaled-music music-wrapper-music general-music))
+ (types . (time-scaled-music music-wrapper-music))
))
(TimeSignatureMusic
. ((description . "Set a new time signature")
(iterator-ctor . ,ly:sequential-iterator::constructor)
(elements-callback . ,make-time-signature-set)
- (types . (general-music time-signature-music))
+ (types . (time-signature-music))
))
(TimeSignatureEvent
. ((description . "An event created when setting a new time signature")
- (types . (general-music event time-signature-event))
+ (types . (event time-signature-event))
))
(TransposedMusic
(length-callback . ,ly:music-wrapper::length-callback)
(to-relative-callback .
,ly:relative-octave-music::no-relative-callback)
- (types . (music-wrapper-music general-music transposed-music))
+ (types . (music-wrapper-music transposed-music))
))
(TremoloEvent
. ((description . "Unmeasured tremolo.")
- (types . (general-music post-event event tremolo-event))
+ (types . (post-event event tremolo-event))
))
(TremoloRepeatedMusic
(iterator-ctor . ,ly:chord-tremolo-iterator::constructor)
(start-callback . ,ly:repeated-music::first-start)
(length-callback . ,ly:repeated-music::unfolded-music-length)
- (types . (general-music repeated-music tremolo-repeated-music))
+ (types . (repeated-music tremolo-repeated-music))
))
(TremoloSpanEvent
. ((description . "Tremolo over two stems.")
- (types . (general-music event span-event tremolo-span-event))
+ (types . (event span-event tremolo-span-event))
))
(TrillSpanEvent
. ((description . "Start a trill spanner.")
- (types . (general-music post-event span-event event trill-span-event))
+ (types . (post-event span-event event trill-span-event))
))
(TupletSpanEvent
. ((description . "Used internally to signal where tuplet
brackets start and stop.")
- (types . (tuplet-span-event span-event event general-music post-event))
+ (types . (tuplet-span-event span-event event post-event))
))
(UnaCordaEvent
. ((description . "Depress or release una-corda pedal.")
- (types . (general-music post-event event pedal-event una-corda-event))
+ (types . (post-event event pedal-event una-corda-event))
))
(UnfoldedRepeatedMusic
(iterator-ctor . ,ly:sequential-iterator::constructor)
(elements-callback . ,make-unfolded-set)
(start-callback . ,ly:repeated-music::first-start)
- (types . (general-music repeated-music unfolded-repeated-music))
+ (types . (repeated-music unfolded-repeated-music))
(length-callback . ,ly:repeated-music::unfolded-music-length)
))
(UnisonoEvent
. ((description . "Print @q{a@tie{}2}.")
(part-combine-status . unisono)
- (types . (general-music event part-combine-event unisono-event))))
+ (types . (event part-combine-event unisono-event))))
(UnrelativableMusic
. ((description . "Music that cannot be converted from relative
(to-relative-callback . ,ly:relative-octave-music::no-relative-callback)
(iterator-ctor . ,ly:music-wrapper-iterator::constructor)
(length-callback . ,ly:music-wrapper::length-callback)
- (types . (music-wrapper-music general-music unrelativable-music))
+ (types . (music-wrapper-music unrelativable-music))
))
(VoiceSeparator
. ((description . "Separate polyphonic voices in simultaneous music.
Syntax: @code{\\\\}")
- (types . (separator general-music))
+ (types . (separator))
))
(VoltaRepeatedMusic
(elements-callback . ,make-volta-set)
(start-callback . ,ly:repeated-music::first-start)
(length-callback . ,ly:repeated-music::volta-music-length)
- (types . (general-music repeated-music volta-repeated-music))
+ (types . (repeated-music volta-repeated-music))
))
))
(music "emmentaler")
(brace "emmentaler")
(roman "Century Schoolbook L")
- (sans "sans-serif")
- (typewriter "monospace")
+ (sans "Nimbus Sans L")
+ (typewriter "Nimbus Mono L")
(factor 1))
(let ((n (make-font-tree-node 'font-encoding 'fetaMusic)))
(add-music-fonts n 'feta music brace feta-design-size-mapping factor)
(define-public (make-century-schoolbook-tree factor)
(make-pango-font-tree
"Century Schoolbook L"
- "sans-serif"
- "monospace"
+ "Nimbus Sans L"
+ "Nimbus Mono L"
factor))
(define-public all-text-font-encodings
line-thickness))
+(define (grob::objects-from-interface grob iface)
+ "For grob @var{grob} return the name and contents of all properties
+ within interface @var{iface} having type @code{ly:grob?} or
+ @code{ly:grob-array?}."
+ (let* ((iface-entry (hashq-ref (ly:all-grob-interfaces) iface))
+ (props (if iface-entry (last iface-entry) '()))
+ (pointer-props
+ (filter
+ (lambda (prop)
+ (let ((type (object-property prop 'backend-type?)))
+ (or (eq? type ly:grob?)
+ (eq? type ly:grob-array?))))
+ props)))
+ (if (null? pointer-props)
+ '()
+ (list iface
+ (map
+ (lambda (prop) (list prop (ly:grob-object grob prop)))
+ pointer-props)))))
+
+(define-public (grob::all-objects grob)
+ "Return a list of the names and contents of all properties having type
+ @code{ly:grob?} or @code{ly:grob-array?} for all interfaces supported by
+ grob @var{grob}."
+ (let loop ((ifaces (ly:grob-interfaces grob)) (result '()))
+ (if (null? ifaces)
+ (cons grob (list result))
+ (let ((entry (grob::objects-from-interface grob (car ifaces))))
+ (if (pair? entry)
+ (loop (cdr ifaces) (append result (list entry)))
+ (loop (cdr ifaces) result))))))
+
+(use-modules (ice-9 pretty-print))
+(define-public (grob::display-objects grob)
+ "Display all objects stored in properties of grob @var{grob}."
+ (pretty-print (grob::all-objects grob))
+ (newline))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; beam slope
(list (stencil-whiteout lp)
(stencil-whiteout rp))))
+(define-public (parentheses-item::y-extent grob) (ly:grob::stencil-height grob))
+
(define (parenthesize-elements grob . rest)
(let* ((refp (if (null? rest)
grob
(car rest)))
- (elts (ly:grob-object grob 'elements))
- (x-ext (ly:relative-group-extent elts refp X))
+ (elts (ly:grob-array->list (ly:grob-object grob 'elements)))
+ (get-friends
+ (lambda (g)
+ (let ((syms (ly:grob-property g 'parenthesis-friends '()))
+ (get-friend (lambda (s)
+ (let ((f (ly:grob-object g s)))
+ (cond
+ ((ly:grob? f) (list f))
+ ((ly:grob-array? f) (ly:grob-array->list f))
+ (else '()))))))
+ (apply append (map get-friend syms)))))
+ (friends (apply append elts (map get-friends elts)))
+ (x-ext (ly:relative-group-extent friends refp X))
(stencils (ly:grob-property grob 'stencils))
(lp (car stencils))
(rp (cadr stencils))
(ly:in-event-class? x 'note-event))
(filter f? (events vs)))
+; Return a list of note events which is sorted and stripped of
+; properties that we do not want to prevent combining parts.
+(define-method (comparable-note-events (vs <Voice-state>))
+ (define (note<? note1 note2)
+ (let ((p1 (ly:event-property note1 'pitch))
+ (p2 (ly:event-property note2 'pitch)))
+ (cond ((ly:pitch<? p1 p2) #t)
+ ((ly:pitch<? p2 p1) #f)
+ (else (ly:duration<? (ly:event-property note1 'duration)
+ (ly:event-property note2 'duration))))))
+ ;; TODO we probably should compare articulations too
+ (sort (map (lambda (x)
+ (ly:make-stream-event
+ (ly:make-event-class 'note-event)
+ (list (cons 'duration (ly:event-property x 'duration))
+ (cons 'pitch (ly:event-property x 'pitch)))))
+ (note-events vs))
+ note<?))
+
(define-method (rest-and-skip-events (vs <Voice-state>))
(define (f? x)
(or (ly:in-event-class? x 'rest-event)
(define (analyse-notes now-state)
(let* ((vs1 (car (voice-states now-state)))
(vs2 (cdr (voice-states now-state)))
- (notes1 (note-events vs1))
- (durs1 (sort (map (lambda (x) (ly:event-property x 'duration))
- notes1)
- ly:duration<?))
- (pitches1 (sort (map (lambda (x) (ly:event-property x 'pitch))
- notes1)
- ly:pitch<?))
- (notes2 (note-events vs2))
- (durs2 (sort (map (lambda (x) (ly:event-property x 'duration))
- notes2)
- ly:duration<?))
- (pitches2 (sort (map (lambda (x) (ly:event-property x 'pitch))
- notes2)
- ly:pitch<?)))
- (cond ((> (length notes1) 1) (put 'apart))
- ((> (length notes2) 1) (put 'apart))
- ((= 1 (+ (length notes2) (length notes1))) (put 'apart))
- ((and (= (length durs1) 1)
- (= (length durs2) 1)
- (not (equal? (car durs1) (car durs2))))
- (put 'apart))
- (else
- (if (and (= (length pitches1) (length pitches2)))
- (if (and (pair? pitches1)
- (pair? pitches2)
- ; Is the interval outside of chord-range?
- (let ((diff (ly:pitch-steps
- (ly:pitch-diff (car pitches1)
- (car pitches2)))))
- (or (< diff chord-min-diff)
- (> diff chord-max-diff)
- )))
- (put 'apart)
- ;; copy previous split state from spanner state
- (begin
- (if (previous-voice-state vs1)
- (copy-state-from voice-state-vec1
- (previous-voice-state vs1)))
- (if (previous-voice-state vs2)
- (copy-state-from voice-state-vec2
- (previous-voice-state vs2)))
- (if (and (null? (span-state vs1)) (null? (span-state vs2)))
- (put 'chords)))))))))
+ (notes1 (comparable-note-events vs1))
+ (notes2 (comparable-note-events vs2)))
+ (cond
+ ;; if neither part has notes, do nothing
+ ((and (not (pair? notes1)) (not (pair? notes2))))
+
+ ;; if one part has notes and the other does not
+ ((or (not (pair? notes1)) (not (pair? notes2))) (put 'apart))
+
+ ;; if either part has a chord
+ ((or (> (length notes1) 1)
+ (> (length notes2) 1))
+ (if (and (<= chord-min-diff 0) ; user requests combined unisons
+ (equal? notes1 notes2)) ; both parts have the same chord
+ (put 'chords)
+ (put 'apart)))
+
+ ;; if the durations are different
+ ;; TODO articulations too?
+ ((and (not (equal? (ly:event-property (car notes1) 'duration)
+ (ly:event-property (car notes2) 'duration))))
+ (put 'apart))
+
+ (else
+ ;; Is the interval outside of chord-range?
+ (if (let ((diff (ly:pitch-steps
+ (ly:pitch-diff
+ (ly:event-property (car notes1) 'pitch)
+ (ly:event-property (car notes2) 'pitch)))))
+ (or (< diff chord-min-diff)
+ (> diff chord-max-diff)
+ ))
+ (put 'apart)
+ ;; copy previous split state from spanner state
+ (begin
+ (if (previous-voice-state vs1)
+ (copy-state-from voice-state-vec1
+ (previous-voice-state vs1)))
+ (if (previous-voice-state vs2)
+ (copy-state-from voice-state-vec2
+ (previous-voice-state vs2)))
+ (if (and (null? (span-state vs1)) (null? (span-state vs2)))
+ (put 'chords))))))))
(if (< result-idx (vector-length result))
(let* ((now-state (vector-ref result result-idx))
)))
(if (or vs1 vs2)
- (let ((notes1 (if vs1 (note-events vs1) '()))
- (notes2 (if vs2 (note-events vs2) '())))
- ; Todo: What about a2 chords, e.g. string multi-stops?
- ; Sort and compare notes1 and notes2?
+ (let ((notes1 (if vs1 (comparable-note-events vs1) '()))
+ (notes2 (if vs2 (comparable-note-events vs2) '())))
(cond ((and (equal? (configuration now-state) 'chords)
- (= 1 (length notes1))
- (= 1 (length notes2))
- (equal? (ly:event-property (car notes1) 'pitch)
- (ly:event-property (car notes2) 'pitch)))
+ (pair? notes1)
+ (equal? notes1 notes2))
(set! (configuration now-state) 'unisono))
((synced? now-state)
--- /dev/null
+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
# the soft link for mf2pt1.mp is for recent mpost versions
# which no longer dump a .mem file
$(outdir)/%.pfb: %.mf $(outdir)/mf2pt1.mem $(outdir)/%.log
- $(DO_MF_DEP) TMP=`mktemp -d $(outdir)/pfbtemp.$*.XXXXXXXXX` \
- && ( cd $$TMP \
+ $(DO_MF_DEP) TMP_DIR=`mktemp -d $(outdir)/pfbtemp.$*.XXXXXXXXX` \
+ && ( cd $$TMP_DIR \
&& ln -s ../mf2pt1.mem . \
&& ln -s ../../mf2pt1.mp . \
&& MFINPUTS=$(abs-src-dir):..:: \
FONTFORGE=$(FONTFORGE) \
$(buildscript-dir)/mf2pt1 $(MF2PT1_OPTIONS) $< $(METAFONT_QUIET)) \
- && mv $$TMP/*pfb $(outdir); \
- rm -rf $$TMP
+ && mv $$TMP_DIR/*pfb $(outdir); \
+ rm -rf $$TMP_DIR
# since recent mpost versions no longer create a mem file, we create a dummy
# file to satisfy the dependency (which gets overwritten in case an older