]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' into translation
authorJean-Charles Malahieude <lilyfan@orange.fr>
Thu, 30 Apr 2015 18:04:11 +0000 (20:04 +0200)
committerJean-Charles Malahieude <lilyfan@orange.fr>
Thu, 30 Apr 2015 18:04:11 +0000 (20:04 +0200)
243 files changed:
Documentation/changes.tely
Documentation/css/lilypond-website.css
Documentation/learning/fundamental.itely
Documentation/learning/templates.itely
Documentation/notation/rhythms.itely
Documentation/pictures/old-unused-images/background-image.png [deleted file]
Documentation/pictures/old-unused-images/color1-active.png [deleted file]
Documentation/pictures/old-unused-images/color1-hover.png [deleted file]
Documentation/pictures/old-unused-images/color2-active.png [deleted file]
Documentation/pictures/old-unused-images/color2-hover.png [deleted file]
Documentation/pictures/old-unused-images/color3-active.png [deleted file]
Documentation/pictures/old-unused-images/color3-hover.png [deleted file]
Documentation/pictures/old-unused-images/color4-active.png [deleted file]
Documentation/pictures/old-unused-images/color4-hover.png [deleted file]
Documentation/pictures/old-unused-images/lily-home-nav-active.png [deleted file]
Documentation/pictures/old-unused-images/lily-home-nav-bg.png [deleted file]
Documentation/pictures/old-unused-images/lily-home-nav-hover.png [deleted file]
Documentation/pictures/old-unused-images/nav-active-2.png [deleted file]
Documentation/pictures/old-unused-images/nav-active.png [deleted file]
Documentation/pictures/old-unused-images/nav-bg-2.png [deleted file]
Documentation/pictures/old-unused-images/nav-bg.png [deleted file]
Documentation/pictures/old-unused-images/nav-hover-2.png [deleted file]
Documentation/pictures/old-unused-images/nav-hover.png [deleted file]
Documentation/pictures/old-unused-images/squiggle.jpg [deleted file]
Documentation/pictures/old-unused-images/summary-gradient.png [deleted file]
Documentation/snippets/conducting-signs,-measure-grouping-signs.ly
Documentation/snippets/extending-glissandi-across-repeats.ly
Documentation/snippets/forcing-a-clef-symbol-to-be-displayed.ly [new file with mode: 0644]
Documentation/snippets/keep-change-clefs-full-sized.ly [new file with mode: 0644]
Documentation/snippets/pitches.snippet-list
Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly [deleted file]
Documentation/snippets/repeats.snippet-list
Documentation/snippets/tweaks-and-overrides.snippet-list
Documentation/snippets/using-alternative-flag-styles.ly
Documentation/web/introduction.itexi
Documentation/web/news-front.itexi
Documentation/web/news.itexi
VERSION
aclocal.m4
config.make.in
configure.ac
flower/file-name.cc
input/regression/abc2ly/GNUmakefile
input/regression/ambitus-cue.ly
input/regression/display-lily-tests.ly
input/regression/midi/GNUmakefile
input/regression/parenthesize-notes-accidentals.ly [new file with mode: 0644]
input/regression/part-combine-strings.ly [new file with mode: 0644]
input/regression/satb-template-on-two-staves-with-verses.ly [new file with mode: 0644]
input/regression/satb-template-soprano-and-tenor-may-be-omitted.ly [new file with mode: 0644]
input/regression/satb-template-with-changed-instrument-names.ly [new file with mode: 0644]
input/regression/satb-template-with-men-women-and-descant.ly [new file with mode: 0644]
input/regression/scheme-text-spanner.ly
input/regression/staff-ledger-positions-dotted-notes.ly [new file with mode: 0644]
input/regression/stem-tremolo-style.ly [new file with mode: 0644]
lily/accidental-engraver.cc
lily/accidental-placement.cc
lily/align-interface.cc
lily/ambitus-engraver.cc
lily/auto-beam-engraver.cc
lily/axis-group-interface.cc
lily/bar-engraver.cc
lily/bar-number-engraver.cc
lily/beam-engraver.cc
lily/beam.cc
lily/break-align-engraver.cc
lily/break-alignment-interface.cc
lily/break-substitution.cc
lily/chord-name-engraver.cc
lily/clef-engraver.cc
lily/constrained-breaking.cc
lily/context-def.cc
lily/context-mod-scheme.cc
lily/context-property.cc
lily/context-scheme.cc
lily/context.cc
lily/cue-clef-engraver.cc
lily/directional-element-interface.cc
lily/dispatcher.cc
lily/dot-column.cc
lily/double-percent-repeat-engraver.cc
lily/drum-note-engraver.cc
lily/drum-note-performer.cc
lily/duration-scheme.cc
lily/dynamic-engraver.cc
lily/dynamic-performer.cc
lily/engraver-group.cc
lily/engraver.cc
lily/figured-bass-engraver.cc
lily/font-config-scheme.cc
lily/font-interface.cc
lily/font-select.cc
lily/general-scheme.cc
lily/glissando-engraver.cc
lily/grob-interface.cc
lily/grob-property.cc
lily/grob-scheme.cc
lily/grob.cc
lily/guile-init.cc
lily/include/lily-guile-macros.hh
lily/include/lily-guile.hh
lily/include/lily-proto.hh
lily/include/stem-tremolo.hh
lily/include/translator-dispatch-list.hh
lily/include/translator-group.hh
lily/include/translator.hh
lily/include/translator.icc
lily/instrument-name-engraver.cc
lily/key-engraver.cc
lily/lexer.ll
lily/ligature-engraver.cc
lily/lily-guile.cc
lily/lily-lexer.cc
lily/lily-parser-scheme.cc
lily/lily-parser.cc
lily/line-interface.cc
lily/line-spanner.cc
lily/lookup.cc
lily/ly-module.cc
lily/lyric-engraver.cc
lily/main.cc
lily/mark-engraver.cc
lily/measure-grouping-spanner.cc
lily/mensural-ligature.cc
lily/metronome-engraver.cc
lily/midi-item.cc
lily/module-scheme.cc
lily/multi-measure-rest-engraver.cc
lily/multi-measure-rest.cc
lily/music.cc
lily/new-fingering-engraver.cc
lily/note-collision.cc
lily/note-head.cc
lily/open-type-font-scheme.cc
lily/open-type-font.cc
lily/output-def-scheme.cc
lily/output-def.cc
lily/page-breaking.cc
lily/page-layout-problem.cc
lily/page-spacing.cc
lily/page-turn-engraver.cc
lily/page-turn-page-breaking.cc
lily/pango-font.cc
lily/pango-select.cc
lily/paper-book.cc
lily/paper-column-engraver.cc
lily/paper-column.cc
lily/paper-def.cc
lily/paper-outputter.cc
lily/paper-score.cc
lily/paper-system.cc
lily/parse-scm.cc
lily/parser.yy
lily/part-combine-engraver.cc
lily/part-combine-iterator.cc
lily/percent-repeat-engraver.cc
lily/pfb-scheme.cc
lily/piano-pedal-engraver.cc
lily/pitched-trill-engraver.cc
lily/prob-scheme.cc
lily/prob.cc
lily/profile.cc
lily/program-option-scheme.cc
lily/quote-iterator.cc
lily/repeat-acknowledge-engraver.cc
lily/score-performer.cc
lily/score-scheme.cc
lily/score.cc
lily/script-engraver.cc
lily/script-interface.cc
lily/self-alignment-interface.cc
lily/simple-closure.cc
lily/simple-spacer-scheme.cc
lily/simple-spacer.cc
lily/skyline.cc
lily/slur-configuration.cc
lily/slur-scoring.cc
lily/slur.cc
lily/smobs.cc
lily/source-file.cc
lily/spaceable-grob.cc
lily/spacing-determine-loose-columns.cc
lily/spanner.cc
lily/staff-performer.cc
lily/staff-spacing.cc
lily/staff-symbol.cc
lily/stem-tremolo.cc
lily/stem.cc
lily/stencil-expression.cc
lily/stencil-integral.cc
lily/stencil-interpret.cc
lily/stencil-scheme.cc
lily/stencil.cc
lily/stream-event-scheme.cc
lily/stream-event.cc
lily/system-start-delimiter-engraver.cc
lily/system-start-delimiter.cc
lily/system.cc
lily/tab-note-heads-engraver.cc
lily/text-interface.cc
lily/tie-formatting-problem.cc
lily/tie-specification.cc
lily/time-signature-engraver.cc
lily/translator-ctors.cc
lily/translator-dispatch-list.cc
lily/translator-group-ctors.cc
lily/translator-group.cc
lily/translator.cc
lily/ttf.cc
lily/tuplet-bracket.cc
lily/tuplet-number.cc
lily/tweak-engraver.cc
lily/vaticana-ligature-engraver.cc
lily/vaticana-ligature.cc
lily/volta-engraver.cc
lily/volta-repeat-iterator.cc
ly/Welcome-to-LilyPond-MacOS.ly
ly/Welcome_to_LilyPond.ly
ly/base-tkit.ly [new file with mode: 0644]
ly/engraver-init.ly
ly/init.ly
ly/lyrics-tkit.ly [new file with mode: 0644]
ly/music-functions-init.ly
ly/performer-init.ly
ly/piano-tkit.ly [new file with mode: 0644]
ly/satb.ly
ly/staff-tkit.ly [new file with mode: 0644]
ly/vocal-tkit.ly [new file with mode: 0644]
ly/voice-tkit.ly [new file with mode: 0644]
mf/GNUmakefile
po/da.po
po/lilypond.pot
python/GNUmakefile
scm/define-grob-properties.scm
scm/define-grobs.scm
scm/define-music-callbacks.scm
scm/define-music-display-methods.scm
scm/define-music-types.scm
scm/font.scm
scm/output-lib.scm
scm/part-combiner.scm
scripts/auxiliar/pfx2ttf-mono.fontforge [new file with mode: 0644]
stepmake/stepmake/metafont-rules.make

index 136a55df4035df79bdb3200ecf0d57da5ef9c881..6e4072c50ea178c1916ff0014ec73a6a4702f00c 100644 (file)
@@ -61,6 +61,19 @@ which scares away people.
 
 @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}.
index 0115fbd417aa59500bc3f812aada29bfed2bc14d..46723fa47f48969c8b60e45cc2b1d683ba4e9b44 100644 (file)
@@ -18,13 +18,13 @@ body {
   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 {
index 108d200ca02a6298bb783ea019c07a25ebc58437..6aa80af8d344a81390f7089d5ac02668cca462ac 100644 (file)
@@ -3014,11 +3014,11 @@ violin = \new Staff {
 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
 }
@@ -3026,9 +3026,9 @@ fthenp =_\markup {
 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-. |
   }
 }
 
@@ -3036,7 +3036,6 @@ violin = \relative c'' {
   {
     \violin
   }
-  \layout { ragged-right = ##t }
 }
 @end lilypond
 
@@ -3051,9 +3050,9 @@ the last line.
 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-. |
@@ -3062,9 +3061,9 @@ violin = \relative 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).
index cc35e50da7c4c7827b407d35f1e5b621df466b71..1fd7b7b4666dafc7834e626f22ffc42debe490e3 100644 (file)
@@ -106,11 +106,11 @@ parts:
 
 @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
   }
index f14e0dbd996297cd29f57386ff2113ed3ad59984..db4109af9c5d8f2e88e1f849a606e9c6e94fa75d 100644 (file)
@@ -2095,6 +2095,14 @@ units of @code{baseMoment}.  By default, @code{baseMoment} is one
 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 |
diff --git a/Documentation/pictures/old-unused-images/background-image.png b/Documentation/pictures/old-unused-images/background-image.png
deleted file mode 100644 (file)
index 202cf8b..0000000
Binary files a/Documentation/pictures/old-unused-images/background-image.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/color1-active.png b/Documentation/pictures/old-unused-images/color1-active.png
deleted file mode 100644 (file)
index 37b464a..0000000
Binary files a/Documentation/pictures/old-unused-images/color1-active.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/color1-hover.png b/Documentation/pictures/old-unused-images/color1-hover.png
deleted file mode 100644 (file)
index 23f29ce..0000000
Binary files a/Documentation/pictures/old-unused-images/color1-hover.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/color2-active.png b/Documentation/pictures/old-unused-images/color2-active.png
deleted file mode 100644 (file)
index 8f6ac57..0000000
Binary files a/Documentation/pictures/old-unused-images/color2-active.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/color2-hover.png b/Documentation/pictures/old-unused-images/color2-hover.png
deleted file mode 100644 (file)
index 3232bce..0000000
Binary files a/Documentation/pictures/old-unused-images/color2-hover.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/color3-active.png b/Documentation/pictures/old-unused-images/color3-active.png
deleted file mode 100644 (file)
index b2aed09..0000000
Binary files a/Documentation/pictures/old-unused-images/color3-active.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/color3-hover.png b/Documentation/pictures/old-unused-images/color3-hover.png
deleted file mode 100644 (file)
index b070274..0000000
Binary files a/Documentation/pictures/old-unused-images/color3-hover.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/color4-active.png b/Documentation/pictures/old-unused-images/color4-active.png
deleted file mode 100644 (file)
index 0daee7f..0000000
Binary files a/Documentation/pictures/old-unused-images/color4-active.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/color4-hover.png b/Documentation/pictures/old-unused-images/color4-hover.png
deleted file mode 100644 (file)
index a966248..0000000
Binary files a/Documentation/pictures/old-unused-images/color4-hover.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/lily-home-nav-active.png b/Documentation/pictures/old-unused-images/lily-home-nav-active.png
deleted file mode 100644 (file)
index f3fe2f2..0000000
Binary files a/Documentation/pictures/old-unused-images/lily-home-nav-active.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/lily-home-nav-bg.png b/Documentation/pictures/old-unused-images/lily-home-nav-bg.png
deleted file mode 100644 (file)
index 9a3e4e8..0000000
Binary files a/Documentation/pictures/old-unused-images/lily-home-nav-bg.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/lily-home-nav-hover.png b/Documentation/pictures/old-unused-images/lily-home-nav-hover.png
deleted file mode 100644 (file)
index aaf1c2e..0000000
Binary files a/Documentation/pictures/old-unused-images/lily-home-nav-hover.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/nav-active-2.png b/Documentation/pictures/old-unused-images/nav-active-2.png
deleted file mode 100644 (file)
index af41a69..0000000
Binary files a/Documentation/pictures/old-unused-images/nav-active-2.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/nav-active.png b/Documentation/pictures/old-unused-images/nav-active.png
deleted file mode 100644 (file)
index 2ef6477..0000000
Binary files a/Documentation/pictures/old-unused-images/nav-active.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/nav-bg-2.png b/Documentation/pictures/old-unused-images/nav-bg-2.png
deleted file mode 100644 (file)
index e1ce827..0000000
Binary files a/Documentation/pictures/old-unused-images/nav-bg-2.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/nav-bg.png b/Documentation/pictures/old-unused-images/nav-bg.png
deleted file mode 100644 (file)
index b893d07..0000000
Binary files a/Documentation/pictures/old-unused-images/nav-bg.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/nav-hover-2.png b/Documentation/pictures/old-unused-images/nav-hover-2.png
deleted file mode 100644 (file)
index 84c436b..0000000
Binary files a/Documentation/pictures/old-unused-images/nav-hover-2.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/nav-hover.png b/Documentation/pictures/old-unused-images/nav-hover.png
deleted file mode 100644 (file)
index 3213900..0000000
Binary files a/Documentation/pictures/old-unused-images/nav-hover.png and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/squiggle.jpg b/Documentation/pictures/old-unused-images/squiggle.jpg
deleted file mode 100644 (file)
index 68adf60..0000000
Binary files a/Documentation/pictures/old-unused-images/squiggle.jpg and /dev/null differ
diff --git a/Documentation/pictures/old-unused-images/summary-gradient.png b/Documentation/pictures/old-unused-images/summary-gradient.png
deleted file mode 100644 (file)
index bb72326..0000000
Binary files a/Documentation/pictures/old-unused-images/summary-gradient.png and /dev/null differ
index b0fc8eb5e776c35a37afced756949caaeb8e7393..514718f9bd6492de682430688fdb73bd49c4eeab 100644 (file)
@@ -12,7 +12,7 @@
   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
@@ -28,7 +28,7 @@ display contexts, measure grouping signs will be created.  Such signs
 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"
index 52ec92978198713a4e1bb06fc5346c16110bb2db..bd18a741f45f89dc3fdb9490b653bf56deb6f82f 100644 (file)
@@ -54,7 +54,7 @@ music =  \relative c' {
   }
   \alternative {
     { d1 }
-    { \repeatGliss c e1 }
+    { \repeatGliss c \once \omit StringNumber e1\2 }
   }
 }
 
diff --git a/Documentation/snippets/forcing-a-clef-symbol-to-be-displayed.ly b/Documentation/snippets/forcing-a-clef-symbol-to-be-displayed.ly
new file mode 100644 (file)
index 0000000..7f0dcb1
--- /dev/null
@@ -0,0 +1,32 @@
+%% 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
+}
diff --git a/Documentation/snippets/keep-change-clefs-full-sized.ly b/Documentation/snippets/keep-change-clefs-full-sized.ly
new file mode 100644 (file)
index 0000000..6d6ae87
--- /dev/null
@@ -0,0 +1,37 @@
+%% 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
+}
index 15750e435dbfe017c23c504b542ab61ac7acdfe3..fb072060bdb2c9d4af72dd31339b75576eef5dd5 100644 (file)
@@ -11,8 +11,10 @@ clefs-can-be-transposed-by-arbitrary-amounts.ly
 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
diff --git a/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly b/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly
deleted file mode 100644 (file)
index 7a4bce3..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-%% 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
-  }
-}
index 3b55be22a85c818a8d458590c6bf421500ffbb2c..d3fa46c992d25b0266a26c630f09713e82d5fddc 100644 (file)
@@ -8,7 +8,6 @@ numbering-groups-of-measures.ly
 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
index 723710de74d377e317ce5fdf1f989a4ed4f217b8..6ca05f41e5786db43c510acfc63ef269202f8a40 100644 (file)
@@ -52,6 +52,7 @@ how-to-change-fret-diagram-position.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
@@ -66,7 +67,6 @@ percent-repeat-count-visibility.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
index 319456cba1d3096cb01534ce6704955398f82f14..145eab583a8c162b38e9f855e112d9a689d09790 100644 (file)
@@ -12,7 +12,8 @@
   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"
@@ -23,16 +24,28 @@ testnotes = {
   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
+    }
+  }
 }
index df8f2a8b781441b3a1a84187827781e157d3a449..1c33b3b18a9be59f0e355905e3a27d2cd0eec661 100644 (file)
@@ -608,14 +608,18 @@ Some highlights:
 
 @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}
@@ -629,11 +633,12 @@ Joe Smeets created sheet music for the children's book @emph{Zing Mee}
 @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)},
index b8141daf0e6af3dd1a9bf51874acea811aa8ab7e..40424e2f7dc0be85fba093287176a3f39fc71d84 100644 (file)
@@ -9,10 +9,10 @@
 @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
index e7112a1656159847cdbed09be25a70c6a9469d4d..d64b7cee45b5ac98f7d99a476c0a91bcfbc0a3b4 100644 (file)
@@ -26,6 +26,30 @@ NOTE:
   * 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}
 
diff --git a/VERSION b/VERSION
index 2a4331999121179c55d1d214f658541fcc7e757a..314dc5aebbd1d21e0d94f38bcc42c6bdec712b35 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 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
index 74cf3bcb2c4030321bc796a313bdddd2e70805f9..7ed315124636ee063be84135d3c159e822781b61 100644 (file)
@@ -1128,6 +1128,8 @@ AC_DEFUN(STEPMAKE_PYTHON_DEVEL, [
        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)
 ])
 
 
index 9837fc3e49f7ec52000e44fbd2c525ddc7c91031..d5bf2b87b8a7d820cc6f98587e1c48e267e07b75 100644 (file)
@@ -14,6 +14,7 @@ package-depth = @package_depth@
 FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
 GUILE_CFLAGS = @GUILE_CFLAGS@
 PANGO_FT2_CFLAGS = @PANGO_FT2_CFLAGS@
+PYTHON_CFLAGS = @PYTHON_CFLAGS@
 
 CONFIG_CPPFLAGS = @CPPFLAGS@
 CONFIG_DEFINES = @DEFINES@
@@ -25,6 +26,7 @@ FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
 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)
@@ -91,6 +93,8 @@ vimdir = $(lilypond_datadir)/vim
 
 NCSB_SOURCE_FILES = @NCSB_SOURCE_FILES@
 NCSB_DIR = @NCSB_DIR@
+HELV_SOURCE_FILES = @HELV_SOURCE_FILES@
+COUR_SOURCE_FILES = @COUR_SOURCE_FILES@
 
 ################################################################
 ## PROGRAMS
index f7402372ef8fdbeaa2f8a21d1135adc49580615c..a403e35c18e41aabd9aa5a094721be0c28fc57a4 100644 (file)
@@ -32,9 +32,9 @@ AC_ARG_ENABLE(guile2,
                    [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=""])
 
@@ -61,7 +61,7 @@ AC_SUBST(LINK_GXX_STATICALLY)
 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
@@ -90,12 +90,12 @@ 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
@@ -108,6 +108,62 @@ else
   AC_MSG_RESULT(yes)
 fi
 
+AC_MSG_CHECKING([for Nimbus Sans L (Helvetica) PFB files])
+AC_SUBST(HELV_SOURCE_FILES)
+if test "$NCSB_DIR" != "" ;  then
+  for f in n019003l.pfb n019004l.pfb n019023l.pfb n019024l.pfb; do
+    if test ! -f "$NCSB_DIR/$f"; then
+      MISSING_HELV_SOURCE_FILES="$f $MISSING_HELV_SOURCE_FILES"
+    else
+      if test "`grep Cyrillic "$NCSB_DIR/$f"`" = ""; then
+        INCOMPLETE_HELV_SOURCE_FILES="$f $INCOMPLETE_HELV_SOURCE_FILES"
+      else
+        HELV_SOURCE_FILES="$NCSB_DIR/$f $HELV_SOURCE_FILES"
+      fi
+    fi
+  done
+fi
+if test "$NCSB_DIR" = "" -o "$MISSING_HELV_SOURCE_FILES" != "$INCOMPLETE_HELV_SOURCE_FILES"; then
+  AC_MSG_RESULT(no)
+  STEPMAKE_ADD_ENTRY(REQUIRED,International Nimbus Sans L fonts)
+  if test "$MISSING_HELV_SOURCE_FILES" != ""; then
+    STEPMAKE_ADD_ENTRY(REQUIRED,'(these files are missing: $MISSING_HELV_SOURCE_FILES)')
+  fi
+  if test "$INCOMPLETE_HELV_SOURCE_FILES" != ""; then
+    STEPMAKE_ADD_ENTRY(REQUIRED,'(these files do not contain Cyrillic characters: $INCOMPLETE_HELV_SOURCE_FILES)')
+  fi
+else
+  AC_MSG_RESULT(yes)
+fi
+
+AC_MSG_CHECKING([for Nimbus Mono L (Courier) PFB files])
+AC_SUBST(COUR_SOURCE_FILES)
+if test "$NCSB_DIR" != "" ;  then
+  for f in n022003l.pfb n022004l.pfb n022023l.pfb n022024l.pfb; do
+    if test ! -f "$NCSB_DIR/$f"; then
+      MISSING_COUR_SOURCE_FILES="$f $MISSING_COUR_SOURCE_FILES"
+    else
+      if test "`grep Cyrillic "$NCSB_DIR/$f"`" = ""; then
+        INCOMPLETE_COUR_SOURCE_FILES="$f $INCOMPLETE_COUR_SOURCE_FILES"
+      else
+        COUR_SOURCE_FILES="$NCSB_DIR/$f $COUR_SOURCE_FILES"
+      fi
+    fi
+  done
+fi
+if test "$NCSB_DIR" = "" -o "$MISSING_COUR_SOURCE_FILES" != "$INCOMPLETE_COUR_SOURCE_FILES"; then
+  AC_MSG_RESULT(no)
+  STEPMAKE_ADD_ENTRY(REQUIRED,International Nimbus Mono L fonts)
+  if test "$MISSING_COUR_SOURCE_FILES" != ""; then
+    STEPMAKE_ADD_ENTRY(REQUIRED,'(these files are missing: $MISSING_COUR_SOURCE_FILES)')
+  fi
+  if test "$INCOMPLETE_COUR_SOURCE_FILES" != ""; then
+    STEPMAKE_ADD_ENTRY(REQUIRED,'(these files do not contain Cyrillic characters: $INCOMPLETE_COUR_SOURCE_FILES)')
+  fi
+else
+  AC_MSG_RESULT(yes)
+fi
+
 AC_LANG([C++])
 
 STEPMAKE_PYTHON(REQUIRED, 2.4, 3.0)
index eaadadf3efc071f34ac0610d7cc5db3ef55beded..c65d8fc7ed8c9ecfdfaba536d450b3ec70c010de 100644 (file)
@@ -33,10 +33,6 @@ using namespace std;
 #include <sys/stat.h>
 #endif
 
-#ifdef __CYGWIN__
-#include <sys/cygwin.h>
-#endif
-
 #ifndef ROOTSEP
 #define ROOTSEP ':'
 #endif
@@ -49,21 +45,6 @@ using namespace std;
 #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
@@ -144,12 +125,6 @@ File_name::to_string () const
 
 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
index 7356f99cb32e91ed9b17af7f82a70e4189825a23..438deba2c869709069d188f3519fbdb249f8aa28 100644 (file)
@@ -5,8 +5,8 @@ LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc abc
 
 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
index 83b10e3ac73b6a09e475118dd21ac6df1a7762dc..bf6f6fc990bf7bf353b7947c666b91800a49142d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.19"
 
 \header {
   texidoc = "Ambitus for pieces beginning with @code{\\cueDuringWithClef}.
@@ -8,6 +8,9 @@ a cue is frequently in a different clef, so the
 @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.
 "
 }
 
@@ -21,7 +24,7 @@ on the main clef.
 
 \layout {
  \context {
-   \Voice
+   \Staff
    \consists "Ambitus_engraver"
  }
 }
index cbbebd6539fa0f9bd6acb0767c7a93e38f8aec97..6ff266c4efa8381846b7742712bef56bed289f1a 100644 (file)
@@ -237,7 +237,11 @@ stderr of this run."
 
 %% \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 } #]
index 682bf82db5b0864bbcf2117a078a39a29b9ca491..d6be6f62df2677fc2a182b594e75e9b236476ab0 100644 (file)
@@ -5,8 +5,8 @@ LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc midi
 
 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
 
diff --git a/input/regression/parenthesize-notes-accidentals.ly b/input/regression/parenthesize-notes-accidentals.ly
new file mode 100644 (file)
index 0000000..f1a15fb
--- /dev/null
@@ -0,0 +1,13 @@
+\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
+  }
+}
+
diff --git a/input/regression/part-combine-strings.ly b/input/regression/part-combine-strings.ly
new file mode 100644 (file)
index 0000000..2ab2c0d
--- /dev/null
@@ -0,0 +1,26 @@
+\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
+>>
diff --git a/input/regression/satb-template-on-two-staves-with-verses.ly b/input/regression/satb-template-on-two-staves-with-verses.ly
new file mode 100644 (file)
index 0000000..43055b7
--- /dev/null
@@ -0,0 +1,28 @@
+\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"
diff --git a/input/regression/satb-template-soprano-and-tenor-may-be-omitted.ly b/input/regression/satb-template-soprano-and-tenor-may-be-omitted.ly
new file mode 100644 (file)
index 0000000..cfce5ee
--- /dev/null
@@ -0,0 +1,19 @@
+\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"
diff --git a/input/regression/satb-template-with-changed-instrument-names.ly b/input/regression/satb-template-with-changed-instrument-names.ly
new file mode 100644 (file)
index 0000000..cea70c0
--- /dev/null
@@ -0,0 +1,38 @@
+\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"
diff --git a/input/regression/satb-template-with-men-women-and-descant.ly b/input/regression/satb-template-with-men-women-and-descant.ly
new file mode 100644 (file)
index 0000000..c8ff7d3
--- /dev/null
@@ -0,0 +1,34 @@
+\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"
index 6dc74454098841d5033a4c9a92ff1eef4482b9a2..2fc7949e2986c2fd3e92094042a6bb7fa11aa50a 100644 (file)
@@ -68,7 +68,7 @@ in scheme."
      (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))
          ))
      ))
 
diff --git a/input/regression/staff-ledger-positions-dotted-notes.ly b/input/regression/staff-ledger-positions-dotted-notes.ly
new file mode 100644 (file)
index 0000000..3237af9
--- /dev/null
@@ -0,0 +1,16 @@
+\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
+}
diff --git a/input/regression/stem-tremolo-style.ly b/input/regression/stem-tremolo-style.ly
new file mode 100644 (file)
index 0000000..f373d05
--- /dev/null
@@ -0,0 +1,56 @@
+\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
+}
index fcc9fcb97792643723097414cbe6cbdb600ba289..4bdf59735749ade5b5ae4740c44a09ad0c535560 100644 (file)
@@ -317,7 +317,7 @@ Accidental_engraver::make_standard_accidental (Stream_event * /* note */,
   */
   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);
     }
 
@@ -332,7 +332,7 @@ Accidental_engraver::make_standard_accidental (Stream_event * /* note */,
 
   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 ());
@@ -467,7 +467,8 @@ Accidental_engraver::acknowledge_rhythmic_head (Grob_info info)
           || 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")))
     {
index c8c14d4bd980ce54cceba08d4c3f56eee003c937..04883f03a956ecfe6ce5ae623c0f02bc190de3bd 100644 (file)
@@ -61,7 +61,7 @@ Accidental_placement::add_accidental (Grob *me, Grob *a, bool stagger, long cont
   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);
@@ -342,7 +342,7 @@ extract_heads_and_stems (vector<Accidental_placement_entry *> const &apes)
   for (vsize i = ret.size (); i--;)
     if (Grob *s = Rhythmic_head::get_stem (ret[i]))
       ret.push_back (s);
-  
+
   uniquify (ret);
   return ret;
 }
index d187326922ed0b8dede64c4d479f25c9faf2b68e..fffc64b1bb1a1796e95a7de8d6a113713ebec65f 100644 (file)
@@ -179,7 +179,7 @@ Align_interface::internal_get_minimum_translations (Grob *me,
       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);
     }
 
index 0a76267c7edb3c58c36afb2f56a7b611e0ca0fd7..fedf31e5d49e0a3a4649f5693b03af0affe7d98b 100644 (file)
@@ -136,7 +136,8 @@ void
 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");
       /*
@@ -173,11 +174,11 @@ Ambitus_engraver::finalize ()
                                             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);
 
index bdf5b8f491554d0be5f2688c71ebc379ef746729..beb8fce3902f5d49a89796286d70bc546ac7446a 100644 (file)
@@ -170,12 +170,11 @@ Auto_beam_engraver::listen_beam_forbid (Stream_event *ev)
 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
@@ -438,7 +437,7 @@ Auto_beam_engraver::acknowledge_stem (Grob_info info)
                        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);
index 946db34a8b4c0fc83f30b817784df8f112152d74..4056e25651f180eade8c74f9b20b4241f8569ac7 100644 (file)
@@ -705,10 +705,10 @@ valid_outside_staff_placement_directive (Grob *me)
 {
   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",
@@ -735,11 +735,11 @@ add_grobs_of_one_priority (Grob *me,
   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;
index b210ab768031388d45afa5cd8f16f317388eb400..397743b4b07b87d8fd4cf49f1384d49aa8ce15e4 100644 (file)
@@ -59,7 +59,7 @@ Bar_engraver::create_bar ()
     {
       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);
     }
 }
index eb4af480546e6c54456ca40cbdc0e03442b2bf3b..144076439c6e27fb787a6d50251cf3c2e7ea7ab0 100644 (file)
@@ -62,8 +62,10 @@ Bar_number_engraver::listen_alternative (Stream_event *ev)
   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)
     {
       /*
@@ -100,7 +102,7 @@ Bar_number_engraver::process_music ()
           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_)
                 {
index 4e4f991cb3dacdb0867c9ae5bcb975d28e34bca5..f19f7e604e69da3c9919b2bdc365402102ebd248 100644 (file)
@@ -308,7 +308,7 @@ Beam_engraver::acknowledge_stem (Grob_info info)
                         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);
 }
 
index 83b0c743f950d6e396a278b6a537f5f1560b8669..82cbb1e766f4d314a2bb222bccd0f008e3dad79b 100644 (file)
@@ -203,7 +203,8 @@ Beam::calc_direction (SCM smob)
              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;
@@ -256,7 +257,7 @@ position_with_maximal_common_beams (SCM left_beaming, SCM right_beaming,
       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++;
         }
 
@@ -961,7 +962,7 @@ Beam::calc_stem_shorten (SCM smob)
   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);
@@ -1003,7 +1004,7 @@ where_are_the_whole_beams (SCM beaming)
 
   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)));
     }
@@ -1139,8 +1140,8 @@ Beam::set_beaming (Grob *me, Beaming_pattern const *beaming)
         {
           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
index 6da5ba603e104c894063ed85dfec098e1e397e83..fe07cac0c8355eea8a6f9e13125f4d2612eeeebf 100644 (file)
@@ -136,7 +136,7 @@ Break_align_engraver::add_to_group (SCM align_name, Item *item)
   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);
index db0a74f59abd43b2def046874a2715e5c7a55093..bb7f02eda099cbce13e73a323ac4e3870b30fdcf 100644 (file)
@@ -58,7 +58,7 @@ Break_alignment_interface::ordered_elements (Grob *grob)
 
   SCM order = break_align_order (me);
 
-  if (order == SCM_BOOL_F)
+  if (scm_is_false (order))
     return elts;
 
   vector<Grob *> writable_elts (elts);
@@ -144,8 +144,8 @@ Break_alignment_interface::calc_positioning_done (SCM smob)
           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");
@@ -174,7 +174,7 @@ Break_alignment_interface::calc_positioning_done (SCM smob)
             }
         }
 
-      if (rsym == ly_symbol2scm ("left-edge"))
+      if (scm_is_eq (rsym, ly_symbol2scm ("left-edge")))
         edge_idx = next_idx;
 
       SCM entry = SCM_EOL;
@@ -210,11 +210,11 @@ Break_alignment_interface::calc_positioning_done (SCM smob)
 
       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
index c2a363cb7366a1da5b9c2b4f1fe71a72795a5503..2028226447841ca161048899d32d7aa6ea6035f1 100644 (file)
@@ -125,8 +125,8 @@ again:
       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.
@@ -477,7 +477,7 @@ substitute_object_alist (SCM alist, SCM dest)
       else
         val = do_break_substitution (val);
 
-      if (val != SCM_UNDEFINED)
+      if (!SCM_UNBNDP (val))
         {
           /*
             for ly:grob? properties, SCM_UNDEFINED could leak out
index 539efcdf4c0c0fdd8065998554c38444e113e0ca..10420273ab645bd8e8c56dd90fe937b72ddbd909 100644 (file)
@@ -99,7 +99,7 @@ Chord_name_engraver::process_music ()
               if (!Pitch::is_smob (p))
                 continue;
 
-              if (n->get_property ("bass") == SCM_BOOL_T)
+              if (to_boolean (n->get_property ("bass")))
                 bass = p;
               else
                 {
@@ -111,7 +111,7 @@ Chord_name_engraver::process_music ()
                     }
                   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))
index b6efa00c768a9af3d7f939f712a8038367a80005..ebeb71a7cbd912a733536afb879b772541078616 100644 (file)
@@ -156,17 +156,17 @@ Clef_engraver::inspect_clef_properties ()
   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_)
index e2d7081497543a0a3b49bf7f9a70ddb8140b857a..1a98775a96e929480e48cc83c749f7279093004f 100644 (file)
@@ -365,10 +365,10 @@ Constrained_breaking::Constrained_breaking (Paper_score *ps, vector<vsize> const
 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;
 }
index 534567de2c0d88c9c5d1ce551351800857d59c3f..10f31ae83079c71cfa6062abbb2c9b2a82fffda1 100644 (file)
@@ -117,7 +117,7 @@ void
 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;
@@ -130,27 +130,27 @@ Context_def::add_context_mod (SCM mod)
   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");
@@ -165,9 +165,9 @@ Context_def::get_accepted (SCM user_mod) const
     {
       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);
     }
 
@@ -188,7 +188,7 @@ Context_def::get_default_child (SCM user_mod) const
   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;
@@ -289,9 +289,9 @@ Context_def::get_translator_names (SCM user_mod) const
       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)))
index 4d6fef5c09d5ba0bb3256d23d437e391349f5ac3..493e151c1d93a944b49133a21eabad224e40047c 100644 (file)
@@ -47,7 +47,7 @@ LY_DEFINE (ly_make_context_mod, "ly:make-context-mod",
            "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 ();
index 62e04a27323a5b136194c0607954e2b53e35c197..59bcf9afc6764fdf1cf1cd81a97c98bcc2ec53d6 100644 (file)
@@ -321,24 +321,24 @@ apply_property_operations (Context *tg, SCM pre_init_ops)
       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));
     }
 }
index a3462354e07be6e76ed73b41bd6d04faee72d88c..d4bd77296c70a078247f75ea8f66f4af20b1ca46 100644 (file)
@@ -103,7 +103,7 @@ LY_DEFINE (ly_context_property, "ly:context-property",
 
   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!",
index caac314bf704bbfde3b49fc12efb64ed65da35ca..9dad38f269c623a9264966ebee9d1cd381ad0357 100644 (file)
@@ -34,7 +34,7 @@
 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_);
 }
 
@@ -181,7 +181,7 @@ Context::find_create_context (SCM n, const string &id, SCM operations)
   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;
@@ -248,7 +248,7 @@ Context::set_property_from_event (SCM sev)
         unset_property (sym);
         return;
       }
-          
+
       bool ok = true;
       ok = type_check_assignment (sym, val, ly_symbol2scm ("translation-type?"));
 
@@ -341,7 +341,7 @@ Context::path_to_acceptable_context (SCM name) const
   // 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);
@@ -514,7 +514,7 @@ Context::is_alias (SCM sym) const
   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
index 33cceff59c5018832a159f6142874583cd9770f0..383c9a1b1f7c33c2150a30c8e2e8fc6444d93408 100644 (file)
@@ -171,9 +171,9 @@ Cue_clef_engraver::inspect_clef_properties ()
   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))
index 5dee7ed04e8f8fbf6d7dfea12374ace4de5ccb36..eb342fe1ac1c89a01cbe50eeb734ce97444b2edb 100644 (file)
@@ -25,7 +25,7 @@ Direction
 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.");
index b268218f4719905b3f882e788bad22bcc4ef4f5f..efb3ca506c0d2bcf2d533daeaee75f25acdd5a75 100644 (file)
@@ -244,7 +244,7 @@ Dispatcher::remove_listener (Listener l, SCM ev_class)
 {
   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;
@@ -292,7 +292,7 @@ Dispatcher::register_as_listener (Dispatcher *disp)
   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;
index 853a7715a27cbf3742e11e86f5df566735728e14..1ec7baa05911c142250b71f3ed80931b939542a7 100644 (file)
@@ -217,8 +217,9 @@ Dot_column::calc_positioning_done (SCM smob)
 
       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);
     }
 
index 2569adbf142be9f46c52319e4f33dddfbf3bd13b..d85648293ece82b38ed4f8a327ff8d2492783be1 100644 (file)
@@ -73,7 +73,7 @@ Double_percent_repeat_engraver::process_music ()
                                         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
index 1721dae62fad0f452d7d1fecfb803c9c6b28fc4c..09a58fa24b873722f89bddc8310cc41ed529f1ef 100644 (file)
@@ -76,7 +76,7 @@ Drum_notes_engraver::process_music ()
 
       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))
@@ -85,7 +85,7 @@ Drum_notes_engraver::process_music ()
           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);
index 6c565cd8e050623b31ef925b408a1422058314d4..4b74f791cfaffbaaa10e3e234cdabb624c646b56 100644 (file)
@@ -55,7 +55,7 @@ Drum_note_performer::process_music ()
       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))
index 59a2fdcba8023daf886c75d11d7b25f8bf234681..55fbf382b23c9b0171ff90c7a5272a956832e35b 100644 (file)
@@ -67,7 +67,7 @@ LY_DEFINE (ly_make_duration, "ly:make-duration",
   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);
index 8be008f8fb4949f31fcb2d6c191298fbd3b8b84c..0bbe69f075c81cefd3ebd14711fe881229b3a159 100644 (file)
@@ -107,7 +107,7 @@ Dynamic_engraver::get_property_setting (Stream_event *evt,
                                         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;
 }
@@ -141,7 +141,7 @@ Dynamic_engraver::process_music ()
       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",
@@ -156,12 +156,13 @@ Dynamic_engraver::process_music ()
             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_
@@ -244,9 +245,9 @@ Dynamic_engraver::get_spanner_type (Stream_event *ev)
   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");
index 1ed800a03ab6b3efdf7c6872819458f5a1371b31..6a6f8b8cf9acefceb7235547568556133609388e 100644 (file)
@@ -87,7 +87,7 @@ Dynamic_performer::equalize_volume (Real volume)
         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))
index 3fc8cf2f85c11f7d324d3261cd3c722e900bca7e..50009bd53d7af0c19d3c28cc7ae2aa7041295013 100644 (file)
@@ -109,7 +109,7 @@ Engraver_group::acknowledge_grobs ()
       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));
index e2fbe860c092a44cf2e2b0f40a9174c4c2027711..fd352d836db951c14f13899691dd79eba2a7347e 100644 (file)
@@ -56,7 +56,7 @@ Engraver::make_grob_info (Grob *e, SCM cause)
     {
       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);
 
@@ -125,11 +125,11 @@ Engraver::internal_make_grob (SCM symbol,
   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);
@@ -138,8 +138,8 @@ Engraver::internal_make_grob (SCM symbol,
 #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;
@@ -174,7 +174,7 @@ Engraver::internal_make_spanner (SCM x, SCM cause, char const *name,
 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"
index 67e4d6072e17e89fba040a973157c052f861b9e4..00f571ed3a35a5c62ec2ac77337656dd1b1478e2 100644 (file)
@@ -433,7 +433,7 @@ Figured_bass_engraver::create_grobs ()
               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);
index a273bcea144d3d1ddee053fbe2a78d5c16e9810c..a2bc3ae5d0f7111df71e39ff11cbbb3b05a827ff 100644 (file)
@@ -120,7 +120,7 @@ LY_DEFINE (ly_font_config_get_font_file, "ly:font-config-get-font-file", 1, 0, 0
   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);
 
index 4e6f5aac050628bda6a512046c95ff733a28c182..8f1e2c3b5271b8cc48156041dd793c709bf5942b 100644 (file)
@@ -45,7 +45,7 @@ Font_interface::music_font_alist_chain (Grob *g)
 {
   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);
 }
@@ -55,7 +55,7 @@ Font_interface::text_font_alist_chain (Grob *g)
 {
   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);
 }
index a5957ba715dab54ce231423ab6a356c88187cc94..9950d1a7474f3d2ad09b995776cf39820ab510df 100644 (file)
@@ -40,7 +40,7 @@ get_font_by_design_size (Output_def *layout, Real requested,
     {
       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 ();
index 068fb27aad255427f4c6239bfa8c370242985a19..d5fe89024cd2fa7c0cce49968a74f665d8465795 100644 (file)
@@ -89,14 +89,14 @@ LY_DEFINE (ly_gulp_file, "ly:gulp-file",
 {
   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?",
@@ -128,10 +128,10 @@ LY_DEFINE (ly_assoc_get, "ly:assoc-get",
   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));
@@ -223,7 +223,7 @@ LY_DEFINE (ly_number_2_string, "ly:number->string",
 
   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))
@@ -239,7 +239,7 @@ LY_DEFINE (ly_number_2_string, "ly:number->string",
   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, (),
@@ -254,7 +254,7 @@ 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),
@@ -342,7 +342,7 @@ LY_DEFINE (ly_wide_char_2_utf_8, "ly:wide-char->utf-8",
     }
   *p = 0;
 
-  return scm_from_locale_string (buf);
+  return scm_from_utf8_string (buf);
 }
 
 LY_DEFINE (ly_effective_prefix, "ly:effective-prefix",
@@ -368,7 +368,7 @@ LY_DEFINE (ly_chain_assoc_get, "ly:chain-assoc-get",
         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));
@@ -381,7 +381,7 @@ LY_DEFINE (ly_chain_assoc_get, "ly:chain-assoc-get",
                          + 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",
@@ -471,7 +471,7 @@ LY_DEFINE (ly_truncate_list_x, "ly:truncate-list!",
 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))
     {
@@ -506,7 +506,7 @@ format_single_argument (SCM arg, int precision, bool escape = false)
     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));
     }
 
@@ -570,11 +570,11 @@ LY_DEFINE (ly_format, "ly:format",
               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));
 
             }
index 35ff94228a8912e0a35eb1cc984fcb7fc3a801f9..c7744d1f4b2db3288cbbb252f12ccd0e4b9d4824 100644 (file)
@@ -110,7 +110,7 @@ Glissando_engraver::acknowledge_note_column (Grob_info info)
     {
       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);
index d444d3d71dd1cdaf97fb3cd46dcbb79c63d5c0f1..ea9b81ad9f9dc666e79998901dead9b5f731e814 100644 (file)
@@ -37,7 +37,7 @@ SCM add_interface (char const *cxx_name,
     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);
@@ -48,7 +48,7 @@ SCM add_interface (char const *cxx_name,
 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.
@@ -63,7 +63,7 @@ check_interfaces_for_property (Grob const *me, SCM sym)
   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 ()));
@@ -71,7 +71,7 @@ check_interfaces_for_property (Grob const *me, SCM sym)
           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)
index 779f0e91cbcb4712deb96e765e5f4db4f8c4c506..1c755bf7b08ece8a52b194ffddcdcb881102e77d 100644 (file)
@@ -83,7 +83,7 @@ Grob::instrumented_set_property (SCM sym, SCM v,
                  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;
@@ -125,7 +125,7 @@ Grob::internal_set_value_on_alist (SCM *alist, SCM sym, SCM v)
       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);
@@ -143,7 +143,7 @@ Grob::internal_get_property_data (SCM sym) const
 #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_);
@@ -158,7 +158,7 @@ Grob::internal_get_property_data (SCM sym) const
       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
@@ -167,7 +167,7 @@ Grob::internal_get_property (SCM sym) const
   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 (),
@@ -252,11 +252,11 @@ Grob::try_callback_on_alist (SCM *alist, SCM sym, SCM proc)
     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
@@ -300,7 +300,7 @@ Grob::internal_get_object (SCM sym) const
 
   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)
@@ -326,7 +326,7 @@ Grob::is_live () const
 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
index 238a0af7518189024210bda07cc9ee70aa515c40..2a42439fb58a90b5a78c191a393994c5b8d88497 100644 (file)
@@ -94,11 +94,11 @@ LY_DEFINE (ly_grob_pure_property, "ly:grob-pure-property",
   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;
@@ -117,7 +117,7 @@ LY_DEFINE (ly_grob_pure_height, "ly:grob-pure-height",
   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));
@@ -135,11 +135,11 @@ LY_DEFINE (ly_grob_property, "ly:grob-property",
 
   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;
@@ -206,10 +206,10 @@ LY_DEFINE (ly_grob_alist_chain, "ly:grob-alist-chain",
 
   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;
     }
 
index 660a34d07243c7d5296cfcb73a3f9a9d51d9f7c1..435a6faff3a92447ad67c637678a89129f5a09dd 100644 (file)
@@ -75,17 +75,17 @@ Grob::Grob (SCM basicprops)
         }
     }
 
-  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));
@@ -818,6 +818,7 @@ ADD_INTERFACE (Grob,
                "meta "
                "minimum-X-extent "
                "minimum-Y-extent "
+               "parenthesis-friends "
                "pure-Y-offset-in-progress "
                "rotation "
                "skyline-horizontal-padding "
index 975cab0c2bb8b769c56ff8ea6e0d54269985a397..67ed72822ace306853e6b9ac6dd33a3867c1dc9a 100644 (file)
@@ -51,7 +51,7 @@ ly_init_ly_module (void *)
       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;
index 1196f1ec5dd683eef581b8f5654296b9c7a44f29..355bd58139b8474955b6f914846de20bdb875fb3 100644 (file)
 
 #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
@@ -48,7 +67,7 @@ typedef SCM (*scm_t_subr) (GUILE_ELLIPSIS);
 /* 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)
@@ -69,7 +88,7 @@ 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                                                                \
@@ -77,7 +96,7 @@ scm_or_str2symbol (SCM s)
     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
 
 /*
@@ -92,7 +111,7 @@ inline SCM ly_symbol2scm (char const *x) { return scm_from_locale_symbol ((x));
     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))); \
       }                                                                 \
index 38709a14c541b2d55a02b4c7e2c32de1a7a32f3f..b7cfabd675d9e9f435146b91ad35cc1671d33de7 100644 (file)
@@ -99,7 +99,7 @@ SCM ly_hash_table_keys (SCM tab);
 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)); }
 
index 6a69e371dbf74147521aa437837efbb0ae1d2053..a76022b434095ecf6c54f5f0f351aa4e860887c0 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "flower-proto.hh"
 
+class Acknowledge_information;
 class All_font_metrics;
 class Audio_column;
 class Audio_control_function_value_change;
@@ -172,7 +173,4 @@ class Timing_translator;
 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 */
index 55ce3248e70e3f1bcf88a9c7b9926910144fa668..2495bb695a8bb422b65521e4633c737c20beeacb 100644 (file)
@@ -34,7 +34,7 @@ public:
   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);
index ee109db6b22b2d8da7c0f120b2476d83ae3959c9..6c365d088effb2540559b99b2445849cc952e7b8 100644 (file)
 #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>
index c45e29de0ac2b989a80d7c0eadc726d57362f2a7..068a3bbcaed438dfc2037e76e6395968f9bfeb21 100644 (file)
@@ -30,12 +30,12 @@ typedef void (*Translator_group_void_method) (Translator_group *);
 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;
index d342d3363cbcfb03c1159c1d57eb894f287a85d7..d089f78d037239cb7a23f1006aa3874f0675be01 100644 (file)
 #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
@@ -61,22 +49,21 @@ typedef struct translator_listener_record
 } 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);                           \
   } \
@@ -120,6 +107,11 @@ enum Translator_precompute_index
 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_[];
@@ -172,6 +164,19 @@ protected:                      // should be private.
   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);
index 0362b5b6c5971e5a04458464507a70ec9168821f..9f4def39e08712c86975a0f3ea2234aff6d6c8bd 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/* -*- 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);
 
index 41c68a5a14c099f974d57db6054e92c8dfd51d63..f65c2958332f664eae2e091e4e4bc1ec25672f93 100644 (file)
@@ -89,8 +89,8 @@ Instrument_name_engraver::consider_start_spanner ()
   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 ();
index 9f77135ede686dd70be1161fa7a0a00d51bf805f..971f55317295e8a56387a6f508dc8a41f20cd96a 100644 (file)
@@ -82,7 +82,7 @@ Key_engraver::create_key (bool is_default)
       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;
@@ -90,7 +90,7 @@ Key_engraver::create_key (bool is_default)
             {
               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)))
                 {
@@ -140,8 +140,7 @@ Key_engraver::acknowledge_clef (Grob_info /* info */)
 void
 Key_engraver::acknowledge_bar_line (Grob_info /* info */)
 {
-  if (scm_is_pair (get_property ("keyAlterations")))
-    create_key (true);
+  create_key (true);
 }
 
 void
index 89c8695987af4ef8b71e2a18d74dc964e70738b0..775cbdde0f831fc359ccde97e9b87ca2f713db40 100644 (file)
@@ -30,9 +30,9 @@
 /*
   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.
@@ -119,7 +119,7 @@ SCM (* scm_parse_error_handler) (void *);
 %option debug
 %option yyclass="Lily_lexer"
 %option stack
-%option never-interactive 
+%option never-interactive
 %option warn
 
 %x chords
@@ -346,7 +346,7 @@ BOM_UTF8    \357\273\277
                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);
@@ -368,7 +368,7 @@ BOM_UTF8    \357\273\277
 <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
@@ -387,7 +387,7 @@ BOM_UTF8    \357\273\277
        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 ();
@@ -508,11 +508,11 @@ BOM_UTF8  \357\273\277
 <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);
        }
        \"      {
@@ -533,7 +533,7 @@ BOM_UTF8    \357\273\277
                return STRING;
        }
        \\      {
-                yylval = scm_cons (scm_from_locale_string (YYText ()),
+                yylval = scm_cons (scm_from_ascii_string (YYText ()),
                                    yylval);
        }
 }
@@ -809,7 +809,7 @@ BOM_UTF8    \357\273\277
 
 %%
 
-/* 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)
@@ -918,10 +918,10 @@ Lily_lexer::scan_escaped_word (const string &str)
                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);
@@ -938,10 +938,10 @@ Lily_lexer::scan_shorthand (const string &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);
@@ -985,7 +985,7 @@ Lily_lexer::scan_scm_id (SCM sid)
                                optional = SCM_CDR (cs);
                                cs = SCM_CAR (cs);
                        }
-                       
+
                        if (ly_is_procedure (cs))
                                push_extra_token (here_input (), EXPECT_SCM, cs);
                        else
@@ -1010,7 +1010,7 @@ Lily_lexer::scan_bare_word (const string &str)
                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))
@@ -1019,7 +1019,7 @@ Lily_lexer::scan_bare_word (const string &str)
                            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;
@@ -1100,7 +1100,7 @@ Lily_lexer::eval_scm (SCM readerdata, Input hi, char extra_token)
                                        if (!Input::is_smob (m->get_property ("origin")))
                                                m->set_spot (override_input (here_input ()));
                                }
-                                       
+
                                int token;
                                switch (extra_token) {
                                case '$':
@@ -1240,7 +1240,7 @@ Lily_lexer::YYText_utf8 ()
 
 /*
  urg, belong to string (_convert)
- and should be generalised 
+ and should be generalised
  */
 void
 strip_leading_white (string&s)
@@ -1256,8 +1256,8 @@ 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;
 
@@ -1280,7 +1280,7 @@ is_valid_version (string s)
          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;
@@ -1293,7 +1293,7 @@ is_valid_version (string s)
        }
   return true;
 }
-       
+
 
 /*
   substitute _
index 4fde7110559cf570ee823dc37e021dcbfc0324aa..b647e02edddf16fec3772f1ede8e2e45ea27ac94 100644 (file)
@@ -203,7 +203,7 @@ Ligature_engraver::acknowledge_ligature_head (Grob_info info)
   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);
     }
 }
index 6896d43d7c2c9ed269d4fe6ff95d9bf5b2a7a686..6f7bf37f709f072594426b884827e0e2cd9b2515 100644 (file)
@@ -144,7 +144,7 @@ ly_string2scm (string const &str)
 char *
 ly_scm2str0 (SCM str)
 {
-  return scm_to_locale_string (str);
+  return scm_to_utf8_string (str);
 }
 
 /*
@@ -401,13 +401,13 @@ type_check_assignment (SCM sym, SCM val, SCM type_symbol)
 {
 
   // 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 (),
@@ -429,16 +429,16 @@ type_check_assignment (SCM sym, SCM val, SCM type_symbol)
 
     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),
@@ -564,7 +564,7 @@ robust_scm2string (SCM k, const string &s)
 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;
 }
@@ -572,7 +572,7 @@ robust_scm2int (SCM k, int 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)
index 4ddd8643252585b2c5e032e20f1e1455a73a3c44..3bb7921b2b89d9d5356ec8e4c80edb0f8d177f20 100644 (file)
@@ -193,7 +193,7 @@ Lily_lexer::keyword_list () const
   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);
 
@@ -209,7 +209,7 @@ Lily_lexer::lookup_identifier_symbol (SCM sym)
   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);
     }
 
@@ -281,7 +281,7 @@ Lily_lexer::set_identifier (SCM path, SCM val)
       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);
index 8aedecbb0f570bcd6dd9bc3b2f0408f888091f09..806cc62fd61cfa0facaefe1b8f8599d05b4cdb22 100644 (file)
@@ -50,8 +50,8 @@ LY_DEFINE (ly_parse_file, "ly:parse-file",
 
   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_ = "";
     }
@@ -190,7 +190,7 @@ LY_DEFINE (ly_parser_lookup, "ly:parser-lookup",
   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;
index 35e030951043bd2c4218d2c5c96b15ea5ad2858e..2d006f8d788894fe0c8b4407a16279d18c78a757 100644 (file)
@@ -242,7 +242,7 @@ Output_def *
 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);
index 30b1216f808558f8549329e45bcdf6a594d5980f..056587a1d9863f3049a207d66ff4d0cee2b13e8e 100644 (file)
@@ -200,20 +200,21 @@ Line_interface::line (Grob *me, Offset from, Offset to)
                * 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);
 
index 5184d396a6ce84745599032c0cebdb4db8e86276..9b0e2bf33b7c587b98d8789432a9170da18003aa 100644 (file)
@@ -64,7 +64,7 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir)
   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);
@@ -78,7 +78,7 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir)
       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);
@@ -246,7 +246,7 @@ Line_spanner::calc_left_bound_info_and_text (SCM smob)
   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);
index 9bef343fedd5625714c1e6846ef1b7ee64a41c1d..6bd55bbc7d3826ced290d51bb8f0ff537e4a54c9 100644 (file)
@@ -121,7 +121,7 @@ Lookup::horizontal_line (Interval w, Real th)
 Stencil
 Lookup::blank (Box b)
 {
-  return Stencil (b, scm_from_locale_string (""));
+  return Stencil (b, scm_string (SCM_EOL));
 }
 
 Stencil
index 2b91e8583ec8b81633a2814c8ebd7a1c5b918ba4..3a3f39450c84951ed494376fbdaca901daee7da2 100644 (file)
@@ -100,7 +100,7 @@ entry_to_alist (void * /* closure */,
                 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;
index 56ce20dadac66a7ef4b223dd7b6b066e7475bbe6..0d3ea00dee27448243201e2cb2fa6686e2ebc2ab 100644 (file)
@@ -70,7 +70,7 @@ Lyric_engraver::process_music ()
     {
       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",
index 808274c6e843c5959853a2d032279631690b4196..69af225c7651f4c117b34b050abcea564aa1a1d2 100644 (file)
@@ -480,8 +480,8 @@ main_with_guile (void *, int, char **)
    //  " \"" + 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
 
index 6eb7ee321de0054f6838d79f1725b81d4e229f6c..52a68359534fced1677bf1088d46d763ff7af96b 100644 (file)
@@ -140,8 +140,8 @@ Mark_engraver::process_music ()
           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++;
index ab1618a37d2f467436ddba60f474329a6d890d74..050cc465f6dc7b55e03a1db1b88cde74870ed577 100644 (file)
@@ -48,9 +48,9 @@ Measure_grouping::print (SCM grob)
   /*
     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);
index 036ce027af733d9e8e8f33d6f572ef1a5e4f87b1..42f5270cc53ce67573ac83d03647d5a1c16a0331 100644 (file)
@@ -117,7 +117,7 @@ Stencil
 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");
index 841ae6df948037860786017fd85c8f4be13aa8b9..279f8f721cef5e99618f8792f0933de2e46c1638 100644 (file)
@@ -71,8 +71,7 @@ Metronome_mark_engraver::listen_tempo_change (Stream_event *ev)
 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
@@ -81,8 +80,8 @@ Metronome_mark_engraver::acknowledge_break_aligned (Grob_info info)
   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_
index b19527f5bfce7d05af94564d7f37fc8a8fe48e53..d85161676cc3943e42a669b56d88ba2e187c80c4 100644 (file)
@@ -86,7 +86,7 @@ Midi_instrument::to_string () const
 
   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
index 67f642ec08dbcfd41adc007a0c36cba92846aea7..f926c44c0265e4992efb92a63b7f8886fe91d8c0 100644 (file)
@@ -34,7 +34,7 @@ module_define_closure_func (void *closure,
                             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;
 }
@@ -92,11 +92,11 @@ LY_DEFINE (ly_modules_lookup, "ly:modules-lookup",
     {
       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;
 }
index f8a541cf6f1c6e99698f2fa82fb06a6fa255499e..045359f7e948e9715e9152f6e39df7896ac2fdf1 100644 (file)
@@ -132,7 +132,8 @@ Multi_measure_rest_engraver::process_music ()
               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);
@@ -231,7 +232,7 @@ Multi_measure_rest_engraver::start_translation_timestep ()
       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;
index e13d5bf17a33e799f8195879362d9efe3567b8f0..0321082a57dee37a98cb0cf1d540ddaef1c4ff32 100644 (file)
@@ -222,7 +222,7 @@ Multi_measure_rest::symbol_stencil (Grob *me, Real space)
 
   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);
index 81f4a3d67f18e43b0ffb6038c38ea6c5a3556e33..6d8c9a281e480a70d010b3d75498206b6d5a7e5d 100644 (file)
@@ -41,7 +41,7 @@ Music::internal_is_music_type (SCM k) const
 {
   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)
@@ -211,21 +211,21 @@ transpose_mutable (SCM alist, Pitch delta)
         {
           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 ());
 
index 55ff41ed4fea519165cd4c19c4d49362427d2f74..bcb7766a4cffeb685615f4fce86370b20034701b 100644 (file)
@@ -119,7 +119,7 @@ New_fingering_engraver::acknowledge_rhythmic_head (Grob_info inf)
           // 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);
@@ -230,10 +230,10 @@ New_fingering_engraver::position_scripts (SCM orientations,
 
   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)
     {
index 728f64dfaef591a41d8006099253404bc2d2e60d..6f205e3f22153dd4763d15e95247d93111566e73 100644 (file)
@@ -209,8 +209,10 @@ check_meshing_chords (Grob *me,
   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));
index 89c0047c0f4f30ce0dfc45da774ca75e3d488fca..3c6dc827631566aa25e3ed4e872d2d36bd61a4fd 100644 (file)
@@ -207,6 +207,7 @@ ADD_INTERFACE (Note_head,
                "duration-log "
                "note-names "
                "accidental-grob "
+               "ignore-ambitus "
                "glyph-name "
                "stem-attachment "
                "style "
index bba695ba00c147c5412cfd3934f877f7322501c2..ed45d86b192a9cc5c7d05533b550da2f052175cd 100644 (file)
@@ -70,7 +70,7 @@ LY_DEFINE (ly_otf_font_table_data, "ly:otf-font-table-data", 2, 0, 0,
 
   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,
index c6ca27def33d1fcbcae0e9e9204db5379c290ff1..255f7caa0d1431e88e1c18eddb2c52284bbebca8 100644 (file)
@@ -77,7 +77,11 @@ load_scheme_table (char const *tag_str, FT_Face face)
       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;
@@ -158,7 +162,7 @@ Open_type_font::attachment_point (const string &glyph_name) const
   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;
@@ -192,7 +196,7 @@ Open_type_font::get_indexed_char_dimensions (size_t signed_idx) const
       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));
 
@@ -337,7 +341,7 @@ Open_type_font::glyph_list () const
         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);
     }
 
index 0b85c133a8cf6cd32b1522fd7e590592ab7e0dd6..3c4ee413e7cc1a099b9f0501b5d99e2449c00ed4 100644 (file)
@@ -36,9 +36,9 @@ LY_DEFINE (ly_output_def_lookup, "ly:output-def-lookup",
   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;
@@ -187,7 +187,7 @@ LY_DEFINE (ly_paper_fonts, "ly:paper-fonts",
   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)));
 
index b6a83212c162baef798e76f89bbd1c1868642045..af407fb70ac08465f87757fde59b59b2936db0de 100644 (file)
@@ -114,7 +114,7 @@ SCM
 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_)
@@ -160,9 +160,9 @@ Output_def::normalize ()
                           ? 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;
@@ -183,12 +183,12 @@ Output_def::normalize ()
   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;
@@ -196,10 +196,10 @@ Output_def::normalize ()
   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;
@@ -213,7 +213,7 @@ Output_def::normalize ()
       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;
         }
index 768cb79cc2150a88f81acdd04e7c09e719a9d64b..b23cd4637b04684c3b591762df9368593aeeccf8 100644 (file)
@@ -594,7 +594,7 @@ Page_breaking::make_pages (vector<vsize> lines_per_page, SCM systems)
   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.
@@ -1133,7 +1133,7 @@ Page_breaking::min_page_count (vsize configuration, vsize first_page_num)
 
       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 ();
@@ -1332,7 +1332,7 @@ Page_breaking::space_systems_with_fixed_number_per_page (vsize configuration,
           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;
         }
 
@@ -1374,7 +1374,8 @@ Page_breaking::pack_systems_on_least_pages (vsize configuration, vsize first_pag
       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);
@@ -1498,7 +1499,8 @@ Page_breaking::space_systems_on_2_pages (vsize configuration, vsize first_page_n
   /* 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 ());
index 426299f0ad08001f480890a5081de8a8e6bd8b8e..6fe02c8bad04b73080e1f6a123f7bbe534a6b321 100644 (file)
@@ -58,7 +58,7 @@ Page_layout_problem::get_footnote_grobs (SCM lines)
       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);
index af7546f6717cb567245d76405c16fb765e529b0a..97c68a5e29ebae8d1ca48151568843940ea0d8b6 100644 (file)
@@ -388,7 +388,8 @@ Page_spacer::calc_subproblem (vsize page, vsize line)
         }
 
       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_);
index 22d26371a0e3c2e6d2afc38e027f5264c48a9c8c..c658c0c94bbd4241c9aa8e9054cc2ac48f7415dc 100644 (file)
@@ -66,7 +66,7 @@ public:
     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])
@@ -229,9 +229,9 @@ Page_turn_engraver::stop_translation_timestep ()
   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;
     }
 
@@ -265,9 +265,10 @@ Page_turn_engraver::stop_translation_timestep ()
 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;
 }
index e8f43b69469e4c4ad9a5e39511dd3ef3e0fd9387..09545020c482ca4277de5b888e96c6f31f1df3bc 100644 (file)
@@ -138,7 +138,8 @@ Page_turn_page_breaking::calc_subproblem (vsize ending_breakpoint)
   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_)
index 4212e213928d14b3c86f9b82650492144c56b898..fcdf958cef2ff3c5c1737c33765aa2de1e60d574 100644 (file)
@@ -290,7 +290,7 @@ Pango_font::pango_item_string_stencil (PangoGlyphItem const *glyph_item) const
           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;
@@ -440,8 +440,8 @@ Pango_font::text_stencil (Output_def * /* state */,
         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;
     }
 
index a0cf0aaee3e8210ccb0155dfcccb6b2d385d72e5..8091e466eebf379681ab767df4e39ae3852d0c78 100644 (file)
@@ -80,10 +80,10 @@ PangoStyle
 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;
@@ -93,7 +93,7 @@ PangoVariant
 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;
 }
@@ -102,15 +102,15 @@ PangoWeight
 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;
index 382577146fe1321f75cf765b1eaceebcad332865..7dce3a9507e7d48badcd24bca281f1f5578359ec 100644 (file)
@@ -139,7 +139,7 @@ Paper_book::output_aux (SCM output_channel,
     }
   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));
@@ -165,7 +165,7 @@ Paper_book::output (SCM output_channel)
      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"));
 
@@ -188,7 +188,7 @@ Paper_book::output (SCM output_channel)
       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,
@@ -207,7 +207,7 @@ Paper_book::output (SCM output_channel)
       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,
@@ -444,7 +444,7 @@ Paper_book::get_system_specs ()
       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)))
@@ -560,7 +560,7 @@ Paper_book::get_system_specs ()
 SCM
 Paper_book::systems ()
 {
-  if (systems_ != SCM_BOOL_F)
+  if (scm_is_true (systems_))
     return systems_;
 
   systems_ = SCM_EOL;
@@ -610,9 +610,9 @@ Paper_book::systems ()
             {
               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));
             }
         }
@@ -624,7 +624,7 @@ Paper_book::systems ()
 SCM
 Paper_book::pages ()
 {
-  if (SCM_BOOL_F != pages_)
+  if (scm_is_true (pages_))
     return pages_;
 
   pages_ = SCM_EOL;
@@ -653,7 +653,7 @@ Paper_book::pages ()
         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))
index 68c4882904f3cd78c09a63351adfa91e4114dce3..a2d046b9fb16bbf3463d937a31de94639e4a182e 100644 (file)
@@ -259,7 +259,8 @@ Paper_column_engraver::stop_translation_timestep ()
       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?"));
         }
index 4e1d68f5f8cb7c2c5bf97ef1976393676d86b6ca..155e37bdec40d1afa45c35d94d2497c7ac9cbecc 100644 (file)
@@ -198,11 +198,11 @@ Paper_column::break_align_width (Grob *me, SCM align_syms)
   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
index f997c9905d086f322650bcad6864c51a0c3859ee..3d473f202de9818bb54e48fb5c06bd960033d8ef 100644 (file)
@@ -34,7 +34,7 @@ SCM
 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);
@@ -46,7 +46,7 @@ SCM
 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);
index 5ba03e95c78ee2e9a26477d5e30513f62ce038f5..269e1e294c1ceeb18a5edc69205deb06788d4cff 100644 (file)
@@ -118,7 +118,7 @@ Paper_outputter::output_stencil (Stencil stil)
 void
 Paper_outputter::close ()
 {
-  if (scm_port_p (file_) == SCM_BOOL_T)
+  if (ly_is_port (file_))
     {
       scm_close_port (file_);
       /*
index af6622a9f3b37a7d4742f00bc523c4104968d971..0cecb7951170d53e022523cdbdb3876493741f79 100644 (file)
@@ -149,7 +149,7 @@ Paper_score::layout () const
 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);
index c0b70121fa84dc89d59b199fb06f39ffecbbfb94..b67eb0123b1154dadc5ab2e7a6c92ea81a8d7758 100644 (file)
@@ -46,13 +46,13 @@ get_footnotes (SCM expr)
 
   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;
@@ -60,7 +60,7 @@ get_footnotes (SCM expr)
       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);
@@ -68,10 +68,10 @@ get_footnotes (SCM expr)
         }
       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;
index d18afa9d816219740e3de9d63930cbbbe330bc14..ec0c1572f07aa51e02c96f9ce2a8cc8fc4c10f88 100644 (file)
@@ -92,7 +92,7 @@ internal_ly_eval_scm (Parse_start *ps)
   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));
index 8a050f0ef938ee091a29fcb455d62caa90eb0d6f..9630ff4837910d052fd101692654cea2656c7cd7 100644 (file)
@@ -451,11 +451,11 @@ toplevel_expression:
                } 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);
@@ -466,11 +466,11 @@ toplevel_expression:
                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);
@@ -835,11 +835,11 @@ book_body:
                } 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);
@@ -916,11 +916,11 @@ bookpart_body:
                } 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);
@@ -986,7 +986,7 @@ score_items:
        {
                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;
@@ -1052,7 +1052,7 @@ paper_block:
        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 ();
@@ -2227,7 +2227,7 @@ lyric_mode_music:
 
 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);
                }
@@ -2243,7 +2243,7 @@ mode_changed_music:
                 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", @$, $$);
                }
@@ -3002,25 +3002,25 @@ fingering:
 
 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");
        }
        ;
 
@@ -3751,7 +3751,7 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid)
 SCM
 get_next_unique_context_id ()
 {
-       return scm_from_locale_string ("$uniqueContextId");
+       return scm_from_ascii_string ("$uniqueContextId");
 }
 
 
@@ -3761,7 +3761,7 @@ get_next_unique_lyrics_context_id ()
        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
index 54ad1797a44a6c54d2ccf1f03e37f19a1879d5f4..eaae218c1b17a1700a10a394960b1000c1abffac 100644 (file)
@@ -81,11 +81,11 @@ Part_combine_engraver::create_item (Stream_event *ev)
 {
   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))
index 2428d4a70fb41f26bfcbce5cd0e8dcb07c1a818f..4d1baec7568b3d24939dac9c7bdac59b5467ad00 100644 (file)
@@ -65,11 +65,6 @@ private:
   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_;
@@ -146,11 +141,6 @@ Part_combine_iterator::Part_combine_iterator ()
   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;
@@ -369,17 +359,6 @@ Part_combine_iterator::construct_children ()
 {
   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 ();
 
@@ -402,44 +381,6 @@ Part_combine_iterator::construct_children ()
   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);
@@ -490,30 +431,30 @@ Part_combine_iterator::process (Moment m)
 
       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))
         {
index 004548b2e9da2c3c474e3d15038b57541522225a..03bd86b9cf705a3553baa9fed787dc8b9430d1be 100644 (file)
@@ -122,7 +122,7 @@ Percent_repeat_engraver::process_music ()
       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",
index f8a6c1278f38ab7a530ef0d36533c1739401f889..4a1351547230abd68d06c72ad882778c09be4f88 100644 (file)
@@ -20,7 +20,7 @@ LY_DEFINE (ly_pfb_2_pfa, "ly:pfb->pfa",
   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);
@@ -41,7 +41,7 @@ LY_DEFINE (ly_otf_2_cff, "ly:otf->cff",
   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);
index 02c8dff8691e9487fc8eb9ffc740ece512013ad1..1cad3323be1c871181b9a391282081adb29c84af 100644 (file)
@@ -166,9 +166,9 @@ init_pedal_types ()
         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 ());
@@ -251,11 +251,11 @@ Piano_pedal_engraver::process_music ()
 
           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);
index b30d984edca68b17d5de89ca8f190b714f30b357..4f4fad23254966520f1fd325126d11c0c56211b2 100644 (file)
@@ -106,7 +106,7 @@ Pitched_trill_engraver::make_trill (Stream_event *ev)
   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
@@ -116,9 +116,9 @@ Pitched_trill_engraver::make_trill (Stream_event *ev)
         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_)
     {
index a57cb7aa9ffe6418f0eea1d7f334c897256d4f36..82e4fbdca3a7f9b87c618b071ade67a369522bd8 100644 (file)
@@ -51,11 +51,11 @@ LY_DEFINE (ly_prob_property, "ly:prob-property",
   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;
index 52ce8b682168de233e545bac6363209941f443a7..37dad6246b34a00b2e0d3019ef0322849168ce85 100644 (file)
@@ -61,15 +61,14 @@ Prob::equal_p (SCM sa, SCM sb)
         {
           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;
     }
 
@@ -151,11 +150,11 @@ Prob::internal_get_property (SCM sym) const
     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 */
index dd38f0425b75ff73c6b3cb6be7e5a4521e682fc7..025bea809bbcc83620771ae535aefbdd9c4f0b04 100644 (file)
@@ -31,13 +31,13 @@ LY_DEFINE (ly_property_lookup_stats, "ly:property-lookup-stats",
            " @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);
@@ -53,7 +53,7 @@ note_property_access (SCM *table, SCM sym)
     *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);
index 769c97064f56f3cd07841f376803fb2974130e84..80cd0e4e2fc25193c5ecc327c726a626700db83f 100644 (file)
@@ -208,7 +208,7 @@ LY_DEFINE (ly_set_option, "ly:set-option", 1, 1, 0, (SCM var, SCM val),
 {
   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, "");
@@ -219,7 +219,7 @@ LY_DEFINE (ly_set_option, "ly:set-option", 1, 1, 0, (SCM var, SCM val),
     }
 
   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);
index 66f0590893b78f6f4f34c1f948569d5f3f3956f9..c68e22345612dd1ebd4472d287656d3269c907d4 100644 (file)
@@ -71,7 +71,7 @@ Quote_iterator::accept_music_type (Stream_event *ev, bool is_cue) const
   // 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))
index a76484e086633345d888c88ea992b8a47ef9e2b6..67477b1f01df6cd589a7d24559132d1e12f64466 100644 (file)
@@ -85,13 +85,14 @@ Repeat_acknowledge_engraver::process_music ()
   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);
     }
index 9c3b82267d882e1437168079c36969796bca0348..7546cbd6307eba6ade23b91e93ddebe5a6afddda 100644 (file)
@@ -119,7 +119,7 @@ void
 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,
index ed930d5fa0eaabaece18055cbc3783d50e6a72d4..c8262dc7df236b89d2023853275a1cd14c81d308 100644 (file)
@@ -124,7 +124,7 @@ LY_DEFINE (ly_score_embedded_format, "ly:score-embedded-format",
   /* 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)
index 3a1232d2a268034c7a2494257d42c102ea75d4e0..5ce7e3ba95efedf2fcd143453468601db3cd1a52 100644 (file)
@@ -117,7 +117,7 @@ Score::book_rendering (Output_def *layoutbook,
 
   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;
@@ -129,7 +129,7 @@ Score::book_rendering (Output_def *layoutbook,
       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;
index f2ef9697a1f86566c15e5a621f7f6b76020b7287..62c3de482cd359256d824135fd0420d29455bd91 100644 (file)
@@ -90,7 +90,7 @@ Script_engraver::listen_articulation (Stream_event *ev)
 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))
@@ -109,7 +109,7 @@ make_script_from_event (Grob *p, Context *tg,
   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:"));
@@ -132,7 +132,7 @@ make_script_from_event (Grob *p, Context *tg,
 
       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.
@@ -144,8 +144,8 @@ make_script_from_event (Grob *p, Context *tg,
         }
 
       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);
     }
 
index c4a136b06f20e15de8ebd09dd17515bd9ecbc7c9..c9442fe9aefe9033696651291e2836f6333c0f97 100644 (file)
@@ -36,7 +36,7 @@ Script_interface::get_stencil (Grob *me, Direction d)
   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)
@@ -110,8 +110,8 @@ Script_interface::calc_cross_staff (SCM smob)
   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;
index bdb2854fd45daf711679571b85d69f5b606324b0..81a21075eef44f23d891287b2e6b7a2bf68d2e67 100644 (file)
@@ -129,7 +129,7 @@ Self_alignment_interface::aligned_on_parent (Grob *me, Axis a)
           ? 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;
index e99c8570b79079cb7f965e274c40012c432b95d6..b62649f06d52b28c88bfd40081ac917d771f8dce 100644 (file)
@@ -32,7 +32,7 @@ evaluate_args (SCM delayed_argument, SCM args, bool pure, int start, int end)
       *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);
     }
@@ -56,7 +56,7 @@ evaluate_with_simple_closure (SCM delayed_argument,
       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);
@@ -64,7 +64,7 @@ evaluate_with_simple_closure (SCM delayed_argument,
     }
   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)))
@@ -73,7 +73,7 @@ evaluate_with_simple_closure (SCM delayed_argument,
         ? 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);
index cc09da1021ac35fd96256c383df4a09345e611e5..7c1c866c6113015354ce5161e4142e8b48f6e566 100644 (file)
@@ -48,7 +48,7 @@ LY_DEFINE (ly_solve_spring_rod_problem, "ly:solve-spring-rod-problem",
   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))
     {
index d17fa1ed73dca1fc9d3fe8a1a262fbc786028246..ada16593aa7e6b1441360413f714cc58d2a1afc5 100644 (file)
@@ -528,7 +528,7 @@ get_line_configuration (vector<Grob *> const &columns,
   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;
     }
 
index 66cca3fd53a044c96b3b82d85ab42d7a57847ece..42a028fe0a59271d4626c939f69091e35b65f8a6 100644 (file)
@@ -811,7 +811,7 @@ Skyline::get_touching_point (SCM skyline_scm, SCM other_skyline_scm, SCM horizon
   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);
@@ -829,7 +829,7 @@ Skyline::get_distance (SCM skyline_scm, SCM other_skyline_scm, SCM horizon_paddi
   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);
index 3383c1f3b02b12916062ca038f419fb4d7407783..8e1db97d8413d3e35fdbe502738541457fae4589 100644 (file)
@@ -412,14 +412,14 @@ Slur_configuration::score_extra_encompass (Slur_score_state const &state)
         }
 
       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");
index 7271cc7a7cf139a9109bf9fe794e22424f61abbd..85e917f96fe34a77e53d4cd84e911021f6029f92 100644 (file)
@@ -281,7 +281,8 @@ Slur_score_state::fill (Grob *me)
                                          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_)
@@ -638,7 +639,8 @@ Slur_score_state::generate_avoid_offsets () const
           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);
index 22c24b76b2f8ac3937dd38347f1b8dbd50aa16fe..0f3f7162a732f99781f2d3c335eb6c1675778974 100644 (file)
@@ -211,7 +211,8 @@ Slur::replace_breakable_encompass_objects (Grob *me)
             /* 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
@@ -264,7 +265,8 @@ Slur::pure_outside_slur_callback (SCM grob, SCM start_scm, SCM end_scm, SCM offs
     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);
@@ -283,8 +285,8 @@ Slur::outside_slur_callback (SCM grob, SCM offset_scm)
     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);
@@ -328,7 +330,7 @@ Slur::outside_slur_callback (SCM grob, SCM offset_scm)
   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))
         {
@@ -408,7 +410,7 @@ Slur::auxiliary_acknowledge_extra_object (Grob_info const &info,
     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);
@@ -417,8 +419,8 @@ Slur::auxiliary_acknowledge_extra_object (Grob_info const &info,
       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)
         {
@@ -430,7 +432,7 @@ Slur::auxiliary_acknowledge_extra_object (Grob_info const &info,
           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 ()));
 }
@@ -445,7 +447,7 @@ MAKE_SCHEME_CALLBACK (Slur, outside_slur_cross_staff, 2)
 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);
index d1bea956d40375ac2fc8497c79355a0dd59bd899..8b3c8a90141e63a61991dd86579d40ab987dcf59 100644 (file)
@@ -46,7 +46,7 @@ protect_smob (SCM smob, SCM *prot_cons)
 {
 #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);
     }
@@ -69,13 +69,13 @@ unprotect_smob (SCM smob, SCM *prot_cons)
 #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);
 
index 69b18e90e5440bc6a5d4a643e91b38fee84ee1fe..1118b9d286ee29a823c6ce0b2a7d6041a9ed19aa 100644 (file)
@@ -148,7 +148,10 @@ Source_file::Source_file (const string &filename_string)
 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_));
 }
index c3c608cc0bb6d20bb6a518ff442a9d5d16697f13..6a9183486d181e4a2acb75da2c6f530b2911e070 100644 (file)
@@ -51,7 +51,7 @@ Spaceable_grob::add_rod (Grob *me, Grob *p, Real d)
   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));
index e7e0a7f3f7014abbbec216d646d68eb2fa51df5a..87dd3ff197bd337c9d375ad4aef1fc2a8d3352fe 100644 (file)
@@ -115,7 +115,8 @@ is_loose_column (Grob *l, Grob *col, Grob *r, Spacing_options const *options)
             {
               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--;)
index 84752313213c5df7c3c8ff6e03473cae3e8c1e53..6232b8e7d3cddf15d1554b4bdb25b02f30c96707 100644 (file)
@@ -533,7 +533,7 @@ Spanner::get_cached_pure_property (SCM sym, int start, int end)
   // The pure property cache is indexed by (name start . end), where name is
   // a symbol, and start and end are numbers referring to the starting and
   // ending column ranks of the current line.
-  if (scm_hash_table_p (pure_property_cache_) == SCM_BOOL_F)
+  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)));
@@ -543,7 +543,7 @@ Spanner::get_cached_pure_property (SCM sym, int start, 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)));
index 7235c0486d639bcac2f1f12b7b92189648f31d91..f635130b70267db6d154432c18447a3dc76acd92 100644 (file)
@@ -161,7 +161,7 @@ Audio_staff *
 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;
 
@@ -201,7 +201,7 @@ Staff_performer::set_instrument (int channel, const string &voice)
   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
@@ -272,11 +272,11 @@ Staff_performer::get_channel (const string &instrument)
 {
   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_;
 
@@ -284,7 +284,7 @@ Staff_performer::get_channel (const string &instrument)
   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 ();
 
@@ -319,13 +319,13 @@ Staff_performer::acknowledge_audio_element (Audio_element_info inf)
         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);
index 99052146bb2bbfed8278c9acd04f4a0160c2de6d..c414268f26b6f685c68a8365708123fd9c9a034f 100644 (file)
@@ -165,21 +165,21 @@ Staff_spacing::get_spacing (Grob *me, Grob *right_col, Real situational_space)
   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;
index 6ae66d85c1880bb0dd817c70389abc43aff262a5..f4b18dfd78ad67e5e2c067332f36b0c130cd5605 100644 (file)
@@ -316,34 +316,9 @@ Staff_symbol::height (SCM smob)
 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;
@@ -353,6 +328,34 @@ Staff_symbol::on_line (Grob *me, int pos, bool allow_ledger)
         }
       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
index 9021642785c86b55b3efc14b532797e7a2f146f8..f2c716d2ec91767bb43225702aad4f99db2a5684 100644 (file)
@@ -39,7 +39,9 @@ Stem_tremolo::calc_slope (SCM smob)
   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");
@@ -58,7 +60,8 @@ Stem_tremolo::calc_slope (SCM smob)
   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);
 }
 
@@ -76,17 +79,20 @@ Stem_tremolo::calc_width (SCM smob)
   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
@@ -108,15 +114,15 @@ Stem_tremolo::raw_stencil (Grob *me, Real slope, Direction dir)
   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);
@@ -339,7 +345,7 @@ Stem_tremolo::print (SCM grob)
 
 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 "
@@ -348,6 +354,6 @@ ADD_INTERFACE (Stem_tremolo,
                "flag-count "
                "length-fraction "
                "stem "
-               "style "
+               "shape "
                "slope "
               );
index f21e0de6b5dac5b7dffbd0a3b1da25f4fcbb0562..6b4b95b015ef140c1a98427ba7a6cfcfa0430421 100644 (file)
@@ -533,7 +533,8 @@ Stem::calc_positioning_done (SCM smob)
   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];
index c156d0aa9f2d31d0191e33c6105ba93455c45b0d..06aabb992f943494b09561e3aa039d1bfbae5843 100644 (file)
@@ -33,8 +33,7 @@ void register_stencil_head (SCM symbol)
 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
index 91f1333867c4d03652d264b57a481b2d67884458..0bdb00a8edd054b5df18157af46c22324646ae83 100644 (file)
@@ -113,7 +113,7 @@ get_number_list (SCM l)
       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;
     }
@@ -129,19 +129,18 @@ get_path_list (SCM l)
 {
   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;
     }
@@ -530,8 +529,8 @@ all_commands_to_absolute_and_group (SCM expr)
   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);
@@ -539,7 +538,7 @@ all_commands_to_absolute_and_group (SCM expr)
           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);
@@ -547,7 +546,7 @@ all_commands_to_absolute_and_group (SCM expr)
           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);
@@ -559,7 +558,7 @@ all_commands_to_absolute_and_group (SCM expr)
           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);
@@ -571,7 +570,7 @@ all_commands_to_absolute_and_group (SCM expr)
           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);
@@ -597,7 +596,7 @@ all_commands_to_absolute_and_group (SCM 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);
@@ -623,7 +622,7 @@ all_commands_to_absolute_and_group (SCM 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]))
             {
@@ -825,9 +824,9 @@ stencil_dispatcher (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings,
 {
   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);
@@ -839,7 +838,7 @@ stencil_dispatcher (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings,
       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);
@@ -855,7 +854,7 @@ stencil_dispatcher (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings,
                                               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);
@@ -873,17 +872,17 @@ stencil_dispatcher (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings,
                                               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
     {
@@ -908,9 +907,9 @@ stencil_traverser (PangoMatrix trans, SCM expr)
 {
   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))
@@ -920,23 +919,23 @@ stencil_traverser (PangoMatrix trans, SCM expr)
         }
       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);
@@ -946,16 +945,16 @@ stencil_traverser (PangoMatrix trans, SCM expr)
       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
     {
index 26e891dfb77698c0533054b231a9f4635b044da9..87e6496de778e2f3bfe3ed03fdfacd6a094ed47a 100644 (file)
@@ -32,28 +32,28 @@ interpret_stencil_expression (SCM expr,
 
       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);
 
@@ -65,7 +65,7 @@ interpret_stencil_expression (SCM 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);
@@ -78,7 +78,7 @@ interpret_stencil_expression (SCM expr,
 
           return;
         }
-      else if (head == ly_symbol2scm ("id"))
+      else if (scm_is_eq (head, ly_symbol2scm ("id")))
         {
           SCM id = scm_cadr (expr);
 
@@ -88,7 +88,7 @@ interpret_stencil_expression (SCM 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);
@@ -104,7 +104,7 @@ interpret_stencil_expression (SCM expr,
 
           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);
@@ -142,7 +142,7 @@ find_font_function (void *fs, SCM x)
 {
   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);
@@ -150,9 +150,9 @@ find_font_function (void *fs, SCM x)
       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_);
         }
     }
index ebf3cd6c15ad487bab6e67cde9c7891f3c525c35..f337beb3f4e555dbec5b3a69d26c44d277a53bef 100644 (file)
@@ -116,15 +116,15 @@ LY_DEFINE (ly_stencil_combine_at_edge, "ly:stencil-combine-at-edge",
   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);
@@ -163,15 +163,15 @@ LY_DEFINE (ly_stencil_stack, "ly:stencil-stack",
   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);
@@ -252,14 +252,14 @@ LY_DEFINE (ly_make_stencil, "ly:make-stencil",
                    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);
index 41eb2f1e852498c7fc0cf454f9c9c892b124b307..980618ceaa5d965fdb8900372d77d60ff0350747 100644 (file)
@@ -55,7 +55,7 @@ Stencil::extent (Axis a) const
 bool
 Stencil::is_empty () const
 {
-  return (expr_ == SCM_EOL
+  return (scm_is_null (expr_)
           || dim_.is_empty ());
 }
 
index c1d0543f8c44ef3081ad5b58be0e759d40404825..bf8056e16aa88eb56c8087869ef37afc6bbb7594 100644 (file)
@@ -36,7 +36,7 @@ LY_DEFINE (ly_make_stream_event, "ly:make-stream-event",
   /* 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);
index 674f22fda4d3c423141c88ba12fd4fdc52ea9523..7fb596c26475c7a088797601c14f978ce1bf19b6 100644 (file)
@@ -68,7 +68,7 @@ bool
 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);
@@ -87,9 +87,9 @@ Stream_event::make_transposable ()
       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_);
index ebc77e86ba0b17c24fc7d3b5903cf3e5ea64d51e..73a3c8ccc75cb9cdb99674f6809c75c36f0bb1d1 100644 (file)
@@ -132,10 +132,10 @@ Bracket_nesting_group::from_list (SCM x)
           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));
index 6a898559b317e7eb1fdaba6d93a8197100807474..563a035acc6f97f1b9ad3d099680af20a7ed19a0 100644 (file)
@@ -129,13 +129,13 @@ System_start_delimiter::print (SCM smob)
     }
 
   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);
index 6d6b5ac8f3b2297dc72db4065c2b50491bc1426e..61779473c3573612599f600a3b6559e7db4c2fbf 100644 (file)
@@ -594,7 +594,7 @@ System::get_paper_system ()
       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;
index 42dd7e4b1fdb7e9351c8d178f1145a37b23e3ed5..4d47d77982a33d4ae34dff062a2862f0e11ed395 100644 (file)
@@ -111,12 +111,12 @@ Tab_note_heads_engraver::process_music ()
   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,
index 909ab9b099666203e133796e53c78e328fff40a7..012718d6215cc94855dd25536df4485673a470e9 100644 (file)
@@ -91,7 +91,7 @@ Text_interface::interpret_string (SCM layout_smob,
                                      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 ();
 }
 
index f944454a71ccbaf9400305449f56f7adc8385d03..1faa3d94454c4c59ed12ae7e8393c05cae0129dd 100644 (file)
@@ -1200,7 +1200,8 @@ Tie_formatting_problem::set_manual_tie_configuration (SCM manual_configs)
             {
               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)))
index 0413495713a8d3637db91da615aa9a855392ab65..0ccf2c5beb3298e44e0f1d5e3e0814ed8ee029b6 100644 (file)
@@ -33,7 +33,7 @@ Tie_specification::from_grob (Grob *tie)
   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;
     }
index 53205cbb6cec18727a15ec91714570e3969b1634..46e42679aa104fecf90fc88a0dacbf9927d0a23a 100644 (file)
@@ -80,7 +80,7 @@ Time_signature_engraver::process_music ()
       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"));
 
@@ -104,7 +104,7 @@ Time_signature_engraver::process_music ()
 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))
index 1368e7376246dfd2dd224633863995879e638f9c..168f1ad6de676f38d96f84fe8782b8c0e39c4924 100644 (file)
@@ -60,7 +60,7 @@ get_translator (SCM sym)
   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;
index 5174bb33d3859129ab6386520b36e4e61ef07f1c..ed968c571a5d504484cd99b1951af5b3b14b7c38 100644 (file)
@@ -55,7 +55,7 @@ Engraver_dispatch_list::create (SCM trans_list,
       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));
index 92655f21a4b9eaebfd7610eada175e54c1ab07d8..e14ed760820a2d411fb8512c25ac1f36d3b5f520 100644 (file)
 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",
index 5a5b5695f018a5539a3d434f3739e90b2ec02ae2..2e6039a9af93a2c5c10b93535d0009a882d1f795 100644 (file)
@@ -303,7 +303,7 @@ Translator_group::precompute_method_bindings ()
   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);
index 5798a0061c15d195bd8d008af773f1211d833fb3..d6874ef78ca35d90a0e4a088405183961f17870c 100644 (file)
@@ -154,7 +154,7 @@ Translator::add_translator_listener (translator_listener_record **listener_list,
   // 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;
@@ -178,7 +178,7 @@ Translator::static_translator_description (const char *grobs,
                                  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_)
@@ -240,7 +240,7 @@ Translator::print_smob (SCM port, scm_print_state *)
 }
 
 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)
 {
@@ -259,7 +259,7 @@ add_acknowledger (Engraver_void_function_engraver_grob_info ptr,
   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++)
index 6a68f00c3d4697f9af9f39f65c3ea2c07e011ede..2af774e414c254c402241b9a0a4524ba0f54cec7 100644 (file)
@@ -503,7 +503,7 @@ LY_DEFINE (ly_ttf_ps_name, "ly:ttf-ps-name",
   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);
@@ -553,7 +553,7 @@ LY_DEFINE (ly_ttf_2_pfa, "ly:ttf->pfa",
   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);
@@ -570,7 +570,7 @@ LY_DEFINE (ly_ttf_2_pfa, "ly:ttf->pfa",
   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);
index 5c893784995e974df4ab6d027152de5b5df5b14d..28803d5bf6c3d1c9e0c0b26164da90e456d3dbaf 100644 (file)
@@ -268,7 +268,7 @@ Tuplet_bracket::print (SCM smob)
   */
   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)
index bfe35480b159898f5971b0127e60fd42aabf226b..381aa994f38cbb567bf36ad630de61f0a2441963 100644 (file)
@@ -336,7 +336,7 @@ count_beams_not_touching_stem (SCM beaming)
 
   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;
     }
 
index 560cabfc4f2f50f21b5305e19cc373a3cb4959a8..81138b3670ebd749b84f360b06ca99ac5eb13195 100644 (file)
@@ -60,7 +60,7 @@ Tweak_engraver::acknowledge_grob (Grob_info info)
               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))
                     {
index cc9a489472ab6af590fa297c78c79e5ac175eb06..a39e0cef59b2fac100b07f0680524008c117cddc 100644 (file)
@@ -247,7 +247,7 @@ Vaticana_ligature_engraver::align_heads (vector<Grob_info> const &primitives,
        */
 
       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 ->"
@@ -260,7 +260,7 @@ Vaticana_ligature_engraver::align_heads (vector<Grob_info> const &primitives,
       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
             {
@@ -491,7 +491,7 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
 
       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
         {
index fd95c43380e97123e942de836a732fa45727eee3..2066716b802738b705fed27b35207fa78e5400dd 100644 (file)
@@ -86,7 +86,7 @@ vaticana_brew_flexa (Grob *me,
 
   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
     {
@@ -200,7 +200,7 @@ Stencil
 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");
@@ -222,7 +222,7 @@ vaticana_brew_primitive (Grob *me)
 
   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;
index fe568a5fd50bbbd7057371a1a2c67fc8b85916e0..60c8987b3eecd09dafb2551b474627273efc8778 100644 (file)
@@ -82,10 +82,10 @@ Volta_engraver::process_music ()
       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);
index 09c2495f05dae8febe0184981b174d2f1d3cedf1..bcbc34f8cb3b9d3800436d495ac33c8ce65cc6e9 100644 (file)
@@ -85,8 +85,7 @@ Volta_repeat_iterator::add_repeat_command (SCM what)
   SCM current_reps = SCM_EOL;
   Context *where = get_outlet ()->where_defined (reps, &current_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);
index 10bd9371aee8a141b07f9c54004c45c5efb92acf..edb7dffe01ad6fffecc77ef67489b13ab0e5a603 100644 (file)
@@ -23,7 +23,7 @@ That's it.  For more information, visit http://lilypond.org .
 
 %}
 
-\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"
index 6afad0027c26c1b19da913e13017fb8ad6447d2f..439bad3323d0309f05b651d8cb20bb3eca42ec4c 100644 (file)
@@ -32,7 +32,7 @@ Good luck with LilyPond!  Happy engraving.
 
 %}
 
-\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"
diff --git a/ly/base-tkit.ly b/ly/base-tkit.ly
new file mode 100644 (file)
index 0000000..6061475
--- /dev/null
@@ -0,0 +1,117 @@
+%\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))))
+
index 12a5fcf2ed98c59dacdc742f9d0bc4a4e4fee1ca..5d695ebf5c7b1123977df2d5735c5ff3bd4a1683 100644 (file)
@@ -16,7 +16,7 @@
 %%%% 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"
@@ -277,6 +277,7 @@ multiple voices on the same staff."
   \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
index 8265d171cf2ab3f9ae632ddf722ab4a3a402f99e..d014a401ab506a11213cd1d127108f78e5ef9693 100644 (file)
@@ -35,6 +35,7 @@
 
 #(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
diff --git a/ly/lyrics-tkit.ly b/ly/lyrics-tkit.ly
new file mode 100644 (file)
index 0000000..91a19cd
--- /dev/null
@@ -0,0 +1,50 @@
+%\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))))
index 9b1d36623baf9f115aa09fe774b51e3c29e02b97..cbba26a65256a366e3c2793cebb641e91d18266b 100644 (file)
@@ -1131,24 +1131,36 @@ a music expression containing simultaneous voices, where @var{part1}
 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?)
index 0942116dcef34cfc47a3d05c42cf537c78697c99..1c2f45da8bd3728ad91dc562f70675869fed911d 100644 (file)
   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
diff --git a/ly/piano-tkit.ly b/ly/piano-tkit.ly
new file mode 100644 (file)
index 0000000..e7d9744
--- /dev/null
@@ -0,0 +1,45 @@
+%\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)))
index eed79d1cbbf2066b5e713f51202610ba14c54fbd..df57811e4856a62d4fa0a0371ce9ccb7e6fd98ad 100644 (file)
@@ -1,4 +1,4 @@
-%\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
+    }
+  }
 }
diff --git a/ly/staff-tkit.ly b/ly/staff-tkit.ly
new file mode 100644 (file)
index 0000000..a0f827a
--- /dev/null
@@ -0,0 +1,178 @@
+%\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)))
diff --git a/ly/vocal-tkit.ly b/ly/vocal-tkit.ly
new file mode 100644 (file)
index 0000000..cad4ea4
--- /dev/null
@@ -0,0 +1,90 @@
+%\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
+        >>
+      #} )
+
diff --git a/ly/voice-tkit.ly b/ly/voice-tkit.ly
new file mode 100644 (file)
index 0000000..daeaae4
--- /dev/null
@@ -0,0 +1,16 @@
+%\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
+         >>
+       #} ))
+
index 141ba631979ed55edca904e384cb2b24d8c078c5..646234cd071cb9d030c057f56d4e254a45c1bff3 100644 (file)
@@ -40,6 +40,16 @@ NCSB_OTFS = $(addprefix $(outdir)/,CenturySchL-Ital.otf \
                                   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)
@@ -74,6 +84,8 @@ $(outdir)/emmentaler-%.genpe: $(buildscript-dir)/gen-emmentaler-scripts
 
 ALL_GEN_FILES = $(ENC_FILES) \
                $(NCSB_OTFS) \
+               $(HELV_OTFS) \
+               $(COUR_OTFS) \
                $(OTF_FILES) \
                $(SVG_FILES) \
                $(WOFF_FILES)
@@ -87,7 +99,7 @@ INSTALLATION_OUT_SUFFIXES = 1 2
 
 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)
@@ -172,3 +184,25 @@ $(addprefix $(outdir)/,CenturySchL-Ital.otf \
        CenturySchL-Bold.otf \
        CenturySchL-BoldItal.otf): $(outdir)/CenturySchL-Roma.otf
        $(UPDATE_TARGET)
+
+$(outdir)/NimbusSanL-Regu.otf: $(HELV_SOURCE_FILES) \
+             $(auxscript-dir)/pfx2ttf.fontforge
+       $(foreach i, $(basename $(HELV_SOURCE_FILES)), \
+               $(FONTFORGE) -script $(auxscript-dir)/pfx2ttf.fontforge \
+                       $(i).pfb $(i).afm $(outdir)/ && ) true
+
+$(addprefix $(outdir)/,NimbusSanL-ReguItal.otf \
+       NimbusSanL-Bold.otf \
+       NimbusSanL-BoldItal.otf): $(outdir)/NimbusSanL-Regu.otf
+       $(UPDATE_TARGET)
+
+$(outdir)/NimbusMonL-Regu.otf: $(COUR_SOURCE_FILES) \
+             $(auxscript-dir)/pfx2ttf-mono.fontforge
+       $(foreach i, $(basename $(COUR_SOURCE_FILES)), \
+               $(FONTFORGE) -script $(auxscript-dir)/pfx2ttf-mono.fontforge \
+                       $(i).pfb $(i).afm $(outdir)/ && ) true
+
+$(addprefix $(outdir)/,NimbusMonL-ReguObli.otf \
+       NimbusMonL-Bold.otf \
+       NimbusMonL-BoldObli.otf): $(outdir)/NimbusMonL-Regu.otf
+       $(UPDATE_TARGET)
index bc35d60622516a2d82a6291ddcfea47ae2e88e78..4adef1f8cb64b3f73c246faa8435e33b2c13ba63 100644 (file)
--- a/po/da.po
+++ b/po/da.po
 # 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\"..."
@@ -1487,36 +4115,15 @@ msgstr "Overvej at konvertere inddata med skriptet \"convert-ly\""
 #~ 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\""
@@ -1533,27 +4140,21 @@ msgstr "Overvej at konvertere inddata med skriptet \"convert-ly\""
 #~ 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"
@@ -1562,51 +4163,18 @@ msgstr "Overvej at konvertere inddata med skriptet \"convert-ly\""
 #~ 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"
@@ -1614,36 +4182,12 @@ msgstr "Overvej at konvertere inddata med skriptet \"convert-ly\""
 #~ 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"
 
@@ -1651,55 +4195,16 @@ msgstr "Overvej at konvertere inddata med skriptet \"convert-ly\""
 #~ 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"
index fd3b4e072b52ea829abf9b95ae13652834be173d..2d6abe8409e23814192402145c3823c68f3a90c9 100644 (file)
@@ -6,10 +6,10 @@
 #, 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"
@@ -1862,14 +1862,14 @@ msgstr ""
 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 ""
@@ -2039,11 +2039,11 @@ 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 ""
 
@@ -2478,7 +2478,7 @@ msgstr ""
 msgid "placing below"
 msgstr ""
 
-#: note-collision.cc:510
+#: note-collision.cc:512
 msgid "this Voice needs a \\voiceXx or \\shiftXx setting"
 msgstr ""
 
@@ -2510,22 +2510,22 @@ 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 ""
@@ -2565,7 +2565,7 @@ 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 ""
@@ -2615,43 +2615,43 @@ 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 ""
@@ -2687,7 +2687,7 @@ 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?"
@@ -2911,7 +2911,7 @@ msgstr ""
 msgid "cannot end %s"
 msgstr ""
 
-#: slur.cc:434
+#: slur.cc:436
 #, c-format
 msgid "Ignoring grob for slur: %s.  avoid-slur not set?"
 msgstr ""
@@ -3408,17 +3408,17 @@ 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 ""
@@ -3801,7 +3801,7 @@ msgstr ""
 msgid "error in #{ ... #}"
 msgstr ""
 
-#: part-combiner.scm:748
+#: part-combiner.scm:763
 #, scheme-format
 msgid "quoted music `~a' is empty"
 msgstr ""
index 87fa7660893539f84d11b823ec9d56a7adc60002..19af006386168d2927bafa111d13e2848fdbd626 100644 (file)
@@ -6,7 +6,8 @@ STEPMAKE_TEMPLATES=c python-module install-out po
 
 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=
 
index d0753500aa4b62b25a7db0480455a677cdbfc6d2..bbd24055415bdc4cb931a0db3b897ae6a1ad6aca 100644 (file)
@@ -214,8 +214,9 @@ increments from this initial value.")
 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
@@ -530,6 +531,8 @@ the string will be assigned to the @code{id} attribute of a group (<g>)
 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?")
@@ -774,6 +777,10 @@ If unset, the value from @code{self-alignment-X} property will be
 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
@@ -844,6 +851,9 @@ value @w{@code{-1}} means left aligned, @code{0}@tie{}centered, 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
index 252733d1668e808660bb716e0c6004b488422ae1..cdae45dd17bb976d8263bd3ca1b404af4dd4282f 100644 (file)
      . (
         (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)
index 34fa7b1a173ac29c93ab6e22240065bd5ecba58b..f2d89ae71fd4cd9560b4ed232f0fccff6d9b8002 100644 (file)
@@ -125,7 +125,24 @@ to be used by the sequential-iterator"
                   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?
index ca532c5029a3bd669f901468263f8066559e4966..cca78ffec267ed80fd610dbacb5f5fe382202e9b 100644 (file)
@@ -1012,6 +1012,7 @@ Otherwise, return #f."
 
 (define-extra-display-method PartCombineMusic (expr parser)
   (with-music-match (expr (music 'PartCombineMusic
+                                 direction ?dir
                                  elements ((music 'UnrelativableMusic
                                                   element (music 'ContextSpeccedMusic
                                                                  context-id "one"
@@ -1022,11 +1023,35 @@ Otherwise, return #f."
                                                                  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))
 
index 8327e7c60eb4d7f0778c80f7f26c6864485308e2..30903edb7b0fe867b6f6319e39c6aa8dc62d659c 100644 (file)
 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)
         ))
 
@@ -57,14 +57,14 @@ Syntax: @code{\\applyOutput #'@var{context} @var{func}}
 
 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.
@@ -77,7 +77,7 @@ Syntax: @var{note}@code{x}@code{y}, where @code{x} is a direction\
 \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
@@ -86,63 +86,62 @@ piano staves automatically.")
         (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
@@ -150,7 +149,7 @@ before its associated @code{Voice} context.")
 
 Syntax: @code{\\change Staff = @var{new-id}}")
         (iterator-ctor . ,ly:change-iterator::constructor)
-        (types . (general-music translator-change-instruction))
+        (types . (translator-change-instruction))
         ))
 
     (ContextSpeccedMusic
@@ -159,7 +158,7 @@ specific context.")
         (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
@@ -169,8 +168,8 @@ Syntax: @var{note}@code{\\<} @dots{} @var{note}@code{\\!}
 
 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
@@ -180,23 +179,23 @@ Syntax: @var{note}@code{\\>} @dots{} @var{note}@code{\\!}
 
 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
@@ -213,27 +212,27 @@ duration stored in @code{duration}.")
         (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
@@ -241,17 +240,17 @@ duration stored in @code{duration}.")
         (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
@@ -259,29 +258,29 @@ duration stored in @code{duration}.")
 
 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
@@ -289,7 +288,7 @@ Syntax: @var{note}@code{\\laissezVibrer}")
 
 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)
         ))
 
@@ -297,7 +296,7 @@ Syntax: @code{\\lyricsto} @var{voicename} @var{lyrics}")
      . ((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
@@ -306,20 +305,19 @@ i.e., @code{\\lyrics @{ twinkle4 twinkle4 @} }.")
 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
@@ -328,7 +326,7 @@ to signal rests.")
 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
@@ -337,12 +335,12 @@ Syntax: @code{R2.*4} for 4 measures in 3/4 time.")
 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
@@ -353,20 +351,19 @@ are broadcast like chord articulations, the others are retained.
 
 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
@@ -374,25 +371,24 @@ For iteration inside of chords, @xref{EventChord}.")
 
 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
@@ -403,7 +399,7 @@ Syntax: @code{\\override} [ @var{context} @code{.} ]
         ;; 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
@@ -411,13 +407,13 @@ Syntax: @code{\\override} [ @var{context} @code{.} ]
 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
@@ -425,14 +421,14 @@ as separate voices.")
         (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
@@ -440,7 +436,7 @@ goes down).")
 
 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
@@ -453,7 +449,7 @@ This can be used to package several events into a single one.  Should not be see
      . ((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)
         ))
@@ -463,7 +459,7 @@ Syntax: @code{\\set @var{context}.@var{prop} = @var{scheme-val}}")
 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)
         ))
 
@@ -472,13 +468,13 @@ Syntax: @code{\\unset @var{context}.@var{prop}}")
         (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
@@ -487,22 +483,22 @@ Syntax: @code{\\unset @var{context}.@var{prop}}")
         (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
@@ -510,19 +506,19 @@ Syntax: @code{\\unset @var{context}.@var{prop}}")
 
 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
@@ -533,7 +529,7 @@ Syntax: @code{\\sequential @{ @dots{} @}} or simply @code{@{ @dots{} @}}")
         (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
@@ -545,7 +541,7 @@ Syntax: @code{\\simultaneous @{ @dots{} @}} or @code{<< @dots{} >>}")
         (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
@@ -554,7 +550,7 @@ print anything.
 
 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
@@ -564,7 +560,7 @@ print anything, and also does not create staves or voices implicitly.
 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
@@ -572,81 +568,81 @@ Syntax: @code{\\skip} @var{duration}")
 
 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
@@ -657,19 +653,19 @@ Syntax: @code{\\times @var{fraction} @var{music}}, e.g.,
         (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
@@ -679,12 +675,12 @@ Syntax: @code{\\times @var{fraction} @var{music}}, e.g.,
         (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
@@ -692,28 +688,28 @@ Syntax: @code{\\times @var{fraction} @var{music}}, e.g.,
         (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
@@ -722,14 +718,14 @@ played) out.")
         (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
@@ -737,14 +733,14 @@ to absolute notation.  For example, transposed music.")
         (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
@@ -753,7 +749,7 @@ Syntax: @code{\\\\}")
         (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))
         ))
     ))
 
index 11c97193e3a998b0646a87acc1ea2e9d88bef925..0582a492a1e18dec33db1c2533e3133b3f16740f 100644 (file)
@@ -253,8 +253,8 @@ used.  This is used to select the proper design size for the text fonts.
   (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)
@@ -274,8 +274,8 @@ used.  This is used to select the proper design size for the text fonts.
 (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
index 2b2a65c719f12ec575c6587c206180e8bf89fb8b..33ad81ae50405053fe015197c7a85fa40d32697b 100644 (file)
 
     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
 
@@ -867,12 +905,25 @@ and duration-log @var{log}."
     (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))
index ae51d0539be6796e5ebcc7d2088841a9f76d2ca4..8fe293e94743fde86f30b5025813b0b130e845e6 100644 (file)
     (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)
@@ -381,49 +400,49 @@ Only set if not set previously.
       (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))
@@ -508,15 +527,11 @@ Only set if not set previously.
                  )))
 
             (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)
diff --git a/scripts/auxiliar/pfx2ttf-mono.fontforge b/scripts/auxiliar/pfx2ttf-mono.fontforge
new file mode 100644 (file)
index 0000000..7b80494
--- /dev/null
@@ -0,0 +1,36 @@
+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
index 1db797468fbcd034afc444970f5de8386d9ac406..45ff320f467d31262a28f36d2e9a2a84bbbca152 100644 (file)
@@ -19,15 +19,15 @@ $(outdir)/%.tfm $(outdir)/%.log: %.mf
 # 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