@c but the example is long enough to avoid looking strange.
@lilypond[verbatim,quote,noragged-right]
<<
- \relative c' {
+ \relative {
\key g \major
\time 3/4
\partial 4
- d4 | g4 g a8( b) | g4 g b8( c) |
+ d'4 | g4 g a8( b) | g4 g b8( c) |
d4 d e | c2
}
\addlyrics {
@lilypond[verbatim,quote]
<<
- \relative c'' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+ c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
}
- \relative c' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+ r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- dorn,
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Conceptes fonamentals
@chapter Conceptes fonamentals
@c The following should appear as music without code
@c The three voice styles should be defined in -init
@lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
\key aes \major
<<
{ % Veu u
\voiceOneStyle
- c2 aes4. bes8
+ c''2 aes4. bes8
}
\\ % Veu dos
{ \voiceTwoStyle
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceOne
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceTwo
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
que es pugui traçar una lligadura per sobre d'elles.
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
\voiceOneStyle
% Aquesta secció és homofònica
- c16^( d e f
+ c'16^( d e f
% Comença una secció simultània de tres veus
<<
% Continua la veu principal en paral·lel
està en silenci, com per exemple:
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
% Inicia la primera veu
\new Voice {
\voiceOne
- c16^( d e f g4 f e | d2 e) |
+ c'16^( d e f g4 f e | d2 e) |
}
% Inicia la segona veu
\new Voice {
@lilypond[quote,verbatim]
<<
\new Voice = "una" {
- \relative c'' {
+ \relative {
\autoBeamOff
\time 2/4
- c4 b8. a16 | g4. f8 | e4 d | c2 |
+ c''4 b8. a16 | g4. f8 | e4 d | c2 |
}
}
\new Lyrics \lyricsto "una" {
@lilypond[quote,verbatim,ragged-right]
<<
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.instrumentName = #"Soprano"
- c2 c
+ c''2 c
}
- \new Staff \relative c' {
+ \new Staff \relative {
\set instrumentName = #"Alto" % Incorrecte!
- d2 d
+ d'2 d
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Score.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Voice \with {
\consists "Ambitus_engraver"
} {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
}
<<
\new Voice {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
lletraBaix = \lletraSoprano
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4 |
+ r4 <a' d fis>2 <a e' a>4 |
<d fis d'>4. <d fis d'>8 <a d a'>2 |
<g cis g'>4 <a d fis> <a cis e>2 |
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4 |
+ <d, d'>4 <d d'>2 <cis cis'>4 |
<b b'>4. <b' b'>8 <fis fis'>2 |
<e e'>4 <d d'> <a' a'>2 |
}
r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
lletraBaix = \lletraSoprano
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4 |
+ r4 <a' d fis>2 <a e' a>4 |
<d fis d'>4. <d fis d'>8 <a d a'>2 |
<g cis g'>4 <a d fis> <a cis e>2 |
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4 |
+ <d, d'>4 <d d'>2 <cis cis'>4 |
<b b'>4. <b' b'>8 <fis fis'>2 |
<e e'>4 <d d'> <a' a'>2 |
}
\dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}
-violí = \relative c'' {
+violí = \relative {
\repeat volta 2 {
- c4._\dolce b8 a8 g a b |
+ c''4._\dolce b8 a8 g a b |
\padText
c4.^"hi there!" d8 e' f g d |
c,4.\fthenp b8 c4 c-. |
difícil de llegir, sobretot l'última línia.
@example
-violí = \relative c'' @{
+violí = \relative @{
\repeat volta 2 @{
- c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
+ c''4._\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 @{
@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
- (parser location padding)
+ (padding)
(number?)
#{
\once \override TextScript.padding = #padding
anterior, arribem al següent resultat
@lilypond[quote,ragged-right]
-\transpose f c' \relative c {
+\transpose f c' \relative {
\time 2/4
\set Score.skipBars = ##t
R2*3 |
de metrònom} poden establir-se amb l'ordre @code{\tempo}:
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\time 3/4
\tempo "Andante"
- a4 a a
+ a'4 a a
\time 6/8
\tempo 4. = 96
a4. a
a l'hora:
@lilypond[verbatim,quote]
-\relative c, {
+\relative {
\clef "bass"
\time 3/4
\tempo "Andante" 4 = 120
- c2 e8 c'
+ c,2 e8 c'
g'2.
f4 e d
c4 c, r
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Ajustament de la sortida
@chapter Ajustament de la sortida
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \hide Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \override Score.MetronomeMark.stencil = ##f
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
@end example
@example
\include "definicions.ily"
-\relative c'' @{
+\relative @{
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
((0) (x11-color 'violet )) ; for B
)))
-\relative c' {
+\relative {
% Arrange to obtain color from color-notehead procedure
\override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
@end ignore
+@item
+The definition of LilyPond functions with
+@code{define-music-function}, @code{define-event-function},
+@code{define-scheme-function} and @code{define-void-function} no
+longer requires specification of @code{parser} and @code{location}
+arguments. Current parser and input location are part of the
+current dynamic state and can be accessed with the function calls
+@code{(*parser*)} and @code{(*location*)} when required.
+
+LilyPond makes a best-faith attempt of recognizing legacy use of
+@code{parser} and @code{location} arguments and will provide
+backwards-compatible semantics for some time.
+
+@item
+In the "english" notename language, the long notenames for pitches
+with accidentals now contain a hyphen for better readability. You
+now have to write
+@example
+\key a-flat \major
+@end example
+instead of the previous
+@example
+\key aflat \major
+@end example
+
+Double accidentals do not get another hyphen, so the Dutch
+@code{cisis} has the long English notename @code{c-sharpsharp}.
+
@item
The visual style of tremolo slashes (shape, style and slope)
is now more finely controlled.
@subheading Compiling LilyPond for use with gdb
In order to use gdb with LilyPond, it is necessary to compile
-LilyPond with debugging information. This is accomplished by running
-the following commands in the main LilyPond source directory.
+LilyPond with debugging information. This is the current default
+mode of compilation. Often debugging becomes more complicated
+when the compiler has optimised variables and function calls away.
+In that case it may be helpful to run the following command in the
+main LilyPond source directory:
@example
-./configure --disable-optimising
+./configure --disable-optimising
make
@end example
-This will create a version of LilyPond containing debugging
-information that will allow the debugger to tie the source code
-to the compiled code.
+This will create a version of LilyPond with minimal optimization
+which will allow the debugger to access all variables and step
+through the source code in-order. It may not accurately reproduce
+bugs encountered with the optimized version, however.
You should not do @var{make install} if you want to use a debugger
with LilyPond. The @var{make install} command will strip debugging
In order for the Graphviz tool to work, config.make must be modified.
It is probably a good idea to first save a copy of config.make under
-a different name. Then, edit config.make by removing every occurrence
-of @option{-DNDEBUG}.
+a different name.
+
+In order to have the required functionality available, LilyPond
+needs to be compiled with the option @option{-DDEBUG}. You can
+achieve this by configuring with
+
+@example
+./configure --enable-checking
+@end example
@item Rebuilding LilyPond
The pdf file can then be viewed with any pdf viewer.
-When compiled without @option{-DNDEBUG}, lilypond may run slower
-than normal. The original configuration can be restored by either
-renaming the saved copy of @code{config.make} or rerunning
-@code{configure}. Then rebuild lilypond with
+When compiled with @option{-DDEBUG}, lilypond may run slower
+than normal. The original configuration can be restored by rerunning
+@code{./configure} with @option{--disable-checking}. Then
+rebuild lilypond with
@example
make -C lily clean && make -C lily
often than not, the code checks Lilypond specific C++-implemented
types using
-@subsubheading [Type *] Type::unsmob (SCM s)
+@subsubheading [Type *] unsmob<Type> (SCM s)
This tries converting a Scheme object to a pointer of the desired
kind. If the Scheme object is of the wrong type, a pointer value
@c but the example is long enough to avoid looking strange.
@lilypond[verbatim,quote,noragged-right]
<<
- \relative c' {
+ \relative {
\key g \major
\time 3/4
\partial 4
- d4 | g4 g a8( b) | g4 g b8( c) |
+ d'4 | g4 g a8( b) | g4 g b8( c) |
d4 d e | c2
}
\addlyrics {
@lilypond[verbatim,quote]
<<
- \relative c'' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+ c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
}
- \relative c' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+ r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- dorn,
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Pavel Fric
@node Základní pojmy
@c The following should appear as music without code
@c The three voice styles should be defined in -init
@lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
\key aes \major
<<
{ % Voice one
\voiceOneStyle
- c2 aes4. bes8
+ c''2 aes4. bes8
}
\\ % Voice two
{ \voiceTwoStyle
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceOne
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceTwo
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
jednotlivého hlasu. Tím se může frázovací oblouček malovat nad ně.
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
\voiceOneStyle
% The following notes are monophonic
- c16^( d e f
+ c'16^( d e f
% Start simultaneous section of three voices
<<
% Continue the main voice in parallel
jako je tomu zde:
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
% Initiate first voice
\new Voice {
\voiceOne
- c16^( d e f g4 f e | d2 e) |
+ c'16^( d e f g4 f e | d2 e) |
}
% Initiate second voice
\new Voice {
@lilypond[quote,verbatim]
<<
\new Voice = "one" {
- \relative c'' {
+ \relative {
\autoBeamOff
\time 2/4
- c4 b8. a16 | g4. f8 | e4 d | c2 |
+ c''4 b8. a16 | g4. f8 | e4 d | c2 |
}
}
\new Lyrics \lyricsto "one" {
@lilypond[quote,verbatim,ragged-right]
<<
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.instrumentName = #"Soprano"
- c2 c
+ c''2 c
}
- \new Staff \relative c' {
+ \new Staff \relative {
\set instrumentName = #"Alto" % Wrong!
- d2 d
+ d'2 d
}
>>
@end lilypond
\new Staff \relative {
ais'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.extraNatural = ##f
- ais2 aes
+ ais'2 aes
}
>>
@end lilypond
\new Staff \relative {
ais'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Score.extraNatural = ##f
- ais2 aes
+ ais'2 aes
}
>>
@end lilypond
\new Voice \with {
\consists "Ambitus_engraver"
} {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
}
<<
\new Voice {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4
+ r4 <a' d fis>2 <a e' a>4
<d fis d'>4. <d fis d'>8 <a d a'>2
<g cis g'>4 <a d fis> <a cis e>2
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4
+ <d, d'>4 <d d'>2 <cis cis'>4
<b b'>4. <b' b'>8 <fis fis'>2
<e e'>4 <d d'> <a' a'>2
}
r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4
+ r4 <a' d fis>2 <a e' a>4
<d fis d'>4. <d fis d'>8 <a d a'>2
<g cis g'>4 <a d fis> <a cis e>2
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4
+ <d, d'>4 <d d'>2 <cis cis'>4
<b b'>4. <b' b'>8 <fis fis'>2
<e e'>4 <d d'> <a' a'>2
}
\dynamic f \italic \small { 2nd } \hspace #0.1 dynamic p
}
-violin = \relative c'' {
+violin = \relative {
\repeat volta 2 {
- c4._\dolce b8 a8 g a b
+ c''4._\dolce b8 a8 g a b
\padText
c4.^"hi there!" d8 e' f g d
c,4.\fthenp b8 c4 c-.
sehr viel schwerer lesbar, besonders die letzte Zeile.
@example
-violin = \relative c'' @{
+violin = \relative @{
\repeat volta 2 @{
- c4._\markup @{ \italic \bold dolce @} b8 a8 g a b
+ c''4._\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 @{
@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
- (parser location padding)
+ (padding)
(number?)
#{
\once \override TextScript.padding = $padding
Beispiel:
@lilypond[quote,ragged-right]
-\transpose f c' \relative c {
+\transpose f c' \relative {
\time 2/4
\set Score.skipBars = ##t
R2*3 |
zapsat příkazem @code{\tempo}:
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\time 3/4
\tempo "Andante"
- a4 a a
+ a'4 a a
\time 6/8
\tempo 4. = 96
a4. a
Zde je malý příklad, který obsahuje všechna tato vymezení:
@lilypond[verbatim,quote]
-\relative c, {
+\relative {
\clef "bass"
\time 3/4
\tempo "Andante" 4 = 120
- c2 e8 c'
+ c,2 e8 c'
g'2.
f4 e d
c4 c, r4
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Ladění výstupu
@chapter Ladění výstupu
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \override Score.MetronomeMark.transparent = ##t
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \override Score.MetronomeMark.stencil = ##f
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
@end example
@example
\include "definitions.ily"
-\relative c'' @{
+\relative @{
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
((0) (x11-color 'violet )) ; for B
)))
-\relative c' {
+\relative {
% Arrange to obtain color from color-notehead procedure
\override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
\override StaffSymbol.staff-space = #(magstep -4)
\override StaffSymbol.thickness = #(magstep -3)
}
- \relative c' {
+ \relative {
\global
\set Staff.instrumentName = #"Violin"
- c8.(\f^> b16 c d) ees8.(^> d16 c b)
+ c'8.(\f^> b16 c d) ees8.(^> d16 c b)
g8.(^> b16 c ees) g8-.^> r r
R2.
}
\new PianoStaff <<
\set PianoStaff.instrumentName = #"Piano"
- \new Staff \relative c' {
+ \new Staff \relative {
\global
s2.
- s4. s8 r8 r16 <c f aes c>
+ s4. s8 r8 r16 <c' f aes c>
<c f aes c>4.^> <c ees g>8 r r
}
- \new Staff \relative c {
+ \new Staff \relative {
\global
\clef "bass"
<<
den folgenden Bogen ausgewählt werden?
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(1.5 . 1)
e8[( f] g[ a b d,)] r4
Notenköpfe angeschnitten wird:
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(1.5 . 1)
e8[(_"15.39" f] g[ a b d,)] r4
Insgesamt also 13.08 Punkte:
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(2 . 3)
e8[(_"13.08" f] g[ a b d,)] r4
@lilypond[staffsize=19.5,line-width=14\cm]
global = { \key g \minor }
-partI = \relative c' {
+partI = \relative {
\voiceOne
- fis8 d' ees g, fis4 g
+ fis'8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
}
-partII = \relative c' {
+partII = \relative {
\voiceTwo
- d4 r4 r8 d'16 c bes8 c16 d
+ d'4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
}
-partIII = \relative c' {
+partIII = \relative {
\voiceOne
- r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+ r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
}
-partIV = \relative c {
+partIV = \relative {
\voiceTwo
d4 r r2
r8 d ees g, fis4 a
\new PianoStaff <<
\new Staff = "RH" <<
- \new Voice = "I" \relative c''' {
+ \new Voice = "I" \relative {
\time 3/4
\voiceOne
- \tuplet 7/6 { g8 g g g g g g }
+ \tuplet 7/6 { g''8 g g g g g g }
\oneVoice
r4 <b,, fis' g bes> r4\fermata
}
- \new Voice = "II" \relative c' {
+ \new Voice = "II" \relative {
\voiceTwo
- c4
+ c'4
\tuplet 5/4 {
<c ees>8 f g
\change Staff = "LH" \oneVoice
@lilypond[quote,ragged-right]
\score {
- \relative c' {
- \stemDown <e g b>4_>-\arpeggio
+ \relative {
+ \stemDown <e' g b>4_>-\arpeggio
\override Arpeggio.direction = #RIGHT
\stemUp <e g b>4^>-\arpeggio
}
((-2) (make-smaller-markup (make-bold-markup "2")))
(else "bla")))))))))
-\new Voice \relative c' {
+\new Voice \relative {
\stemUp
\set autoBeaming = ##f
\time 2/4
- <d f g>4
+ <d' f g>4
\once \override NoteHead.stencil = #note-head::brew-ez-stencil
\once \override NoteHead.font-size = #-7
\once \override NoteHead.font-family = #'sans
@lilypond[staffsize=14.3,line-width=15.9\cm]
global = {\key g \minor}
-partI = \relative c' {
+partI = \relative {
\voiceOne
- fis8 d' ees g, fis4 g
+ fis'8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
r2 r8 d16 ees f8 ees16 d
ees4 ~ 16 d c bes a4 r8 ees'16 d
a2 g\fermata \bar "|."
}
-partII = \relative c' {
+partII = \relative {
\voiceTwo
- d4 r4 r8 d'16 c bes8 c16 d
+ d'4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
r8 fis16 g a8 g16 fis g2 ~
2 r8 d' ees g,
bes4. <g b>8 <a c> r <d, g> r
<ees g>4 <d fis> d2
}
-partIII = \relative c' {
+partIII = \relative {
\voiceOne
- r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+ r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
bes2 ~ 8 b16 a g8 a16 b
c4 r r2
R1
r8 d ees g, fis4 g
r8 a16 bes c8 bes16 a b2
}
-partIV = \relative c {
+partIV = \relative {
\voiceTwo
d4 r r2
r8 d ees g, fis4 a
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Till Paala
@example
function =
#(define-scheme-function
- (parser location @var{Arg1} @var{Arg2} @dots{})
+ (@var{Arg1} @var{Arg2} @dots{})
(@var{Typ1?} @var{Typ2?} @dots{})
@var{body})
@end example
@example
noPointAndClick =
#(define-void-function
- (parser location)
+ ()
()
(ly:set-option 'point-and-click #f))
...
@example
function =
#(define-music-function
- (parser location @var{Arg1} @var{Arg2} @dots{})
+ (@var{Arg1} @var{Arg2} @dots{})
(@var{Typ1?} @var{Typ2?} @dots{})
@var{body})
@end example
@example
manualBeam =
#(define-music-function
- (parser location beg-end)
+ (beg-end)
(pair?)
#@{
\once \override Beam.positions = #beg-end
@lilypond[quote,verbatim,ragged-right]
manualBeam =
#(define-music-function
- (parser location beg end)
+ (beg end)
(number? number?)
#{
\once \override Beam.positions = #(cons beg end)
@lilypond[quote,verbatim,ragged-right]
AltOn =
#(define-music-function
- (parser location mag)
+ (mag)
(number?)
#{
\override Stem.length = #(* 7.0 mag)
@lilypond[quote,verbatim,ragged-right]
withAlt =
#(define-music-function
- (parser location mag music)
+ (mag music)
(number? ly:music?)
#{
\override Stem.length = #(* 7.0 mag)
@example
displayBarNum =
#(define-music-function
- (parser location)
+ ()
()
(if (eq? #t (ly:get-option 'display-bar-numbers))
#@{ \once \override Score.BarNumber.break-visibility = ##f #@}
Dynamikbefehle zu schreiben:
@lilypond[quote,verbatim,ragged-right]
-dyn=#(define-event-function (parser location arg) (markup?)
+dyn=#(define-event-function (arg) (markup?)
(make-dynamic-script arg))
\relative { c'\dyn pfsss }
@end lilypond
(eq? (car (last-pair siblings)) grob))
(ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
-\relative c'' {
+\relative {
\override Tie.after-line-breaking =
#my-callback
- c1 ~ \break c2 ~ 2
+ c''1 ~ \break c2 ~ 2
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Scheme-Übung
@chapter Scheme-Übung
Element vor die @code{articulations}-Eigenschaft gesetzt wird.
@example
-doubleSlur = #(define-music-function (parser location note) (ly:music?)
+doubleSlur = #(define-music-function (note) (ly:music?)
"Return: @{ note ( note ) @}.
`note' is supposed to be a single note."
(let ((note2 (ly:music-deep-copy note)))
eine Deklaration des Typs ihres einzigen @qq{wirklichen} Arguments:
@example
-addAccent = #(define-music-function (parser location note-event)
+addAccent = #(define-music-function (note-event)
(ly:music?)
"Add an accent ArticulationEvent to the articulations of `note-event',
which is supposed to be a NoteEvent expression."
@lilypond[quote,verbatim,ragged-right]
-padText = #(define-music-function (parser location padding) (number?)
+padText = #(define-music-function (padding) (number?)
#{
\once \override TextScript.padding = #padding
#})
@c It is - 'padding still works
@lilypond[quote,verbatim,ragged-right]
-tempoPadded = #(define-music-function (parser location padding tempotext)
+tempoPadded = #(define-music-function (padding tempotext)
(number? markup?)
#{
\once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
-\relative c'' {
+\relative {
\tempo \markup { "Low tempo" }
- c4 d e f g1
+ c''4 d e f g1
\tempoPadded #4.0 "High tempo"
g4 f e d c1
}
Sogar ganze Musikausdrücke können eingefügt werden:
@lilypond[quote,verbatim,ragged-right]
-pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
+pattern = #(define-music-function (x y) (ly:music? ly:music?)
#{
#x e8 a b $y b a e
#})
scheint am Anfang oft verwirrend, so dass sie hier etwas
genauer betrachtet wird.
-LilyPond unterscheidet strickt zwischen dem musikalischen Inhalt
+LilyPond unterscheidet strikt zwischen dem musikalischen Inhalt
und dem Satz (Layout). Die Alteration (@notation{B},
@notation{Kreuz} oder @notation{Auflösungszeichen}) einer Note gehört
zur Tonhöhe dazu und ist deshalb musikalischer
@c but the example is long enough to avoid looking strange.
@lilypond[verbatim,quote,noragged-right]
<<
- \relative c' {
+ \relative {
\key g \major
\time 3/4
\partial 4
- d4 | g4 g a8( b) | g4 g b8( c) |
+ d'4 | g4 g a8( b) | g4 g b8( c) |
d4 d e | c2
}
\addlyrics {
@lilypond[verbatim,quote]
<<
- \relative c'' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+ c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
}
- \relative c' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+ r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- dorn,
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Till Paala, Reinhold Kainhofer
@node Grundbegriffe
@c The following should appear as music without code
@c The three voice styles should be defined in -init
@lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
\key aes \major
<<
{ % Voice one
\voiceOneStyle
- c2 aes4. bes8
+ c''2 aes4. bes8
}
\\ % Voice two
{ \voiceTwoStyle
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceOne
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceTwo
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
Phrasierungsbogen ober sie gesetzt werden.
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
\voiceOneStyle
% This section is homophonic
- c16^( d e f
+ c'16^( d e f
% Start simultaneous section of three voices
<<
% Continue the main voice in parallel
an denen die Stimme nicht auftaucht, wie etwa hier:
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
% Initiate first voice
\new Voice {
\voiceOne
- c16^( d e f g4 f e | d2 e) |
+ c'16^( d e f g4 f e | d2 e) |
}
% Initiate second voice
\new Voice {
@lilypond[quote,verbatim]
<<
\new Voice = "one" {
- \relative c'' {
+ \relative {
\autoBeamOff
\time 2/4
- c4 b8. a16 | g4. f8 | e4 d | c2 |
+ c''4 b8. a16 | g4. f8 | e4 d | c2 |
}
}
\new Lyrics \lyricsto "one" {
@lilypond[quote,verbatim,ragged-right]
<<
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.instrumentName = #"Soprano"
- c2 c
+ c''2 c
}
- \new Staff \relative c' {
+ \new Staff \relative {
\set instrumentName = #"Alto" % Wrong!
- d2 d
+ d'2 d
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Score.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Voice \with {
\consists "Ambitus_engraver"
} {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
}
<<
\new Voice {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4
+ r4 <a' d fis>2 <a e' a>4
<d fis d'>4. <d fis d'>8 <a d a'>2
<g cis g'>4 <a d fis> <a cis e>2
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4
+ <d, d'>4 <d d'>2 <cis cis'>4
<b b'>4. <b' b'>8 <fis fis'>2
<e e'>4 <d d'> <a' a'>2
}
r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4
+ r4 <a' d fis>2 <a e' a>4
<d fis d'>4. <d fis d'>8 <a d a'>2
<g cis g'>4 <a d fis> <a cis e>2
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4
+ <d, d'>4 <d d'>2 <cis cis'>4
<b b'>4. <b' b'>8 <fis fis'>2
<e e'>4 <d d'> <a' a'>2
}
\dynamic f \italic \small { 2nd } \hspace #0.1 dynamic p
}
-violin = \relative c'' {
+violin = \relative {
\repeat volta 2 {
- c4._\dolce b8 a8 g a b
+ c''4._\dolce b8 a8 g a b
\padText
c4.^"hi there!" d8 e' f g d
c,4.\fthenp b8 c4 c-.
sehr viel schwerer lesbar, besonders die letzte Zeile.
@example
-violin = \relative c'' @{
+violin = \relative @{
\repeat volta 2 @{
- c4._\markup @{ \italic \bold dolce @} b8 a8 g a b
+ c''4._\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 @{
@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
- (parser location padding)
+ (padding)
(number?)
#{
\once \override TextScript.padding = #padding
Beispiel:
@lilypond[quote,ragged-right]
-\transpose f c' \relative c {
+\transpose f c' \relative {
\time 2/4
\set Score.skipBars = ##t
R2*3 |
mit dem @code{\tempo}-Befehl gesetzt werden:
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\time 3/4
\tempo "Andante"
- a4 a a
+ a'4 a a
\time 6/8
\tempo 4. = 96
a4. a
Hier ist ein kleines Beispiel, dass all diese Definitionen beinhaltet:
@lilypond[verbatim,quote]
-\relative c, {
+\relative {
\clef "bass"
\time 3/4
\tempo "Andante" 4 = 120
- c2 e8 c'
+ c,2 e8 c'
g'2.
f4 e d
c4 c, r4
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Die Ausgabe verändern
@chapter Die Ausgabe verändern
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \override Score.MetronomeMark.transparent = ##t
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \override Score.MetronomeMark.stencil = ##f
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
@end example
@example
\include "definitions.ily"
-\relative c'' @{
+\relative @{
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
((0) (x11-color 'violet )) ; for B
)))
-\relative c' {
+\relative {
% Arrange to obtain color from color-notehead procedure
\override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
@lilypond[quote,verbatim]
ficta = { \once \set suggestAccidentals = ##t }
-\score { \relative c''
+\score { \relative
\new MensuralVoice {
\once \set suggestAccidentals = ##t
- bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1
+ bes'4 a2 g2 \ficta fis8 \ficta e! fis2 g1
}
}
@end lilypond
@lilypond[verbatim,ragged-right]
\include "gregorian.ly"
-chant = \relative c' {
+chant = \relative {
\clef "G_8"
\set Score.timing = ##f
- c\breve \hide NoteHead c c c c c
+ c'\breve \hide NoteHead c c c c c
\undo \hide NoteHead
\override Stem.transparent = ##f \stemUp c4 b4 a
\hide Stem c2 c4 \divisioMaior
werden.
@lilypond[verbatim,quote]
-spiritus = \relative c' {
+spiritus = \relative {
\time 1/4
\override Lyrics.LyricText.X-extent = #'(0 . 3)
- d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
+ d'4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
d4 f8 g g8 d f g a g f4 g8 a a4 s
\tuplet 3/2 { g8 f d } e f g a g4
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Till Paala
@example
Funktion =
#(define-music-function
- (parser location @var{Arg1} @var{Arg2} @dots{})
+ (@var{Arg1} @var{Arg2} @dots{})
(@var{Typ1?} @var{Typ2?} @dots{})
#@{
@var{@dots{}Noten@dots{}}
@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
- (parser location padding)
+ (padding)
(number?)
#{
\once \override TextScript.padding = #padding
@lilypond[quote,verbatim,ragged-right]
custosNote =
#(define-music-function
- (parser location note)
+ (note)
(ly:music?)
#{
\tweak NoteHead.stencil #ly:text-interface::print
@lilypond[quote,verbatim,ragged-right]
tempoPadded =
#(define-music-function
- (parser location padding tempotext)
+ (padding tempotext)
(number? markup?)
#{
\once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
-\relative c'' {
+\relative {
\tempo \markup { "Low tempo" }
- c4 d e f g1
+ c''4 d e f g1
\tempoPadded #4.0 "High tempo"
g4 f e d c1
}
\score {
\new ChoirStaff <<
- \new Staff \relative c'' {
+ \new Staff \relative {
\stemUp
- c4. d8 e8 f g4
+ c''4. d8 e8 f g4
}
- \new Staff \relative c {
+ \new Staff \relative {
\clef bass
\stemDown
c4 g' f e
Eine Crescendo-Klammer, die mit @code{\!} beendet wird, endet an der rechten
Seite der Note, welcher @code{\!} zugeordnet ist. In dem Fall, dass es durch
den Beginn eines anderen @notation{crescendo}- oder @notation{decrescendo}-Zeichens
-beendet wird, endet es in der Mitt der Note, welche das nächste @code{\<}
+beendet wird, endet es in der Mitte der Note, welche das nächste @code{\<}
oder @code{\>} angehängt hat. Die nächste Klammer beginnt dann am rechten
Rand der selben Note anstatt dem normalerweise linken Rand, wenn die
vorherige Klammer mit @code{\!} beendet worden wäre.
gesetzt. Das gilt auch für die zweite Klammer einer Wiederholung.
@lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
\repeat volta 2 {
- e2. f4~
+ e'2. f4~
2 g2~
}
\alternative {
Bundnummern in Klammern gesetzt werden:
@lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
\repeat volta 2 {
- e2. f4~
+ e'2. f4~
2 g2~ }
\alternative {
{ g4 f2. }
mit einem Text erklärt.
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\clef "treble_8"
\override Staff.NoteHead.style = #'harmonic-mixed
- d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
+ d'^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
}
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Till Paala
}
\score {
- \new Staff \relative g, {
+ \new Staff \relative {
\clef bass
\key g \major
- \repeat unfold 2 { g16( d' b') a b d, b' d, } |
+ \repeat unfold 2 { g,16( d' b') a b d, b' d, } |
\repeat unfold 2 { g,16( e' c') b c e, c' e, } |
}
\header {
}
\score {
- \new Staff \relative b {
+ \new Staff \relative {
\clef bass
\key g \major
\partial 16 b16 |
}
tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
(add-toc-item! 'tocActMarkup text))
@end verbatim
}
tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
(add-toc-item! 'tocActMarkup text))
\book {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Till Paala
Notenbezeichnungen mit der Unterscheidung von b und h ist
auch möglich, siehe @ref{Notenbezeichnungen in anderen Sprachen}.
Die Notenbezeichnungen @code{c} bis @code{b}
-werden in der Oktave unter dem zweigestrichenen C
+werden in der Oktave unter dem eingestrichenen C
gesetzt.
@c don't use c' here.
die den Versetzungszeichenstil kurzzeitig auf @code{forget} umschaltet:
@lilypond[verbatim,quote]
-forget = #(define-music-function (parser location music) (ly:music?) #{
+forget = #(define-music-function (music) (ly:music?) #{
\accidentalStyle forget
#music
\accidentalStyle modern
@lilypond[quote,verbatim]
\score{
- \relative c' {
- \repeat unfold 8 { c8 } |
+ \relative {
+ \repeat unfold 8 { c'8 } |
\overrideTimeSignatureSettings
4/4 % timeSignatureFraction
1/4 % baseMomentFraction
Zahlen die Zähler sind.
@lilypond[quote,verbatim]
-\relative c' {
+\relative {
\compoundMeter #'((2 2 2 8))
- \repeat unfold 6 c8 \repeat unfold 12 c16
+ \repeat unfold 6 c'8 \repeat unfold 12 c16
}
@end lilypond
entsprechend der Werte angepasst.
@lilypond[quote,verbatim]
-\relative c' {
+\relative {
\compoundMeter #'((1 4) (3 8))
- \repeat unfold 5 c8 \repeat unfold 10 c16
+ \repeat unfold 5 c'8 \repeat unfold 10 c16
}
-\relative c' {
+\relative {
\compoundMeter #'((1 2 3 8) (3 4))
- \repeat unfold 12 c8
+ \repeat unfold 12 c'8
}
@end lilypond
}
}
\new Voice = two {
- \relative c' {
+ \relative {
\voiceTwo
\set Voice.beatStructure = #'(1 3 3)
- f8 f f f f f f
+ f'8 f f f f f f
}
}
>>
dem @code{q} verwendet:
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\chordRepeats #'(articulation-event)
- { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+ { <a'-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
q2 c, |
}
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Till Paala
}
labelContext =
#(define-music-function
- (parser location context)
+ (context)
(string?)
#{ s1*0^\markup { \typewriter #context } #})
Zu Einzelheiten siehe @ref{paper-Variablen für Verschiebungen und Einrückungen,,@code{@bs{}paper}-Variablen für Verschiebungen und Einrückungen}.
@lilypond[verbatim,quote,ragged-right]
-\relative c'' {
+\relative {
<<
\new Staff \with {
instrumentName = #"Alto Flute in G"
shortInstrumentName = #"Flt."
}
{
- f2 g4 f \break
+ f''2 g4 f \break
g4 f g2
}
\new Staff \with {
Um Stichnoten anders zu transponieren, muss @code{\transposedCueDuring}
benutzt werden. Dieser Befehl braucht ein zusätzliches Argument, um
(in absolutem Modus) die gedruckte Tonhöhe vorzugeben, mit der das
-das zweigestrichene C dargestellt werden soll. Das ist nützlich, wenn
+das eingestrichene C dargestellt werden soll. Das ist nützlich, wenn
man Stichnoten von einem Instrument mit einem vollständig anderen
Register benutzt:
<<
\new Staff <<
\time 2/4
- \new Voice = "one" \relative c'' {
+ \new Voice = "one" \relative {
\voiceOne
- c4 b8. a16 g4. r8 a4 ( b ) c2
+ c''4 b8. a16 g4. r8 a4 ( b ) c2
}
- \new Voice = "two" \relative c' {
+ \new Voice = "two" \relative {
\voiceTwo
- s2 s4. f8 e4 d c2
+ s2 s4. f'8 e4 d c2
}
>>
<<
\new Staff <<
\time 2/4
- \new Voice = "one" \relative c'' {
+ \new Voice = "one" \relative {
\voiceOne
- c4 b8. a16 g4. r8 a4 ( b ) c2
+ c''4 b8. a16 g4. r8 a4 ( b ) c2
}
- \new Voice = "two" \relative c' {
+ \new Voice = "two" \relative {
\voiceTwo
- s2 s4. f8 e8 d4. c2
+ s2 s4. f'8 e8 d4. c2
}
>>
% takes durations and alignment from notes in "one" initially
@lilypond[quote,ragged-right,verbatim]
{
- \relative c'' { \autoBeamOff
- r8 b c fis, fis c' b e, }
+ \relative { \autoBeamOff
+ r8 b' c fis, fis c' b e, }
\addlyrics { Che_in ques -- ta_e_in quel -- l'al -- tr'on -- da }
\addlyrics { "Che in" ques -- "ta e in" quel -- l'al -- tr'on -- da }
\addlyrics { Che~in ques -- ta~e~in quel -- l'al -- tr'on -- da }
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b }
+ \relative {
+ \repeat volta 2 { b'4 b }
\alternative { { b b } { b c } }
c4 c
}
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
+ \relative {
\set melismaBusyProperties = #'()
- \repeat volta 2 { b4 b ~}
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
\unset melismaBusyProperties
c4 c
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b ~}
+ \relative {
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
c4 c
}
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b ~}
+ \relative {
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
c4 c
}
\score {
<<
\new Voice = "melody" {
- \relative c' {
+ \relative {
<<
{
\voiceOne
- e4 e8 e
+ e'4 e8 e
}
\new Voice = "splitpart" {
\voiceTwo
@lilypond[verbatim,ragged-right,quote]
<<
- \relative c' \new Voice = "lahlah" {
+ \relative \new Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
\slurDotted
f8.[( g16])
a4
@lilypond[verbatim,quote]
<<
- \relative c' \new Voice = "lahlah" {
+ \relative \new Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
<<
\new Voice = "alternative" {
\voiceOne
@c manually adjusted to suit the imposed line length. -td
@lilypond[quote,verbatim,ragged-right]
-music = \relative c'' {
- \repeat unfold 3 { a4 a a a }
+music = \relative {
+ \repeat unfold 3 { a'4 a a a }
}
dialogue = \lyricmode {
@lilypond[quote,verbatim]
\include "arabic.ly"
-\relative do' {
+\relative {
\set Staff.extraNatural = ##f
- dod dob dosd \dwn dob dobsb dodsd do do
+ dod' dob dosd \dwn dob dobsb dodsd do do
}
@end lilypond
@lilypond[quote,verbatim]
\include "arabic.ly"
\score {
- \relative re' {
+ \relative {
\set Staff.extraNatural = ##f
\set Staff.autoBeaming = ##f
\key re \bayati
\time 10/8
- re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
+ re'4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb
fa4 fa16 [misb] misb8. [re16] re8 [misb] re [do] sisb
do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8
\override StaffSymbol.staff-space = #(magstep -4)
\override StaffSymbol.thickness = #(magstep -3)
}
- \relative c' {
+ \relative {
\global
\set Staff.instrumentName = #"Violin"
- c8.(\f^> b16 c d) ees8.(^> d16 c b)
+ c'8.(\f^> b16 c d) ees8.(^> d16 c b)
g8.(^> b16 c ees) g8-.^> r r
R2.
}
\new PianoStaff <<
\set PianoStaff.instrumentName = #"Piano"
- \new Staff \relative c' {
+ \new Staff \relative {
\global
s2.
- s4. s8 r8 r16 <c f aes c>
+ s4. s8 r8 r16 <c' f aes c>
<c f aes c>4.^> <c ees g>8 r r
}
- \new Staff \relative c {
+ \new Staff \relative {
\global
\clef "bass"
<<
de las tres configuraciones elegiríamos para la siguiente ligadura?
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(1.5 . 1)
e8[( f] g[ a b d,)] r4
rozar la cabeza de una de las figuras:
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(1.5 . 1)
e8[(_"15.39" f] g[ a b d,)] r4
de fealdad:
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(2 . 3)
e8[(_"13.08" f] g[ a b d,)] r4
@lilypond[staffsize=19.5,line-width=14\cm]
global = { \key g \minor }
-partI = \relative c' {
+partI = \relative {
\voiceOne
- fis8 d' ees g, fis4 g
+ fis'8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
}
-partII = \relative c' {
+partII = \relative {
\voiceTwo
- d4 r4 r8 d'16 c bes8 c16 d
+ d'4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
}
-partIII = \relative c' {
+partIII = \relative {
\voiceOne
- r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+ r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
}
-partIV = \relative c {
+partIV = \relative {
\voiceTwo
d4 r r2
r8 d ees g, fis4 a
\new PianoStaff <<
\new Staff = "RH" <<
- \new Voice = "I" \relative c''' {
+ \new Voice = "I" \relative {
\time 3/4
\voiceOne
- \tuplet 7/6 { g8 g g g g g g }
+ \tuplet 7/6 { g''8 g g g g g g }
\oneVoice
r4 <b,, fis' g bes> r4\fermata
}
- \new Voice = "II" \relative c' {
+ \new Voice = "II" \relative {
\voiceTwo
- c4
+ c'4
\tuplet 5/4 {
<c ees>8 f g
\change Staff = "LH" \oneVoice
@lilypond[quote,ragged-right]
\score {
- \relative c' {
- \stemDown <e g b>4_>-\arpeggio
+ \relative {
+ \stemDown <e' g b>4_>-\arpeggio
\override Arpeggio.direction = #RIGHT
\stemUp <e g b>4^>-\arpeggio
}
((-2) (make-smaller-markup (make-bold-markup "2")))
(else "bla")))))))))
-\new Voice \relative c' {
+\new Voice \relative {
\stemUp
\set autoBeaming = ##f
\time 2/4
- <d f g>4
+ <d' f g>4
\once \override NoteHead.stencil = #note-head::brew-ez-stencil
\once \override NoteHead.font-size = #-7
\once \override NoteHead.font-family = #'sans
@lilypond[staffsize=14.3,line-width=15.9\cm]
global = {\key g \minor}
-partI = \relative c' {
+partI = \relative {
\voiceOne
- fis8 d' ees g, fis4 g
+ fis'8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
r2 r8 d16 ees f8 ees16 d
ees4 ~ 16 d c bes a4 r8 ees'16 d
a2 g\fermata \bar "|."
}
-partII = \relative c' {
+partII = \relative {
\voiceTwo
- d4 r4 r8 d'16 c bes8 c16 d
+ d'4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
r8 fis16 g a8 g16 fis g2 ~
2 r8 d' ees g,
bes4. <g b>8 <a c> r <d, g> r
<ees g>4 <d fis> d2
}
-partIII = \relative c' {
+partIII = \relative {
\voiceOne
- r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+ r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
bes2 ~ 8 b16 a g8 a16 b
c4 r r2
R1
r8 d ees g, fis4 g
r8 a16 bes c8 bes16 a b2
}
-partIV = \relative c {
+partIV = \relative {
\voiceTwo
d4 r r2
r8 d ees g, fis4 a
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Interfaces para programadores
@chapter Interfaces para programadores
He aquí un ejemplo trivial:
@lilypond[verbatim,quote]
-ritpp = #(define-event-function (parser location) ()
+ritpp = #(define-event-function () ()
#{ ^"rit." \pp #}
)
@example
funcion =
#(define-scheme-function
- (parser location @var{arg1} @var{arg2} @dots{})
+ (@var{arg1} @var{arg2} @dots{})
(@var{tipo1?} @var{tipo2?} @dots{})
@var{cuerpo})
@end example
@example
noApuntarYPulsar =
#(define-void-function
- (parser location)
+ ()
()
(ly:set-option 'point-and-click #f))
@dots{}
@example
funcion =
#(define-music-function
- (parser location @var{arg1} @var{arg2} @dots{})
+ (@var{arg1} @var{arg2} @dots{})
(@var{tipo1?} @var{tipo2?} @dots{})
@var{cuerpo})
@end example
@example
barraManual =
#(define-music-function
- (parser location principio-final)
+ (principio-final)
(pair?)
#@{
\once \override Beam.positions = #principio-final
@lilypond[quote,verbatim,ragged-right]
manualBeam =
#(define-music-function
- (parser location beg end)
+ (beg end)
(number? number?)
#{
\once \override Beam.positions = #(cons beg end)
@example
crossStaff =
-#(define-music-function (parser location notes) (ly:music?)
+#(define-music-function (notes) (ly:music?)
(_i "Create cross-staff stems")
#@{
\temporary \override Stem.cross-staff = #cross-staff-connect
@lilypond[quote,verbatim,ragged-right]
AltOn =
#(define-music-function
- (parser location mag)
+ (mag)
(number?)
#{
\override Stem.length = #(* 7.0 mag)
@lilypond[quote,verbatim,ragged-right]
withAlt =
#(define-music-function
- (parser location mag music)
+ (mag music)
(number? ly:music?)
#{
\override Stem.length = #(* 7.0 mag)
@example
mostrarNumeroDeCompas =
#(define-music-function
- (parser location)
+ ()
()
(if (eq? #t (ly:get-option 'display-bar-numbers))
#@{ \once \override Score.BarNumber.break-visibility = ##f #@}
una forma de escribir indicaciones dinámicas arbitrarias:
@lilypond[quote,verbatim,ragged-right]
-dyn=#(define-event-function (parser location arg) (markup?)
+dyn=#(define-event-function (arg) (markup?)
(make-dynamic-script arg))
\relative { c'\dyn pfsss }
@end lilypond
interna o en el archivo 'define-grobs.scm':
@example
-\relative c'' @{
+\relative @{
\override Flag.X-offset = #(lambda (flag)
(let ((default (ly:flag::calc-x-offset flag)))
(* default 4.0)))
- c4. d8 a4. g8
+ c''4. d8 a4. g8
@}
@end example
(eq? (car (last-pair siblings)) grob))
(ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
-\relative c'' {
+\relative {
\override Tie.after-line-breaking =
#my-callback
- c1 ~ \break
+ c''1 ~ \break
c2 ~ 2
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Tutorial de Scheme
@appendix Tutorial de Scheme
@example
-doubleSlur = #(define-music-function (parser location note) (ly:music?)
+doubleSlur = #(define-music-function (note) (ly:music?)
"Return: @{ note ( note ) @}.
`note' is supposed to be a single note."
(let ((note2 (ly:music-deep-copy note)))
declaración del tipo de su único argumento @q{real}).
@example
-addAccent = #(define-music-function (parser location note-event)
+addAccent = #(define-music-function (note-event)
(ly:music?)
"Add an accent ArticulationEvent to the articulations of `note-event',
which is supposed to be a NoteEvent expression."
@ignore
@lilypond[quote,verbatim,ragged-right]
-padText = #(define-music-function (parser location padding) (number?)
+padText = #(define-music-function (padding) (number?)
#{
\once \override TextScript.padding = #padding
#})
@lilypond[quote,verbatim,ragged-right]
-tempoPadded = #(define-music-function (parser location padding tempotext)
+tempoPadded = #(define-music-function (padding tempotext)
(number? markup?)
#{
\once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
-\relative c'' {
+\relative {
\tempo \markup { "Low tempo" }
- c4 d e f g1
+ c''4 d e f g1
\tempoPadded #4.0 "High tempo"
g4 f e d c1
}
Incluso se le pueden pasar expresiones musicales:
@lilypond[quote,verbatim,ragged-right]
-pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
+pattern = #(define-music-function (x y) (ly:music? ly:music?)
#{
#x e8 a b #y b a e
#})
@c but the example is long enough to avoid looking strange.
@lilypond[verbatim,quote,noragged-right]
<<
- \relative c' {
+ \relative {
\key g \major
\time 3/4
\partial 4
- d4 | g4 g a8( b) | g4 g b8( c) |
+ d'4 | g4 g a8( b) | g4 g b8( c) |
d4 d e | c2
}
\addlyrics {
@lilypond[verbatim,quote]
<<
- \relative c'' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+ c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
}
- \relative c' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+ r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- dorn,
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Conceptos fundamentales
@chapter Conceptos fundamentales
@c The following should appear as music without code
@c The three voice styles should be defined in -init
@lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
\key aes \major
<<
{ % Voice one
\voiceOneStyle
- c2 aes4. bes8
+ c''2 aes4. bes8
}
\\ % Voice two
{ \voiceTwoStyle
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceOne
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceTwo
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
pueda trazar una ligadura por encima de ellas.
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
\voiceOneStyle
% This section is homophonic
- c16^( d e f
+ c'16^( d e f
% Start simultaneous section of three voices
<<
% Continue the main voice in parallel
que una voz está en silencio, como aquí:
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
% Initiate first voice
\new Voice {
\voiceOne
- c16^( d e f g4 f e | d2 e) |
+ c'16^( d e f g4 f e | d2 e) |
}
% Initiate second voice
\new Voice {
@lilypond[quote,verbatim]
<<
\new Voice = "one" {
- \relative c'' {
+ \relative {
\autoBeamOff
\time 2/4
- c4 b8. a16 | g4. f8 | e4 d | c2 |
+ c''4 b8. a16 | g4. f8 | e4 d | c2 |
}
}
\new Lyrics \lyricsto "one" {
@lilypond[quote,verbatim,ragged-right]
<<
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.instrumentName = #"Soprano"
- c2 c
+ c''2 c
}
- \new Staff \relative c' {
+ \new Staff \relative {
\set instrumentName = #"Alto" % Wrong!
- d2 d
+ d'2 d
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Score.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Voice \with {
\consists "Ambitus_engraver"
} {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
}
<<
\new Voice {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4 |
+ r4 <a' d fis>2 <a e' a>4 |
<d fis d'>4. <d fis d'>8 <a d a'>2 |
<g cis g'>4 <a d fis> <a cis e>2 |
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4 |
+ <d, d'>4 <d d'>2 <cis cis'>4 |
<b b'>4. <b' b'>8 <fis fis'>2 |
<e e'>4 <d d'> <a' a'>2 |
}
r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4 |
+ r4 <a' d fis>2 <a e' a>4 |
<d fis d'>4. <d fis d'>8 <a d a'>2 |
<g cis g'>4 <a d fis> <a cis e>2 |
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4 |
+ <d, d'>4 <d d'>2 <cis cis'>4 |
<b b'>4. <b' b'>8 <fis fis'>2 |
<e e'>4 <d d'> <a' a'>2 |
}
\dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}
-violin = \relative c'' {
+violin = \relative {
\repeat volta 2 {
- c4._\dolce b8 a8 g a b |
+ c''4._\dolce b8 a8 g a b |
\padText
c4.^"hi there!" d8 e' f g d |
c,4.\fthenp b8 c4 c-. |
leer, sobre todo la última línea.
@example
-violin = \relative c'' @{
+violin = \relative @{
\repeat volta 2 @{
- c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
+ c''4._\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 @{
@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
- (parser location padding)
+ (padding)
(number?)
#{
\once \override TextScript.padding = #padding
resultado
@lilypond[quote,ragged-right]
-\transpose f c' \relative c {
+\transpose f c' \relative {
\time 2/4
\set Score.skipBars = ##t
R2*3 |
metronómica} pueden establecerse con la instrucción @code{\tempo}:
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\time 3/4
\tempo "Andante"
- a4 a a
+ a'4 a a
\time 6/8
\tempo 4. = 96
a4. a
juntos:
@lilypond[verbatim,quote]
-\relative c, {
+\relative {
\clef "bass"
\time 3/4
\tempo "Andante" 4 = 120
- c2 e8 c'
+ c,2 e8 c'
g'2.
f4 e d
c4 c, r
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Trucar la salida
@chapter Trucar la salida
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \hide Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \override Score.MetronomeMark.stencil = ##f
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
@end example
@example
\include "definiciones.ily"
-\relative c'' @{
+\relative @{
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinete"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
((0) (x11-color 'violet )) ; for B
)))
-\relative c' {
+\relative {
% Arrange to obtain color from color-notehead procedure
\override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
sobre la ligadura:
@lilypond[quote,ragged-right,verbatim]
-\relative c'' {
- \[ g c, a' f d' \]
+\relative {
+ \[ g' c, a' f d' \]
a g f
\[ e f a g \]
}
@lilypond[quote,ragged-right,verbatim]
\score {
<<
- \new MensuralVoice = "discantus" \relative c'' {
+ \new MensuralVoice = "discantus" \relative {
\hide Score.BarNumber {
- c1\melisma bes a g\melismaEnd
+ c''1\melisma bes a g\melismaEnd
f\breve
\[ f1\melisma a c\breve d\melismaEnd \]
c\longa
@lilypond[quote,verbatim]
ficta = { \once \set suggestAccidentals = ##t }
-\score { \relative c''
+\score { \relative
\new MensuralVoice {
\once \set suggestAccidentals = ##t
- bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1
+ bes'4 a2 g2 \ficta fis8 \ficta e! fis2 g1
}
}
@end lilypond
@c @end example
@lilypond[quote,ragged-right,verbatim]
\score {
- \relative c' {
+ \relative {
\set Score.timing = ##f
\set Score.defaultBarType = "-"
\override NoteHead.style = #'petrucci
\override Staff.TimeSignature.style = #'mensural
\clef "petrucci-g"
- \[ c'\maxima g \]
+ \[ c''\maxima g \]
\[ d\longa
\override NoteHead.ligature-flexa = ##t
\once \override NoteHead.flexa-width = #3.2
transcribe de la siguiente manera:
@lilypond[quote,ragged-right]
-\relative c' {
+\relative {
\set Score.timing = ##f
\set Score.defaultBarType = "-"
\override NoteHead.style = #'petrucci
\override Staff.TimeSignature.style = #'mensural
\clef "petrucci-g"
- \[ c'\maxima g \]
+ \[ c''\maxima g \]
\[ d\longa
\override NoteHead.ligature-flexa = ##t
\once \override NoteHead.flexa-width = #3.2
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum
- \[ b \]
+ \[ b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum
- \[ \cavum b \]
+ \[ \cavum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum
- \[ \linea b \]
+ \[ \linea b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Auctum Ascendens
- \[ \auctum \ascendens b \]
+ \[ \auctum \ascendens b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Auctum Descendens
- \[ \auctum \descendens b \]
+ \[ \auctum \descendens b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Inclinatum
- \[ \inclinatum b \]
+ \[ \inclinatum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Inclinatum Auctum
- \[ \inclinatum \auctum b \]
+ \[ \inclinatum \auctum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Inclinatum Parvum
- \[ \inclinatum \deminutum b \]
+ \[ \inclinatum \deminutum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Virga
- \[ \virga b \]
+ \[ \virga b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Clivis vel Flexa
- \[ b \flexa g \]
+ \[ b' \flexa g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Clivis Aucta Descendens
- \[ b \flexa \auctum \descendens g \]
+ \[ b' \flexa \auctum \descendens g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Clivis Aucta Ascendens
- \[ b \flexa \auctum \ascendens g \]
+ \[ b' \flexa \auctum \ascendens g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Cephalicus
- \[ b \flexa \deminutum g \]
+ \[ b' \flexa \deminutum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Podatus vel Pes
- \[ g \pes b \]
+ \[ g' \pes b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Auctus Descendens
- \[ g \pes \auctum \descendens b \]
+ \[ g' \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Auctus Ascendens
- \[ g \pes \auctum \ascendens b \]
+ \[ g' \pes \auctum \ascendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Epiphonus
- \[ g \pes \deminutum b \]
+ \[ g' \pes \deminutum b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Initio Debilis
- \[ \deminutum g \pes b \]
+ \[ \deminutum g' \pes b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Auctus Descendens Initio Debilis
- \[ \deminutum g \pes \auctum \descendens b \]
+ \[ \deminutum g' \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus
- \[ a \pes b \flexa g \]
+ \[ a' \pes b \flexa g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Auctus Descendens
- \[ a \pes b \flexa \auctum \descendens g \]
+ \[ a' \pes b \flexa \auctum \descendens g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Deminutus
- \[ a \pes b \flexa \deminutum g \]
+ \[ a' \pes b \flexa \deminutum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Initio Debilis
- \[ \deminutum a \pes b \flexa g \]
+ \[ \deminutum a' \pes b \flexa g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Auctus Descendens Initio Debilis
- \[ \deminutum a \pes b \flexa \auctum \descendens g \]
+ \[ \deminutum a' \pes b \flexa \auctum \descendens g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Deminutus Initio Debilis
- \[ \deminutum a \pes b \flexa \deminutum g \]
+ \[ \deminutum a' \pes b \flexa \deminutum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Porrectus
- \[ a \flexa g \pes b \]
+ \[ a' \flexa g \pes b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Porrectus Auctus Descendens
- \[ a \flexa g \pes \auctum \descendens b \]
+ \[ a' \flexa g \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Porrectus Deminutus
- \[ a \flexa g \pes \deminutum b \]
+ \[ a' \flexa g \pes \deminutum b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Climacus
- \[ \virga b \inclinatum a \inclinatum g \]
+ \[ \virga b' \inclinatum a \inclinatum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Climacus Auctus
- \[ \virga b \inclinatum a \inclinatum \auctum g \]
+ \[ \virga b' \inclinatum a \inclinatum \auctum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Climacus Deminutus
- \[ \virga b \inclinatum a \inclinatum \deminutum g \]
+ \[ \virga b' \inclinatum a \inclinatum \deminutum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Scandicus
- \[ g \pes a \virga b \]
+ \[ g' \pes a \virga b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Scandicus Auctus Descendens
- \[ g \pes a \pes \auctum \descendens b \]
+ \[ g' \pes a \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Scandicus Deminutus
- \[ g \pes a \pes \deminutum b \]
+ \[ g' \pes a \pes \deminutum b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Quilisma
- \[ g \pes \quilisma a \pes b \]
+ \[ g' \pes \quilisma a \pes b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Quilisma Pes Auctus Descendens
- \[ g \quilisma a \pes \auctum \descendens b \]
+ \[ g' \quilisma a \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Oriscus
- \[ \oriscus b \]
+ \[ \oriscus b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Quassus
- \[ \oriscus g \pes \virga b \]
+ \[ \oriscus g' \pes \virga b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Quassus Auctus Descendens
- \[ \oriscus g \pes \auctum \descendens b \]
+ \[ \oriscus g' \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Salicus
- \[ g \oriscus a \pes \virga b \]
+ \[ g' \oriscus a \pes \virga b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Salicus Auctus Descendens
- \[ g \oriscus a \pes \auctum \descendens b \]
+ \[ g' \oriscus a \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Stropha
- \[ \stropha b \]
+ \[ \stropha b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Stropha Aucta
- \[ \stropha \auctum b \]
+ \[ \stropha \auctum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Bistropha
- \[ \stropha b \stropha b \]
+ \[ \stropha b' \stropha b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Tristropha
- \[ \stropha b \stropha b \stropha b \]
+ \[ \stropha b' \stropha b \stropha b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Trigonus
- \[ \stropha b \stropha b \stropha a \]
+ \[ \stropha b' \stropha b \stropha a \]
}
\layout { \neumeDemoLayout }
}
@lilypond[verbatim,ragged-right]
\include "gregorian.ly"
-chant = \relative c' {
+chant = \relative {
\clef "G_8"
\set Score.timing = ##f
- c\breve \hide NoteHead c c c c c
+ c'\breve \hide NoteHead c c c c c
\undo \hide NoteHead
\override Stem.transparent = ##f \stemUp c4 b4 a
\hide Stem c2 c4 \divisioMaior
@q{notas} @code{s}.
@lilypond[verbatim,quote]
-spiritus = \relative c' {
+spiritus = \relative {
\time 1/4
\override Lyrics.LyricText.X-extent = #'(0 . 3)
- d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
+ d'4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
d4 f8 g g8 d f g a g f4 g8 a a4 s
\tuplet 3/2 { g8 f d } e f g a g4
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Cambiar los valores por omisión
@chapter Cambiar los valores por omisión
@example
funcion =
#(define-music-function
- (parser location @var{arg1} @var{arg2} @dots{})
+ (@var{arg1} @var{arg2} @dots{})
(@var{type1?} @var{type2?} @dots{})
#@{
@var{@dots{}música@dots{}}
@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
- (parser location padding)
+ (padding)
(number?)
#{
\once \override TextScript.padding = #padding
@lilypond[quote,verbatim,ragged-right]
custosNote =
#(define-music-function
- (parser location note)
+ (note)
(ly:music?)
#{
\tweak NoteHead.stencil #ly:text-interface::print
@lilypond[quote,verbatim,ragged-right]
tempoPadded =
#(define-music-function
- (parser location padding tempotext)
+ (padding tempotext)
(number? markup?)
#{
\once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
-\relative c'' {
+\relative {
\tempo \markup { "Low tempo" }
- c4 d e f g1
+ c''4 d e f g1
\tempoPadded #4.0 "High tempo"
g4 f e d c1
}
\score {
\new ChoirStaff <<
- \new Staff \relative c'' {
+ \new Staff \relative {
\stemUp
- c4. d8 e8 f g4
+ c''4. d8 e8 f g4
}
- \new Staff \relative c {
+ \new Staff \relative {
\clef bass
\stemDown
c4 g' f e
una repetición.
@lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
\repeat volta 2 {
- e2. f4~
+ e'2. f4~
2 g2~
}
\alternative {
de imprimir los números de traste entre paréntesis:
@lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
\repeat volta 2 {
- e2. f4~
+ e'2. f4~
2 g2~ }
\alternative {
{ g4 f2. }
con un marcado de texto.
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\clef "treble_8"
\override Staff.NoteHead.style = #'harmonic-mixed
- d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
+ d'^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Entrada y salida generales
@chapter Entrada y salida generales
}
\score {
- \new Staff \relative g, {
+ \new Staff \relative {
\clef bass
\key g \major
- \repeat unfold 2 { g16( d' b') a b d, b' d, } |
+ \repeat unfold 2 { g,16( d' b') a b d, b' d, } |
\repeat unfold 2 { g,16( e' c') b c e, c' e, } |
}
\header {
}
\score {
- \new Staff \relative b {
+ \new Staff \relative {
\clef bass
\key g \major
\partial 16 b16 |
}
tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
(add-toc-item! 'tocActMarkup text))
@end verbatim
}
tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
(add-toc-item! 'tocActMarkup text))
\book {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Alturas
cambie localmente el estilo de alteraciones a @code{forget}:
@lilypond[verbatim,quote]
-forget = #(define-music-function (parser location music) (ly:music?) #{
+forget = #(define-music-function (music) (ly:music?) #{
\accidentalStyle forget
#music
\accidentalStyle modern
@lilypond[quote,verbatim]
\score {
\new Staff {
- \relative c' {
+ \relative {
\time #'(2 2 3) 7/8
- \repeat unfold 7 { c8 } |
+ \repeat unfold 7 { c'8 } |
\time #'(3 2 2) 7/8
\repeat unfold 7 { c8 } |
}
@lilypond[quote,verbatim]
\score{
- \relative c' {
- \repeat unfold 8 { c8 } |
+ \relative {
+ \repeat unfold 8 { c'8 } |
\overrideTimeSignatureSettings
4/4 % timeSignatureFraction
1/4 % baseMomentFraction
y los anteriores son los numeradores.
@lilypond[quote,verbatim]
-\relative c' {
+\relative {
\compoundMeter #'((2 2 2 8))
- \repeat unfold 6 c8 \repeat unfold 12 c16
+ \repeat unfold 6 c'8 \repeat unfold 12 c16
}
@end lilypond
dependiendo de los valores.
@lilypond[quote,verbatim]
-\relative c' {
+\relative {
\compoundMeter #'((1 4) (3 8))
- \repeat unfold 5 c8 \repeat unfold 10 c16
+ \repeat unfold 5 c'8 \repeat unfold 10 c16
}
-\relative c' {
+\relative {
\compoundMeter #'((1 2 3 8) (3 4))
- \repeat unfold 12 c8
+ \repeat unfold 12 c'8
}
@end lilypond
}
}
\new Voice = two {
- \relative c' {
+ \relative {
\voiceTwo
\set Voice.beatStructure = #'(1 3 3)
- f8 f f f f f f
+ f'8 f f f f f f
}
}
>>
divisoria cae en 9/8 en vez de hacerlo en 5/4.
@lilypond[quote,verbatim]
-\new Voice \relative c' {
+\new Voice \relative {
\set Timing.measureLength = #(ly:make-moment 5/4)
- c1 c4 |
+ c'1 c4 |
c1 c4 |
c4 c
\set Timing.measurePosition = #(ly:make-moment 5/8)
@code{q}.
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\chordRepeats #'(articulation-event)
- { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+ { <a'-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
q2 c, |
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@ignore
GDP TODO list
}
labelContext =
#(define-music-function
- (parser location context)
+ (context)
(string?)
#{ s1*0^\markup { \upright {\typewriter #context } } #})
consulte @ref{Variables de paper para desplazamientos y sangrados,,Variables de @code{@bs{}paper} para desplazamientos y sangrados}.
@lilypond[verbatim,quote,ragged-right]
-\relative c'' {
+\relative {
<<
\new Staff \with {
instrumentName = #"Alto Flute in G"
shortInstrumentName = #"Flt."
}
{
- f2 g4 f \break
+ f''2 g4 f \break
g4 f g2
}
\new Staff \with {
<<
\new Staff <<
\time 2/4
- \new Voice = "one" \relative c'' {
+ \new Voice = "one" \relative {
\voiceOne
- c4 b8. a16 g4. r8 a4 ( b ) c2
+ c''4 b8. a16 g4. r8 a4 ( b ) c2
}
- \new Voice = "two" \relative c' {
+ \new Voice = "two" \relative {
\voiceTwo
- s2 s4. f8 e4 d c2
+ s2 s4. f'8 e4 d c2
}
>>
<<
\new Staff <<
\time 2/4
- \new Voice = "one" \relative c'' {
+ \new Voice = "one" \relative {
\voiceOne
- c4 b8. a16 g4. r8 a4 ( b ) c2
+ c''4 b8. a16 g4. r8 a4 ( b ) c2
}
- \new Voice = "two" \relative c' {
+ \new Voice = "two" \relative {
\voiceTwo
- s2 s4. f8 e8 d4. c2
+ s2 s4. f'8 e8 d4. c2
}
>>
% takes durations and alignment from notes in "one" initially
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b }
+ \relative {
+ \repeat volta 2 { b'4 b }
\alternative { { b b } { b c } }
c4 c
}
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
+ \relative {
\set melismaBusyProperties = #'()
- \repeat volta 2 { b4 b ~}
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
\unset melismaBusyProperties
c4 c
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b ~}
+ \relative {
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
c4 c
}
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b ~}
+ \relative {
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
c4 c
}
\score {
<<
\new Voice = "melody" {
- \relative c' {
+ \relative {
<<
{
\voiceOne
- e4 e8 e
+ e'4 e8 e
}
\new Voice = "splitpart" {
\voiceTwo
@lilypond[verbatim,ragged-right,quote]
<<
- \relative c' \new Voice = "lahlah" {
+ \relative \new Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
\slurDotted
f8.[( g16])
a4
@lilypond[verbatim,quote]
<<
- \relative c' \new Voice = "lahlah" {
+ \relative \new Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
<<
\new Voice = "alternative" {
\voiceOne
@c manually adjusted to suit the imposed line length. -td
@lilypond[quote,verbatim,ragged-right]
-music = \relative c'' {
- \repeat unfold 3 { a4 a a a }
+music = \relative {
+ \repeat unfold 3 { a'4 a a a }
}
dialogue = \lyricmode {
@lilypond[quote,verbatim]
\include "arabic.ly"
-\relative do' {
+\relative {
\set Staff.extraNatural = ##f
- dod dob dosd \dwn dob dobsb dodsd do do
+ dod' dob dosd \dwn dob dobsb dodsd do do
}
@end lilypond
@lilypond[quote,verbatim]
\include "arabic.ly"
\score {
- \relative re' {
+ \relative {
\set Staff.extraNatural = ##f
\set Staff.autoBeaming = ##f
\key re \bayati
\time 10/8
- re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
+ re'4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb
fa4 fa16 [misb] misb8. [re16] re8 [misb] re [do] sisb
do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8
\new Staff \with {
\magnifyStaff #2/3
}
- \relative c' {
+ \relative {
\global
\set Staff.instrumentName = #"Violin"
- c8.(\f^> b16 c d) ees8.(^> d16 c b)
+ c'8.(\f^> b16 c d) ees8.(^> d16 c b)
g8.(^> b16 c ees) g8-.^> r r
R2.
}
\new PianoStaff <<
\set PianoStaff.instrumentName = #"Piano"
- \new Staff \relative c' {
+ \new Staff \relative {
\global
s2.
- s4. s8 r8 r16 <c f aes c>
+ s4. s8 r8 r16 <c' f aes c>
<c f aes c>4.^> <c ees g>8 r r
}
- \new Staff \relative c {
+ \new Staff \relative {
\global
\clef "bass"
<<
of the three configurations should we choose for the following slur?
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(1.5 . 1)
e8[( f] g[ a b d,)] r4
15.39 points for grazing one of the noteheads:
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(1.5 . 1)
e8[(_"15.39" f] g[ a b d,)] r4
descends for a total of 13.08 ugly points:
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(2 . 3)
e8[(_"13.08" f] g[ a b d,)] r4
@lilypond[staffsize=19.5,line-width=14\cm]
global = { \key g \minor }
-partI = \relative c' {
+partI = \relative {
\voiceOne
- fis8 d' ees g, fis4 g
+ fis'8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
}
-partII = \relative c' {
+partII = \relative {
\voiceTwo
- d4 r4 r8 d'16 c bes8 c16 d
+ d'4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
}
-partIII = \relative c' {
+partIII = \relative {
\voiceOne
- r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+ r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
}
-partIV = \relative c {
+partIV = \relative {
\voiceTwo
d4 r r2
r8 d ees g, fis4 a
\new PianoStaff <<
\new Staff = "RH" <<
- \new Voice = "I" \relative c''' {
+ \new Voice = "I" \relative {
\time 3/4
\voiceOne
- \tuplet 7/6 { g8 g g g g g g }
+ \tuplet 7/6 { g''8 g g g g g g }
\oneVoice
r4 <b,, fis' g bes> r4\fermata
}
- \new Voice = "II" \relative c' {
+ \new Voice = "II" \relative {
\voiceTwo
- c4
+ c'4
\tuplet 5/4 {
<c ees>8 f g
\change Staff = "LH" \oneVoice
@lilypond[quote,ragged-right]
\score {
- \relative c' {
- \stemDown <e g b>4_>-\arpeggio
+ \relative {
+ \stemDown <e' g b>4_>-\arpeggio
\override Arpeggio.direction = #RIGHT
\stemUp <e g b>4^>-\arpeggio
}
((-2) (make-smaller-markup (make-bold-markup "2")))
(else "bla")))))))))
-\new Voice \relative c' {
+\new Voice \relative {
\stemUp
\set autoBeaming = ##f
\time 2/4
- <d f g>4
+ <d' f g>4
\once \override NoteHead.stencil = #note-head::brew-ez-stencil
\once \override NoteHead.font-size = #-7
\once \override NoteHead.font-family = #'sans
@lilypond[staffsize=14.3,line-width=15.9\cm]
global = {\key g \minor}
-partI = \relative c' {
+partI = \relative {
\voiceOne
- fis8 d' ees g, fis4 g
+ fis'8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
r2 r8 d16 ees f8 ees16 d
ees4 ~ 16 d c bes a4 r8 ees'16 d
a2 g\fermata \bar "|."
}
-partII = \relative c' {
+partII = \relative {
\voiceTwo
- d4 r4 r8 d'16 c bes8 c16 d
+ d'4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
r8 fis16 g a8 g16 fis g2 ~
2 r8 d' ees g,
bes4. <g b>8 <a c> r <d, g> r
<ees g>4 <d fis> d2
}
-partIII = \relative c' {
+partIII = \relative {
\voiceOne
- r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+ r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
bes2 ~ 8 b16 a g8 a16 b
c4 r r2
R1
r8 d ees g, fis4 g
r8 a16 bes c8 bes16 a b2
}
-partIV = \relative c {
+partIV = \relative {
\voiceTwo
d4 r r2
r8 d ees g, fis4 a
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Interfaces for programmers
@chapter Interfaces for programmers
Here is a trivial example:
@lilypond[verbatim,quote]
-ritpp = #(define-event-function (parser location) ()
+ritpp = #(define-event-function () ()
#{ ^"rit." \pp #}
)
LilyPond code blocks and can deal with embedded Scheme expressions
starting with @code{$} and@w{ }@code{#}.
-@cindex parser (function argument)
-@cindex location
-
The reader extracts the LilyPond code block and generates a runtime
-call to the LilyPond @code{parser} to interpret the LilyPond code.
+call to the LilyPond parser to interpret the LilyPond code.
Scheme expressions embedded in the LilyPond code are evaluated in the
lexical environment of the LilyPond code block, so all local variables
and function parameters available at the point the LilyPond code block
with@tie{}@code{#}, but they are accessible as LilyPond variables, i.e.
prefixed with@tie{}@code{\}.
-If @code{location} (see @ref{Scheme functions}) refers to a valid
-input location (which it usually does inside of music/@/Scheme
-functions), all music generated inside the code block has its
-@samp{origin} set to @code{location}.
+All music generated inside the code block has its
+@samp{origin} set to the current input location.
A LilyPond code block may contain anything that you can use on the
right side of an assignment. In addition, an empty LilyPond block
@example
function =
#(define-scheme-function
- (parser location @var{arg1} @var{arg2} @dots{})
+ (@var{arg1} @var{arg2} @dots{})
(@var{type1?} @var{type2?} @dots{})
@var{body})
@end example
where
@multitable @columnfractions .33 .66
-@item @code{parser}
-@tab needs to be literally @code{parser} in order to give LilyPond code
-blocks (@code{#@{}@dots{}@code{#@}}) access to the parser.
-
-@item @code{location}
-@tab needs to be literally @code{location} in order to provide access
-to the input location object, which is used to provide error messages
-with file names and line numbers.
-
@item @code{@var{argN}}
@tab @var{n}th argument
Default values are not verified with @emph{predicate?} at either
definition or run time: it is your responsibility to deal with the
values you specify. Default values that happen to be music expressions
-are copied while setting @code{origin} to the @code{location} parameter.
+are copied while setting @code{origin} to the current input location.
@item @code{@var{body}}
@tab A sequence of Scheme forms evaluated in order, the last one being
@example
noPointAndClick =
#(define-void-function
- (parser location)
+ ()
()
(ly:set-option 'point-and-click #f))
@dots{}
@example
function =
#(define-music-function
- (parser location @var{arg1} @var{arg2} @dots{})
+ (@var{arg1} @var{arg2} @dots{})
(@var{type1?} @var{type2?} @dots{})
@var{body})
@end example
@example
manualBeam =
#(define-music-function
- (parser location beg-end)
+ (beg-end)
(pair?)
#@{
\once \override Beam.positions = #beg-end
@lilypond[quote,verbatim,ragged-right]
manualBeam =
#(define-music-function
- (parser location beg end)
+ (beg end)
(number? number?)
#{
\once \override Beam.positions = #(cons beg end)
@example
crossStaff =
-#(define-music-function (parser location notes) (ly:music?)
+#(define-music-function (notes) (ly:music?)
(_i "Create cross-staff stems")
#@{
\temporary \override Stem.cross-staff = #cross-staff-connect
@lilypond[quote,verbatim,ragged-right]
AltOn =
#(define-music-function
- (parser location mag)
+ (mag)
(number?)
#{
\override Stem.length = #(* 7.0 mag)
@lilypond[quote,verbatim,ragged-right]
withAlt =
#(define-music-function
- (parser location mag music)
+ (mag music)
(number? ly:music?)
#{
\override Stem.length = #(* 7.0 mag)
@example
displayBarNum =
#(define-music-function
- (parser location)
+ ()
()
(if (eq? #t (ly:get-option 'display-bar-numbers))
#@{ \once \override Score.BarNumber.break-visibility = ##f #@}
indicator, like @code{c'\pp}. Here is a way to write arbitrary
dynamics:
@lilypond[quote,verbatim,ragged-right]
-dyn=#(define-event-function (parser location arg) (markup?)
+dyn=#(define-event-function (arg) (markup?)
(make-dynamic-script arg))
\relative { c'\dyn pfsss }
@end lilypond
@lilypond[quote,verbatim]
desaturate =
#(define-music-function
- (parser location music) (ly:music?)
+ (music) (ly:music?)
#{
\applyContext
#(lambda (context)
(for-each revert-color '(NoteHead Stem Beam)))
#})
-\relative g' {
+\relative {
\override NoteHead.color = #darkblue
\override Stem.color = #darkblue
\override Beam.color = #darkblue
- g8 a b c
+ g'8 a b c
\desaturate { d c b a }
g b d b g2
}
can by found in the Internals Reference or the file 'define-grobs.scm':
@example
-\relative c'' @{
+\relative @{
\override Flag.X-offset = #(lambda (flag)
(let ((default (ly:flag::calc-x-offset flag)))
(* default 4.0)))
- c4. d8 a4. g8
+ c''4. d8 a4. g8
@}
@end example
(eq? (car (last-pair siblings)) grob))
(ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
-\relative c'' {
+\relative {
\override Tie.after-line-breaking =
#my-callback
- c1 ~ \break
+ c''1 ~ \break
c2 ~ 2
}
@end lilypond
Scheme programmers get information into and out of the music streams.
TODO -- figure out what goes in here and how to organize it
-
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Scheme tutorial
@chapter Scheme tutorial
put another element at the front of the @code{articulations} property.
@example
-doubleSlur = #(define-music-function (parser location note) (ly:music?)
+doubleSlur = #(define-music-function (note) (ly:music?)
"Return: @{ note ( note ) @}.
`note' is supposed to be a single note."
(let ((note2 (ly:music-deep-copy note)))
of its sole @q{real} argument).
@example
-addAccent = #(define-music-function (parser location note-event)
+addAccent = #(define-music-function (note-event)
(ly:music?)
"Add an accent ArticulationEvent to the articulations of `note-event',
which is supposed to be a NoteEvent expression."
@ignore
@lilypond[quote,verbatim,ragged-right]
-padText = #(define-music-function (parser location padding) (number?)
+padText = #(define-music-function (padding) (number?)
#{
\once \override TextScript.padding = #padding
#})
@lilypond[quote,verbatim,ragged-right]
-tempoPadded = #(define-music-function (parser location padding tempotext)
+tempoPadded = #(define-music-function (padding tempotext)
(number? markup?)
#{
\once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
-\relative c'' {
+\relative {
\tempo \markup { "Low tempo" }
- c4 d e f g1
+ c''4 d e f g1
\tempoPadded #4.0 "High tempo"
g4 f e d c1
}
Even music expressions can be passed in:
@lilypond[quote,verbatim,ragged-right]
-pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
+pattern = #(define-music-function (x y) (ly:music? ly:music?)
#{
#x e8 a b #y b a e
#})
\new Staff \with {
\magnifyStaff #2/3
}
- \relative c' {
+ \relative {
\global
\set Staff.instrumentName = #"Violin"
- c8.(\f^> b16 c d) ees8.(^> d16 c b)
+ c'8.(\f^> b16 c d) ees8.(^> d16 c b)
g8.(^> b16 c ees) g8-.^> r r
R2.
}
\new PianoStaff <<
\set PianoStaff.instrumentName = #"Piano"
- \new Staff \relative c' {
+ \new Staff \relative {
\global
s2.
- s4. s8 r8 r16 <c f aes c>
+ s4. s8 r8 r16 <c' f aes c>
<c f aes c>4.^> <c ees g>8 r r
}
- \new Staff \relative c {
+ \new Staff \relative {
\global
\clef "bass"
<<
choisir pour formater la liaison ?
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(1.5 . 1)
e8[( f] g[ a b d,)] r4
notamment pour l'effleurement de la tête de note.
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(1.5 . 1)
e8[(_"15.39" f] g[ a b d,)] r4
fait un total de 13,08 points de laideur.
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(2 . 3)
e8[(_"13.08" f] g[ a b d,)] r4
@lilypond[staffsize=19.5,line-width=14\cm]
global = { \key g \minor }
-partI = \relative c' {
+partI = \relative {
\voiceOne
- fis8 d' ees g, fis4 g
+ fis'8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
}
-partII = \relative c' {
+partII = \relative {
\voiceTwo
- d4 r4 r8 d'16 c bes8 c16 d
+ d'4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
}
-partIII = \relative c' {
+partIII = \relative {
\voiceOne
- r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+ r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
}
-partIV = \relative c {
+partIV = \relative {
\voiceTwo
d4 r r2
r8 d ees g, fis4 a
\new PianoStaff <<
\new Staff = "RH" <<
- \new Voice = "I" \relative c''' {
+ \new Voice = "I" \relative {
\time 3/4
\voiceOne
- \tuplet 7/6 {g8 g g g g g g}
+ \tuplet 7/6 {g''8 g g g g g g}
\oneVoice
r4 <b,, fis' g bes> r4\fermata
}
- \new Voice = "II" \relative c' {
+ \new Voice = "II" \relative {
\voiceTwo
- c4
+ c'4
\tuplet 5/4 {
<c ees>8 f g
\change Staff = "LH" \oneVoice
@lilypond[quote,ragged-right]
\score {
- \relative c' {
- \stemDown <e g b>4_>-\arpeggio
+ \relative {
+ \stemDown <e' g b>4_>-\arpeggio
\override Arpeggio.direction = #RIGHT
\stemUp <e g b>4^>-\arpeggio
}
((-2) (make-smaller-markup (make-bold-markup "2")))
(else "bla")))))))))
-\new Voice \relative c' {
+\new Voice \relative {
\stemUp
\set autoBeaming = ##f
\time 2/4
- <d f g>4
+ <d' f g>4
\once \override NoteHead.stencil = #note-head::brew-ez-stencil
\once \override NoteHead.font-size = #-7
\once \override NoteHead.font-family = #'sans
@lilypond[staffsize=14.3,line-width=15.9\cm]
global = {\key g \minor}
-partI = \relative c' {
+partI = \relative {
\voiceOne
- fis8 d' ees g, fis4 g
+ fis'8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
r2 r8 d16 ees f8 ees16 d
ees4 ~ 16 d c bes a4 r8 ees'16 d
a2 g\fermata \bar "|."
}
-partII = \relative c' {
+partII = \relative {
\voiceTwo
- d4 r4 r8 d'16 c bes8 c16 d
+ d'4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
r8 fis16 g a8 g16 fis g2 ~
2 r8 d' ees g,
bes4. <g b>8 <a c> r <d, g> r
<ees g>4 <d fis> d2
}
-partIII = \relative c' {
+partIII = \relative {
\voiceOne
- r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+ r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
bes2 ~ 8 b16 a g8 a16 b
c4 r r2
R1
r8 d ees g, fis4 g
r8 a16 bes c8 bes16 a b2
}
-partIV = \relative c {
+partIV = \relative {
\voiceTwo
d4 r r2
r8 d ees g, fis4 a
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Gilles Thibault
En voici un exemple basique :
@lilypond[verbatim,quote]
-ritpp = #(define-event-function (parser location) ()
+ritpp = #(define-event-function () ()
#{ ^"rit." \pp #}
)
@example
fonction =
#(define-scheme-function
- (parser location @var{arg1} @var{arg2}@dots{})
+ (@var{arg1} @var{arg2}@dots{})
(@var{type1?} @var{type2?}@dots{})
@var{corps})
@end example
@example
noPointAndClick =
#(define-void-function
- (parser location)
+ ()
()
(ly:set-option 'point-and-click #f))
@dots{}
@example
fonction =
#(define-music-function
- (parser location @var{arg1} @var{arg2}@dots{})
+ (@var{arg1} @var{arg2}@dots{})
(@var{type1?} @var{type2?}@dots{})
@var{corps})
@end example
@example
manualBeam =
#(define-music-function
- (parser location beg-end)
+ (beg-end)
(pair?)
#@{
\once \override Beam.positions = #beg-end
@lilypond[quote,verbatim,ragged-right]
manualBeam =
#(define-music-function
- (parser location beg end)
+ (beg end)
(number? number?)
#{
\once \override Beam.positions = #(cons beg end)
@example
crossStaff =
-#(define-music-function (parser location notes) (ly:music?)
+#(define-music-function (notes) (ly:music?)
(_i "Create cross-staff stems")
#@{
\temporary \override Stem.cross-staff = #cross-staff-connect
@lilypond[quote,verbatim,ragged-right]
AltOn =
#(define-music-function
- (parser location mag)
+ (mag)
(number?)
#{
\override Stem.length = #(* 7.0 mag)
@lilypond[quote,verbatim,ragged-right]
withAlt =
#(define-music-function
- (parser location mag music)
+ (mag music)
(number? ly:music?)
#{
\override Stem.length = #(* 7.0 mag)
@example
displayBarNum =
#(define-music-function
- (parser location)
+ ()
()
(if (eq? #t (ly:get-option 'display-bar-numbers))
#@{ \once \override Score.BarNumber.break-visibility = ##f #@}
quelle nuance :
@lilypond[quote,verbatim,ragged-right]
-dyn=#(define-event-function (parser location arg) (markup?)
+dyn=#(define-event-function (arg) (markup?)
(make-dynamic-script arg))
\relative { c'\dyn pfsss }
@end lilypond
@lilypond[quote,verbatim]
desaturate =
#(define-music-function
- (parser location music) (ly:music?)
+ (music) (ly:music?)
#{
\applyContext
#(lambda (context)
(for-each revert-color '(NoteHead Stem Beam)))
#})
-\relative g' {
+\relative {
\override NoteHead.color = #darkblue
\override Stem.color = #darkblue
\override Beam.color = #darkblue
- g8 a b c
+ g'8 a b c
\desaturate { d c b a }
g b d b g2
}
valeur usuelle de la propriété :
@example
-\relative c'' @{
+\relative @{
\override Flag.X-offset = #(lambda (flag)
(let ((default (ly:flag::calc-x-offset flag)))
(* default 4.0)))
- c4. d8 a4. g8
+ c''4. d8 a4. g8
@}
@end example
(eq? (car (last-pair siblings)) grob))
(ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
-\relative c'' {
+\relative {
\override Tie.after-line-breaking =
#my-callback
- c1 ~ \break
+ c''1 ~ \break
c2 ~ 2
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Jean-Charles Malahieude
élément en tête de la propriété @code{articulations}.
@example
-doubleSlur = #(define-music-function (parser location note) (ly:music?)
+doubleSlur = #(define-music-function (note) (ly:music?)
"Renvoie : @{ note ( note ) @}.
`note' est censé être une note unique."
(let ((note2 (ly:music-deep-copy note)))
type de son unique argument « réel ».
@example
-ajouteAccent = #(define-music-function (parser location note-event)
+ajouteAccent = #(define-music-function (note-event)
(ly:music?)
"Ajoute un accent (ArticulationEvent) aux articulations de `note-event',
qui est censé être une expression NoteEvent."
@ignore
@lilypond[quote,verbatim,ragged-right]
-padText = #(define-music-function (parser location padding) (number?)
+padText = #(define-music-function (padding) (number?)
#{
\once \override TextScript.padding = #padding
#})
@lilypond[quote,verbatim,ragged-right]
-tempoPadded = #(define-music-function (parser location padding tempotext)
+tempoPadded = #(define-music-function (padding tempotext)
(number? markup?)
#{
\once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
-\relative c'' {
+\relative {
\tempo \markup { "Low tempo" }
- c4 d e f g1
+ c''4 d e f g1
\tempoPadded #4.0 "High tempo"
g4 f e d c1
}
Even music expressions can be passed in:
@lilypond[quote,verbatim,ragged-right]
-pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
+pattern = #(define-music-function (x y) (ly:music? ly:music?)
#{
#x e8 a b $y b a e
#})
@c but the example is long enough to avoid looking strange.
@lilypond[verbatim,quote,noragged-right]
<<
- \relative c' {
+ \relative {
\key g \major
\time 3/4
\partial 4
- d4 | g4 g a8( b) | g4 g b8( c) |
+ d'4 | g4 g a8( b) | g4 g b8( c) |
d4 d e | c2
}
\addlyrics {
@lilypond[verbatim,quote]
<<
- \relative c'' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+ c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let flee -- cy flocks the hills a -- dorn, __
}
- \relative c' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+ r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
}
\addlyrics {
Let flee -- cy flocks the hills a -- dorn,
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: John Mandereau
@c The following should appear as music without code
@c The three voice styles should be defined in -init
@lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
\key aes \major
<<
{ % Voice one
\voiceOneStyle
- c2 aes4. bes8
+ c''2 aes4. bes8
}
\\ % Voice two
{ \voiceTwoStyle
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceOne
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceTwo
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
liaison de phrasé à l'ensemble.
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
\voiceOneStyle
% The following notes are homophonic
- c16^( d e f
+ c'16^( d e f
% Start simultaneous section of three voices
<<
% Continue the main voice in parallel
voix.
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
% Initiate first voice
\new Voice {
\voiceOne
- c16^( d e f g4 f e | d2 e2) |
+ c'16^( d e f g4 f e | d2 e2) |
}
% Initiate second voice
\new Voice {
@lilypond[quote,verbatim]
<<
\new Voice = "one" {
- \relative c'' {
+ \relative {
\autoBeamOff
\time 2/4
- c4 b8. a16 | g4. f8 | e4 d | c2 |
+ c''4 b8. a16 | g4. f8 | e4 d | c2 |
}
}
\new Lyrics \lyricsto "one" {
@lilypond[quote,verbatim,ragged-right]
<<
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.instrumentName = #"Soprano"
- c4 c
+ c''4 c
}
- \new Staff \relative c' {
+ \new Staff \relative {
\set instrumentName = #"Alto" % Wrong!
- d4 d
+ d'4 d
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Score.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Voice \with {
\consists "Ambitus_engraver"
} {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
}
<<
\new Voice {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4 |
+ r4 <a' d fis>2 <a e' a>4 |
<d fis d'>4. <d fis d'>8 <a d a'>2 |
<g cis g'>4 <a d fis> <a cis e>2 |
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4 |
+ <d, d'>4 <d d'>2 <cis cis'>4 |
<b b'>4. <b' b'>8 <fis fis'>2 |
<e e'>4 <d d'> <a' a'>2 |
}
r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4 |
+ r4 <a' d fis>2 <a e' a>4 |
<d fis d'>4. <d fis d'>8 <a d a'>2 |
<g cis g'>4 <a d fis> <a cis e>2 |
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4 |
+ <d, d'>4 <d d'>2 <cis cis'>4 |
<b b'>4. <b' b'>8 <fis fis'>2 |
<e e'>4 <d d'> <a' a'>2 |
}
\dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}
-violin = \relative c'' {
+violin = \relative {
\repeat volta 2 {
- c4._\dolce b8 a8 g a b |
+ c''4._\dolce b8 a8 g a b |
\centerText
c4.^"hi there!" d8 e f g d |
c4.\fthenp b8 c4 c-. |
lire, et particulièrement la dernière ligne.
@example
-violin = \relative c'' @{
+violin = \relative @{
\repeat volta 2 @{
- c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
+ c''4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
\once \override TextScript.self-alignment-X = #CENTER
c4.^"hi there!" d8 e f g d |
c4._\markup @{
@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
- (parser location padding)
+ (padding)
(number?)
#{
\once \override TextScript.padding = #padding
que le métronome :
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\time 3/4
\tempo "Andante"
- a4 a a
+ a'4 a a
\time 6/8
\tempo 4. = 96
a4. a
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Valentin Villenave, Nicolas Klutchnikoff, Damien Heurtebise
@c Translation checkers: Jean-Charles Malahieude, John Mandereau
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \hide Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \omit Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
@end example
@example
\include "definitions.ily"
-\relative c'' @{
+\relative @{
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
((0) (x11-color 'violet )) ; for B
)))
-\relative c' {
+\relative {
% Arrange to obtain color from color-notehead procedure
\override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
simple crochet au dessus de la ligature :
@lilypond[quote,ragged-right,verbatim]
-\relative c'' {
- \[ g c, a' f d' \]
+\relative {
+ \[ g' c, a' f d' \]
a g f
\[ e f a g \]
}
@lilypond[quote,ragged-right,verbatim]
\score {
<<
- \new MensuralVoice = "discantus" \relative c'' {
+ \new MensuralVoice = "discantus" \relative {
\hide Score.BarNumber {
- c1\melisma bes a g\melismaEnd
+ c''1\melisma bes a g\melismaEnd
f\breve
\[ f1\melisma a c\breve d\melismaEnd \]
c\longa
@lilypond[quote,verbatim]
ficta = { \once \set suggestAccidentals = ##t }
-\score { \relative c''
+\score { \relative
\new MensuralVoice {
\once \set suggestAccidentals = ##t
- bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1
+ bes'4 a2 g2 \ficta fis8 \ficta e! fis2 g1
}
}
@end lilypond
@c @end example
@lilypond[quote,ragged-right,verbatim]
\score {
- \relative c' {
+ \relative {
\set Score.timing = ##f
\set Score.defaultBarType = "-"
\override NoteHead.style = #'petrucci
\override Staff.TimeSignature.style = #'mensural
\clef "petrucci-g"
- \[ c'\maxima g \]
+ \[ c''\maxima g \]
\[ d\longa
\override NoteHead.ligature-flexa = ##t
\once \override NoteHead.flexa-width = #3.2
par le @code{Mensural_ligature_engraver}, on obtient
@lilypond[quote,ragged-right]
-\relative c' {
+\relative {
\set Score.timing = ##f
\set Score.defaultBarType = "-"
\override NoteHead.style = #'petrucci
\override Staff.TimeSignature.style = #'mensural
\clef "petrucci-g"
- \[ c'\maxima g \]
+ \[ c''\maxima g \]
\[ d\longa
\override NoteHead.ligature-flexa = ##t
\once \override NoteHead.flexa-width = #3.2
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum
- \[ b \]
+ \[ b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum
- \[ \cavum b \]
+ \[ \cavum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum
- \[ \linea b \]
+ \[ \linea b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Auctum Ascendens
- \[ \auctum \ascendens b \]
+ \[ \auctum \ascendens b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Auctum Descendens
- \[ \auctum \descendens b \]
+ \[ \auctum \descendens b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Inclinatum
- \[ \inclinatum b \]
+ \[ \inclinatum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Inclinatum Auctum
- \[ \inclinatum \auctum b \]
+ \[ \inclinatum \auctum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Inclinatum Parvum
- \[ \inclinatum \deminutum b \]
+ \[ \inclinatum \deminutum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Virga
- \[ \virga b \]
+ \[ \virga b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Clivis vel Flexa
- \[ b \flexa g \]
+ \[ b' \flexa g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Clivis Aucta Descendens
- \[ b \flexa \auctum \descendens g \]
+ \[ b' \flexa \auctum \descendens g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Clivis Aucta Ascendens
- \[ b \flexa \auctum \ascendens g \]
+ \[ b' \flexa \auctum \ascendens g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Cephalicus
- \[ b \flexa \deminutum g \]
+ \[ b' \flexa \deminutum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Podatus vel Pes
- \[ g \pes b \]
+ \[ g' \pes b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Auctus Descendens
- \[ g \pes \auctum \descendens b \]
+ \[ g' \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Auctus Ascendens
- \[ g \pes \auctum \ascendens b \]
+ \[ g' \pes \auctum \ascendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Epiphonus
- \[ g \pes \deminutum b \]
+ \[ g' \pes \deminutum b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Initio Debilis
- \[ \deminutum g \pes b \]
+ \[ \deminutum g' \pes b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Auctus Descendens Initio Debilis
- \[ \deminutum g \pes \auctum \descendens b \]
+ \[ \deminutum g' \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus
- \[ a \pes b \flexa g \]
+ \[ a' \pes b \flexa g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Auctus Descendens
- \[ a \pes b \flexa \auctum \descendens g \]
+ \[ a' \pes b \flexa \auctum \descendens g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Deminutus
- \[ a \pes b \flexa \deminutum g \]
+ \[ a' \pes b \flexa \deminutum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Initio Debilis
- \[ \deminutum a \pes b \flexa g \]
+ \[ \deminutum a' \pes b \flexa g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Auctus Descendens Initio Debilis
- \[ \deminutum a \pes b \flexa \auctum \descendens g \]
+ \[ \deminutum a' \pes b \flexa \auctum \descendens g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Deminutus Initio Debilis
- \[ \deminutum a \pes b \flexa \deminutum g \]
+ \[ \deminutum a' \pes b \flexa \deminutum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Porrectus
- \[ a \flexa g \pes b \]
+ \[ a' \flexa g \pes b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Porrectus Auctus Descendens
- \[ a \flexa g \pes \auctum \descendens b \]
+ \[ a' \flexa g \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Porrectus Deminutus
- \[ a \flexa g \pes \deminutum b \]
+ \[ a' \flexa g \pes \deminutum b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Climacus
- \[ \virga b \inclinatum a \inclinatum g \]
+ \[ \virga b' \inclinatum a \inclinatum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Climacus Auctus
- \[ \virga b \inclinatum a \inclinatum \auctum g \]
+ \[ \virga b' \inclinatum a \inclinatum \auctum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Climacus Deminutus
- \[ \virga b \inclinatum a \inclinatum \deminutum g \]
+ \[ \virga b' \inclinatum a \inclinatum \deminutum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Scandicus
- \[ g \pes a \virga b \]
+ \[ g' \pes a \virga b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Scandicus Auctus Descendens
- \[ g \pes a \pes \auctum \descendens b \]
+ \[ g' \pes a \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Scandicus Deminutus
- \[ g \pes a \pes \deminutum b \]
+ \[ g' \pes a \pes \deminutum b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Quilisma
- \[ g \pes \quilisma a \pes b \]
+ \[ g' \pes \quilisma a \pes b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Quilisma Pes Auctus Descendens
- \[ g \quilisma a \pes \auctum \descendens b \]
+ \[ g' \quilisma a \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Oriscus
- \[ \oriscus b \]
+ \[ \oriscus b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Quassus
- \[ \oriscus g \pes \virga b \]
+ \[ \oriscus g' \pes \virga b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Quassus Auctus Descendens
- \[ \oriscus g \pes \auctum \descendens b \]
+ \[ \oriscus g' \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Salicus
- \[ g \oriscus a \pes \virga b \]
+ \[ g' \oriscus a \pes \virga b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Salicus Auctus Descendens
- \[ g \oriscus a \pes \auctum \descendens b \]
+ \[ g' \oriscus a \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Stropha
- \[ \stropha b \]
+ \[ \stropha b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Stropha Aucta
- \[ \stropha \auctum b \]
+ \[ \stropha \auctum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Bistropha
- \[ \stropha b \stropha b \]
+ \[ \stropha b' \stropha b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Tristropha
- \[ \stropha b \stropha b \stropha b \]
+ \[ \stropha b' \stropha b \stropha b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Trigonus
- \[ \stropha b \stropha b \stropha a \]
+ \[ \stropha b' \stropha b \stropha a \]
}
\layout { \neumeDemoLayout }
}
@lilypond[verbatim,ragged-right]
\include "gregorian.ly"
-chant = \relative c' {
+chant = \relative {
\clef "G_8"
\set Score.timing = ##f
\hide Stem
- c\breve \hide NoteHead c c c c c
+ c'\breve \hide NoteHead c c c c c
\undo \hide NoteHead
\undo \hide Stem \stemUp c4 b4 a
\hide Stem c2 c4 \divisioMaior
peuvent se réaliser avec des @qq{notes silencieuses} (@code{s}).
@lilypond[verbatim,quote]
-spiritus = \relative c' {
+spiritus = \relative {
\time 1/4
\override Lyrics.LyricText.X-extent = #'(0 . 3)
- d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
+ d'4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
d4 f8 g g8 d f g a g f4 g8 a a4 s
\tuplet 3/2 { g8 f d } e f g a g4
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Gilles Thibault
@example
fonction =
#(define-music-function
- (parser location @var{arg1} @var{arg2}@dots{})
+ (@var{arg1} @var{arg2}@dots{})
(@var{type1?} @var{type2?}@dots{})
#@{
@var{@dots{}musique@dots{}}
@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
- (parser location padding)
+ (padding)
(number?)
#{
\once \override TextScript.padding = #padding
@lilypond[quote,verbatim,ragged-right]
custosNote =
#(define-music-function
- (parser location note)
+ (note)
(ly:music?)
#{
\tweak NoteHead.stencil #ly:text-interface::print
@lilypond[quote,verbatim,ragged-right]
tempoPadded =
#(define-music-function
- (parser location padding tempotext)
+ (padding tempotext)
(number? markup?)
#{
\once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
-\relative c'' {
+\relative {
\tempo \markup { "Low tempo" }
- c4 d e f g1
+ c''4 d e f g1
\tempoPadded #4.0 "High tempo"
g4 f e d c1
}
\score {
\new ChoirStaff <<
- \new Staff \relative c'' {
+ \new Staff \relative {
\stemUp
- c'4. d8 e8 f g4
+ c'''4. d8 e8 f g4
}
- \new Staff \relative c {
+ \new Staff \relative {
%% centre les lignes guides verticalement
\clef bass
\stemDown
seconde alternative d'une répétition.
@lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
\repeat volta 2 {
- e2. f4~
+ e'2. f4~
2 g2~
}
\alternative {
ces cases entre parenthèses.
@lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
\repeat volta 2 {
- e2. f4~
+ e'2. f4~
2 g2~ }
\alternative {
{ g4 f2. }
détaillés grâce à des indications textuelles.
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\clef "treble_8"
\override Staff.NoteHead.style = #'harmonic-mixed
- d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
+ d'^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Jean-Charles Malahieude, Valentin Villenave
}
\score {
- \new Staff \relative g, {
+ \new Staff \relative {
\clef bass
\key g \major
- \repeat unfold 2 { g16( d' b') a b d, b' d, } |
+ \repeat unfold 2 { g,16( d' b') a b d, b' d, } |
\repeat unfold 2 { g,16( e' c') b c e, c' e, } |
}
\header {
}
\score {
- \new Staff \relative b {
+ \new Staff \relative {
\clef bass
\key g \major
\partial 16 b16 |
}
tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
(add-toc-item! 'tocActMarkup text))
@end verbatim
}
tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
(add-toc-item! 'tocActMarkup text))
\book {
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Frédéric Chiasson, Jean-Charles Malahieude
@c Translation checkers: Valentin Villenave, Jean-Charles Malahieude
@code{forget}, permet d'obtenir quelque chose de présentable.
@lilypond[verbatim,quote]
-forget = #(define-music-function (parser location music) (ly:music?) #{
+forget = #(define-music-function (music) (ly:music?) #{
\accidentalStyle forget
#music
\accidentalStyle modern
@lilypond[quote,verbatim]
\score {
\new Staff {
- \relative c' {
+ \relative {
\time #'(2 2 3) 7/8
- \repeat unfold 7 { c8 } |
+ \repeat unfold 7 { c'8 } |
\time #'(3 2 2) 7/8
\repeat unfold 7 { c8 } |
}
@lilypond[quote,verbatim]
\score{
- \relative c' {
- \repeat unfold 8 { c8 } |
+ \relative {
+ \repeat unfold 8 { c'8 } |
\overrideTimeSignatureSettings
4/4 % timeSignatureFraction
1/4 % baseMomentFraction
métrique, les précédents représentent le @qq{numérateur}.
@lilypond[quote,verbatim]
-\relative c' {
+\relative {
\compoundMeter #'((2 2 2 8))
- \repeat unfold 6 c8 \repeat unfold 12 c16
+ \repeat unfold 6 c'8 \repeat unfold 12 c16
}
@end lilypond
valeurs.
@lilypond[quote,verbatim]
-\relative c' {
+\relative {
\compoundMeter #'((1 4) (3 8))
- \repeat unfold 5 c8 \repeat unfold 10 c16
+ \repeat unfold 5 c'8 \repeat unfold 10 c16
}
-\relative c' {
+\relative {
\compoundMeter #'((1 2 3 8) (3 4))
- \repeat unfold 12 c8
+ \repeat unfold 12 c'8
}
@end lilypond
}
}
\new Voice = two {
- \relative c' {
+ \relative {
\voiceTwo
\set Voice.beatStructure = #'(1 3 3)
- f8 f f f f f f
+ f'8 f f f f f f
}
}
>>
La barre de mesure suivante tombera donc à 9/8 et non à 5/8.
@lilypond[quote,verbatim]
-\new Voice \relative c' {
+\new Voice \relative {
\set Timing.measureLength = #(ly:make-moment 5/4)
- c1 c4 |
+ c'1 c4 |
c1 c4 |
c4 c
\set Timing.measurePosition = #(ly:make-moment 5/8)
seraient absents de l'accord construit par un @code{q}.
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\chordRepeats #'(articulation-event)
- { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+ { <a'-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
q2 c, |
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Frédéric Chiasson, Jean-Charles Malahieude
}
labelContext =
#(define-music-function
- (parser location context)
+ (context)
(string?)
#{ s1*0^\markup { \upright {\typewriter #context } } #})
reportez-vous au chapitre @ref{Variables d'indentation et de décalage}.
@lilypond[verbatim,quote,ragged-right]
-\relative c'' {
+\relative {
<<
\new Staff \with {
instrumentName = #"Alto Flute in G"
shortInstrumentName = #"Flt."
}
{
- f2 g4 f \break
+ f''2 g4 f \break
g4 f g2
}
\new Staff \with {
<<
\new Staff <<
\time 2/4
- \new Voice = "one" \relative c'' {
+ \new Voice = "one" \relative {
\voiceOne
- c4 b8. a16 g4. r8 a4 ( b ) c2
+ c''4 b8. a16 g4. r8 a4 ( b ) c2
}
- \new Voice = "two" \relative c' {
+ \new Voice = "two" \relative {
\voiceTwo
- s2 s4. f8 e4 d c2
+ s2 s4. f'8 e4 d c2
}
>>
<<
\new Staff <<
\time 2/4
- \new Voice = "one" \relative c'' {
+ \new Voice = "one" \relative {
\voiceOne
- c4 b8. a16 g4. r8 a4 ( b ) c2
+ c''4 b8. a16 g4. r8 a4 ( b ) c2
}
- \new Voice = "two" \relative c' {
+ \new Voice = "two" \relative {
\voiceTwo
- s2 s4. f8 e8 d4. c2
+ s2 s4. f'8 e8 d4. c2
}
>>
% takes durations and alignment from notes in "one" initially
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b }
+ \relative {
+ \repeat volta 2 { b'4 b }
\alternative { { b b } { b c } }
c4 c
}
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
+ \relative {
\set melismaBusyProperties = #'()
- \repeat volta 2 { b4 b ~}
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
\unset melismaBusyProperties
c4 c
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b ~}
+ \relative {
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
c4 c
}
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b ~}
+ \relative {
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
c4 c
}
\score {
<<
\new Voice = "melody" {
- \relative c' {
+ \relative {
<<
{
\voiceOne
- e4 e8 e
+ e'4 e8 e
}
\new Voice = "splitpart" {
\voiceTwo
@lilypond[verbatim,ragged-right,quote]
<<
- \relative c' \new Voice = "lahlah" {
+ \relative \new Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
\slurDotted
f8.[( g16])
a4
@lilypond[verbatim,quote]
<<
- \relative c' \new Voice = "lahlah" {
+ \relative \new Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
<<
\new Voice = "alternative" {
\voiceOne
@c manually adjusted to suit the imposed line length. -td
@lilypond[quote,verbatim,ragged-right]
-music = \relative c'' {
- \repeat unfold 3 { a4 a a a }
+music = \relative {
+ \repeat unfold 3 { a'4 a a a }
}
dialogue = \lyricmode {
@lilypond[quote,verbatim]
\include "arabic.ly"
-\relative do' {
+\relative {
\set Staff.extraNatural = ##f
- dod dob dosd \dwn dob dobsb dodsd do do
+ dod' dob dosd \dwn dob dobsb dodsd do do
}
@end lilypond
@lilypond[quote,verbatim]
\include "arabic.ly"
\score {
- \relative re' {
+ \relative {
\set Staff.extraNatural = ##f
\set Staff.autoBeaming = ##f
\key re \bayati
\time 10/8
- re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
+ re'4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb
fa4 fa16 [misb] misb8. [re16] re8 [misb] re [do] sisb
do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8
\new Staff \with {
\magnifyStaff #2/3
}
- \relative c' {
+ \relative {
\global
\set Staff.instrumentName = #"Violin"
- c8.(\f^> b16 c d) ees8.(^> d16 c b)
+ c'8.(\f^> b16 c d) ees8.(^> d16 c b)
g8.(^> b16 c ees) g8-.^> r r
R2.
}
\new PianoStaff <<
\set PianoStaff.instrumentName = #"Piano"
- \new Staff \relative c' {
+ \new Staff \relative {
\global
s2.
- s4. s8 r8 r16 <c f aes c>
+ s4. s8 r8 r16 <c' f aes c>
<c f aes c>4.^> <c ees g>8 r r
}
- \new Staff \relative c {
+ \new Staff \relative {
\global
\clef "bass"
<<
of the three configurations should we choose for the following slur?
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(1.5 . 1)
e8[( f] g[ a b d,)] r4
15.39 points for grazing one of the noteheads:
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(1.5 . 1)
e8[(_"15.39" f] g[ a b d,)] r4
descends for a total of 13.08 ugly points:
@lilypond
-\relative c {
+\relative {
\clef bass
\once \override Slur.positions = #'(2 . 3)
e8[(_"13.08" f] g[ a b d,)] r4
@lilypond[staffsize=19.5,line-width=14\cm]
global = { \key g \minor }
-partI = \relative c' {
+partI = \relative {
\voiceOne
- fis8 d' ees g, fis4 g
+ fis'8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
}
-partII = \relative c' {
+partII = \relative {
\voiceTwo
- d4 r4 r8 d'16 c bes8 c16 d
+ d'4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
}
-partIII = \relative c' {
+partIII = \relative {
\voiceOne
- r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+ r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
}
-partIV = \relative c {
+partIV = \relative {
\voiceTwo
d4 r r2
r8 d ees g, fis4 a
\new PianoStaff <<
\new Staff = "RH" <<
- \new Voice = "I" \relative c''' {
+ \new Voice = "I" \relative {
\time 3/4
\voiceOne
- \tuplet 7/6 { g8 g g g g g g }
+ \tuplet 7/6 { g''8 g g g g g g }
\oneVoice
r4 <b,, fis' g bes> r4\fermata
}
- \new Voice = "II" \relative c' {
+ \new Voice = "II" \relative {
\voiceTwo
- c4
+ c'4
\tuplet 5/4 {
<c ees>8 f g
\change Staff = "LH" \oneVoice
@lilypond[quote,ragged-right]
\score {
- \relative c' {
- \stemDown <e g b>4_>-\arpeggio
+ \relative {
+ \stemDown <e' g b>4_>-\arpeggio
\override Arpeggio.direction = #RIGHT
\stemUp <e g b>4^>-\arpeggio
}
((-2) (make-smaller-markup (make-bold-markup "2")))
(else "bla")))))))))
-\new Voice \relative c' {
+\new Voice \relative {
\stemUp
\set autoBeaming = ##f
\time 2/4
- <d f g>4
+ <d' f g>4
\once \override NoteHead.stencil = #note-head::brew-ez-stencil
\once \override NoteHead.font-size = #-7
\once \override NoteHead.font-family = #'sans
@lilypond[staffsize=14.3,line-width=15.9\cm]
global = {\key g \minor}
-partI = \relative c' {
+partI = \relative {
\voiceOne
- fis8 d' ees g, fis4 g
+ fis'8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
r2 r8 d16 ees f8 ees16 d
ees4 ~ 16 d c bes a4 r8 ees'16 d
a2 g\fermata \bar "|."
}
-partII = \relative c' {
+partII = \relative {
\voiceTwo
- d4 r4 r8 d'16 c bes8 c16 d
+ d'4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
r8 fis16 g a8 g16 fis g2 ~
2 r8 d' ees g,
bes4. <g b>8 <a c> r <d, g> r
<ees g>4 <d fis> d2
}
-partIII = \relative c' {
+partIII = \relative {
\voiceOne
- r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+ r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
bes2 ~ 8 b16 a g8 a16 b
c4 r r2
R1
r8 d ees g, fis4 g
r8 a16 bes c8 bes16 a b2
}
-partIV = \relative c {
+partIV = \relative {
\voiceTwo
d4 r r2
r8 d ees g, fis4 a
@c but the example is long enough to avoid looking strange.
@lilypond[verbatim,quote,noragged-right]
<<
- \relative c' {
+ \relative {
\key g \major
\time 3/4
\partial 4
- d4 g4 g a8( b) g4 g4
+ d'4 g4 g a8( b) g4 g4
b8( c) d4 d e4 c2
}
\addlyrics {
@lilypond[verbatim,quote]
<<
- \relative c'' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- c8 c([ bes]) a a([ g]) f f'4. b, c4.~ 4
+ c''8 c([ bes]) a a([ g]) f f'4. b, c4.~ 4
}
\addlyrics {
Let flee -- cy flocks the hills a -- dorn, __
}
- \relative c' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- r8 r4. r4 c8 a'([ g]) f f([ e]) d e([ d]) c bes'4
+ r8 r4. r4 c'8 a'([ g]) f f([ e]) d e([ d]) c bes'4
}
\addlyrics {
Let flee -- cy flocks the hills a -- dorn,
@c Translators: Griechisch Erika, Harmath Dénes
@c -*- coding: utf-8; mode: texinfo; -*-
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Alapfogalmak
@chapter Alapfogalmak
@translationof Fundamental concepts
@c The following should appear as music without code
@c The three voice styles should be defined in -init
@lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
\key aes \major
<<
{ % 1. szólam
\voiceOneStyle
- c2 aes4. bes8
+ c''2 aes4. bes8
}
\\ % 2. szólam
{ \voiceTwoStyle
permitting a phrasing slur to be drawn over them.
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
\voiceOneStyle
% A következő hangok monofónok
- c16^( d e f
+ c'16^( d e f
% Szimultán rész három szólammal
<<
% Continue the main voice in parallel
A szólamokat akkor érdemes így írni, ha a zene csak egy kis része polifón. Viszont amikor az egész ötvonalas kotta nagyrésze polifón, egyszerűbb, ha többszörös szólamokat használunk mindenütt, -- ritkított hangokkal, hogy átlépjük azokat a részeket, ahol a szólamok üresek. Az alábbi példa ezt mutatja:
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
% Initiate first voice
\new Voice {
\voiceOne
- c16^( d e f g4 f e | d2 e2) |
+ c'16^( d e f g4 f e | d2 e2) |
}
% Initiate second voice
\new Voice {
@lilypond[quote,verbatim,fragment]
<<
- \new Voice = "one" \relative c'' {
+ \new Voice = "one" \relative {
\autoBeamOff
\time 2/4
- c4 b8. a16 g4. f8 e4 d c2
+ c''4 b8. a16 g4. f8 e4 d c2
}
\new Lyrics \lyricsto "one" {
No more let sins and sor -- rows grow.
@lilypond[quote,verbatim,ragged-right]
<<
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.instrumentName = #"Soprano"
- c4 c
+ c''4 c
}
- \new Staff \relative c' {
+ \new Staff \relative {
\set instrumentName = #"Alto" % Wrong!
- d4 d
+ d'4 d
}
>>
@end lilypond
\new Staff \relative {
ais'4 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.extraNatural = ##f
- ais4 aes
+ ais'4 aes
}
>>
@end lilypond
\new Staff \relative {
ais'4 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Score.extraNatural = ##f
- ais4 aes
+ ais'4 aes
}
>>
@end lilypond
\new Voice \with {
\consists "Ambitus_engraver"
}
- \relative c'' {
+ \relative {
\voiceOne
- c a b g
+ c'' a b g
}
\new Voice
- \relative c' {
+ \relative {
\voiceTwo
- c e d f
+ c' e d f
}
>>
@end lilypond
}
<<
\new Voice
- \relative c'' {
+ \relative {
\voiceOne
- c a b g
+ c'' a b g
}
\new Voice
- \relative c' {
+ \relative {
\voiceTwo
- c e d f
+ c' e d f
}
>>
@end lilypond
r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4
+ r4 <a' d fis>2 <a e' a>4
<d fis d'>4. <d fis d'>8 <a d a'>2
<g cis g'>4 <a d fis> <a cis e>2
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4
+ <d, d'>4 <d d'>2 <cis cis'>4
<b b'>4. <b' b'>8 <fis fis'>2
<e e'>4 <d d'> <a' a'>2
}
r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4
+ r4 <a' d fis>2 <a e' a>4
<d fis d'>4. <d fis d'>8 <a d a'>2
<g cis g'>4 <a d fis> <a cis e>2
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4
+ <d, d'>4 <d d'>2 <cis cis'>4
<b b'>4. <b' b'>8 <fis fis'>2
<e e'>4 <d d'> <a' a'>2
}
dolce = \markup { \italic \bold dolce }
padText = { \once \override TextScript.padding = #5.0 }
fthenp=_\markup { \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
-violin = \relative c'' {
+violin = \relative {
\repeat volta 2 {
- c4._\dolce b8 a8 g a b
+ c''4._\dolce b8 a8 g a b
\padText
c4.^"hi there!" d8 e' f g d
c,4.\fthenp b8 c4 c-.
the last line.
@example
-violin = \relative c'' @{
+violin = \relative @{
\repeat volta 2 @{
- c4._\markup @{ \italic \bold dolce @} b8 a8 g a b
+ c''4._\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 @{ \dynamic f \italic \small @{ 2nd @}
@lilypond[quote,verbatim,ragged-right]
padText =
-#(define-music-function (parser location padding) (number?)
+#(define-music-function (padding) (number?)
#{
\once \override TextScript.padding = #padding
#})
this option to the music above, leads to the following result
@lilypond[quote,ragged-right]
-\transpose f c' \relative c {
+\transpose f c' \relative {
\time 2/4
\set Score.skipBars = ##t
R2*3
következő módon:
@lilypond[quote,verbatim]
-\relative c' {
- \repeat unfold 2 { c d e f }
+\relative {
+ \repeat unfold 2 { c' d e f }
}
@end lilypond
automatic font detection, add
@example
---with-ncsb-dir=/opt/local/share/ghostscript/fonts
+--with-fonts-dir=/opt/local/share/ghostscript/fonts
@end example
-\version "2.17.11"
+\version "2.19.22"
#(define (filter-instrument instrument-name tuning-alist)
(filter (lambda (entry)
pitches)))))
displayInstrumentDefaultTunings =
-#(define-music-function (parser location instrument) (string?)
+#(define-music-function (instrument) (string?)
(let* ((filtered-instruments (filter-instrument instrument defaultStringTunings))
(display-elements (map chord-display filtered-instruments)))
(make-music 'SequentialMusic 'elements display-elements)))
}
}
-\relative c''
+\relative
{
\set Staff.instrumentName = #"Gonv override"
- c2^\trill c
+ c''2^\trill c
\override NoteHead.font-family = #'gonville
\override Script.font-family = #'gonville
c^\trill c
-\version "2.17.30"
+\version "2.19.22"
\header {
texidoc ="@cindex Feta scripts
scriptStaff =
-#(define-music-function (parser location scripts) (list?)
+#(define-music-function (scripts) (list?)
(make-scripts-staff scripts))
scriptStaffAncient =
-#(define-music-function (parser location scripts) (list?)
+#(define-music-function (scripts) (list?)
(make-scripts-staff-ancient scripts))
@c but the example is long enough to avoid looking strange.
@lilypond[verbatim,quote,noragged-right]
<<
- \relative c' {
+ \relative {
\key g \major
\time 3/4
\partial 4
- d4 | g4 g a8( b) | g4 g b8( c) |
+ d'4 | g4 g a8( b) | g4 g b8( c) |
d4 d e | c2
}
\addlyrics {
@lilypond[verbatim,quote]
<<
- \relative c'' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+ c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
}
- \relative c' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+ r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- dorn,
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Concetti fondamentali
@chapter Concetti fondamentali
@c The following should appear as music without code
@c The three voice styles should be defined in -init
@lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
\key aes \major
<<
{ % Prima voce
\voiceOneStyle
- c2 aes4. bes8
+ c''2 aes4. bes8
}
\\ % Seconda voce
{ \voiceTwoStyle
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceOne
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceTwo
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
sì che sia possibile disegnare una legatura di frase sopra di esse.
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
\voiceOneStyle
% This section is homophonic
- c16^( d e f
+ c'16^( d e f
% Start simultaneous section of three voices
<<
% Continue the main voice in parallel
come nel seguente esempio:
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
% Initiate first voice
\new Voice {
\voiceOne
- c16^( d e f g4 f e | d2 e) |
+ c'16^( d e f g4 f e | d2 e) |
}
% Initiate second voice
\new Voice {
@lilypond[quote,verbatim]
<<
\new Voice = "one" {
- \relative c'' {
+ \relative {
\autoBeamOff
\time 2/4
- c4 b8. a16 | g4. f8 | e4 d | c2 |
+ c''4 b8. a16 | g4. f8 | e4 d | c2 |
}
}
\new Lyrics \lyricsto "one" {
@lilypond[quote,verbatim,ragged-right]
<<
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.instrumentName = #"Soprano"
- c2 c
+ c''2 c
}
- \new Staff \relative c' {
+ \new Staff \relative {
\set instrumentName = #"Alto" % Wrong!
- d2 d
+ d'2 d
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Score.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Voice \with {
\consists "Ambitus_engraver"
} {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
}
<<
\new Voice {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4 |
+ r4 <a' d fis>2 <a e' a>4 |
<d fis d'>4. <d fis d'>8 <a d a'>2 |
<g cis g'>4 <a d fis> <a cis e>2 |
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4 |
+ <d, d'>4 <d d'>2 <cis cis'>4 |
<b b'>4. <b' b'>8 <fis fis'>2 |
<e e'>4 <d d'> <a' a'>2 |
}
r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4 |
+ r4 <a' d fis>2 <a e' a>4 |
<d fis d'>4. <d fis d'>8 <a d a'>2 |
<g cis g'>4 <a d fis> <a cis e>2 |
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4 |
+ <d, d'>4 <d d'>2 <cis cis'>4 |
<b b'>4. <b' b'>8 <fis fis'>2 |
<e e'>4 <d d'> <a' a'>2 |
}
\dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}
-violin = \relative c'' {
+violin = \relative {
\repeat volta 2 {
- c4._\dolce b8 a8 g a b |
+ c''4._\dolce b8 a8 g a b |
\padText
c4.^"hi there!" d8 e' f g d |
c,4.\fthenp b8 c4 c-. |
soprattutto l'ultima linea.
@example
-violin = \relative c'' @{
+violin = \relative @{
\repeat volta 2 @{
- c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
+ c''4._\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 @{
@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
- (parser location padding)
+ (padding)
(number?)
#{
\once \override TextScript.padding = #padding
opzione alla musica precedente, si arriva al seguente risultato
@lilypond[quote,ragged-right]
-\transpose f c' \relative c {
+\transpose f c' \relative {
\time 2/4
\set Score.skipBars = ##t
R2*3 |
impostano col comando @code{\tempo}:
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\time 3/4
\tempo "Andante"
- a4 a a
+ a'4 a a
\time 6/8
\tempo 4. = 96
a4. a
Ecco un piccolo esempio che mostra tutti questi elementi insieme:
@lilypond[verbatim,quote]
-\relative c, {
+\relative {
\clef "bass"
\time 3/4
\tempo "Andante" 4 = 120
- c2 e8 c'
+ c,2 e8 c'
g'2.
f4 e d
c4 c, r
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Modifica dell'output
@chapter Modifica dell'output
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Indicazione di tempo visibile
\tempo 4=120
- a4 a a
+ a'4 a a
\once \hide Score.MetronomeMark
% Indicazione di tempo invisibile per allungare la fermata nel MIDI
\tempo 4=80
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Indicazione di tempo visibile
\tempo 4=120
- a4 a a
+ a'4 a a
\once \omit Score.MetronomeMark
% Indicazione di tempo invisibile per allungare la fermata nel MIDI
\tempo 4=80
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
@end example
@example
\include "definitions.ily"
-\relative c'' @{
+\relative @{
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
((0) (x11-color 'violet )) ; for B
)))
-\relative c' {
+\relative {
% Fa sì che il colore sia preso dalla procedura color-notehead
\override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
\score {
\new ChoirStaff <<
- \new Staff \relative c'' {
+ \new Staff \relative {
\stemUp
- c4. d8 e8 f g4
+ c''4. d8 e8 f g4
}
- \new Staff \relative c {
+ \new Staff \relative {
\clef bass
\stemDown
c4 g' f e
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Federico Bruni
@c Translation checkers: Luca Rossetto Casel
imposti localmente lo stile delle alterazioni su @code{forget}:
@lilypond[verbatim,quote]
-forget = #(define-music-function (parser location music) (ly:music?) #{
+forget = #(define-music-function (music) (ly:music?) #{
\accidentalStyle forget
#music
\accidentalStyle modern
@lilypond[quote,verbatim]
\score {
\new Staff {
- \relative c' {
+ \relative {
\time #'(2 2 3) 7/8
- \repeat unfold 7 { c8 } |
+ \repeat unfold 7 { c'8 } |
\time #'(3 2 2) 7/8
\repeat unfold 7 { c8 } |
}
@lilypond[quote,verbatim]
\score{
- \relative c' {
- \repeat unfold 8 { c8 } |
+ \relative {
+ \repeat unfold 8 { c'8 } |
\overrideTimeSignatureSettings
4/4 % timeSignatureFraction
1/4 % baseMomentFraction
indicano i numeri superiori del segno di tempo.
@lilypond[quote,verbatim]
-\relative c' {
+\relative {
\compoundMeter #'((2 2 2 8))
- \repeat unfold 6 c8 \repeat unfold 12 c16
+ \repeat unfold 6 c'8 \repeat unfold 12 c16
}
@end lilypond
valori.
@lilypond[quote,verbatim]
-\relative c' {
+\relative {
\compoundMeter #'((1 4) (3 8))
- \repeat unfold 5 c8 \repeat unfold 10 c16
+ \repeat unfold 5 c'8 \repeat unfold 10 c16
}
-\relative c' {
+\relative {
\compoundMeter #'((1 2 3 8) (3 4))
- \repeat unfold 12 c8
+ \repeat unfold 12 c'8
}
@end lilypond
}
}
\new Voice = two {
- \relative c' {
+ \relative {
\voiceTwo
\set Voice.beatStructure = #'(1 3 3)
- f8 f f f f f f
+ f'8 f f f f f f
}
}
>>
Quindi la stanghetta successiva si troverà a 9/8 invece che a 5/4.
@lilypond[quote,verbatim]
-\new Voice \relative c' {
+\new Voice \relative {
\set Timing.measureLength = #(ly:make-moment 5/4)
- c1 c4 |
+ c'1 c4 |
c1 c4 |
c4 c
\set Timing.measurePosition = #(ly:make-moment 5/8)
siano già presenti nell'accordo @code{q} stesso.
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\chordRepeats #'(articulation-event)
- { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+ { <a'-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
q2 c, |
}
@end lilypond
@ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents}.
@lilypond[verbatim,quote,ragged-right]
-\relative c'' {
+\relative {
<<
\new Staff \with {
instrumentName = #"Alto Flute in G"
shortInstrumentName = #"Flt."
}
{
- f2 g4 f \break
+ f''2 g4 f \break
g4 f g2
}
\new Staff \with {
<<
\new Staff <<
\time 2/4
- \new Voice = "one" \relative c'' {
+ \new Voice = "one" \relative {
\voiceOne
- c4 b8. a16 g4. r8 a4 ( b ) c2
+ c''4 b8. a16 g4. r8 a4 ( b ) c2
}
- \new Voice = "two" \relative c' {
+ \new Voice = "two" \relative {
\voiceTwo
- s2 s4. f8 e4 d c2
+ s2 s4. f'8 e4 d c2
}
>>
<<
\new Staff <<
\time 2/4
- \new Voice = "one" \relative c'' {
+ \new Voice = "one" \relative {
\voiceOne
- c4 b8. a16 g4. r8 a4 ( b ) c2
+ c''4 b8. a16 g4. r8 a4 ( b ) c2
}
- \new Voice = "two" \relative c' {
+ \new Voice = "two" \relative {
\voiceTwo
- s2 s4. f8 e8 d4. c2
+ s2 s4. f'8 e8 d4. c2
}
>>
% inizialmente prende le note e le durate da "one"
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b }
+ \relative {
+ \repeat volta 2 { b'4 b }
\alternative { { b b } { b c } }
c4 c
}
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
+ \relative {
\set melismaBusyProperties = #'()
- \repeat volta 2 { b4 b ~}
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
\unset melismaBusyProperties
c4 c
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b ~}
+ \relative {
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
c4 c
}
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b ~}
+ \relative {
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
c4 c
}
\score {
<<
\new Voice = "melody" {
- \relative c' {
+ \relative {
<<
{
\voiceOne
- e4 e8 e
+ e'4 e8 e
}
\new Voice = "splitpart" {
\voiceTwo
@lilypond[verbatim,ragged-right,quote]
<<
- \relative c' \new Voice = "lahlah" {
+ \relative \new Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
\slurDotted
f8.[( g16])
a4
@lilypond[verbatim,quote]
<<
- \relative c' \new Voice = "lahlah" {
+ \relative \new Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
<<
\new Voice = "alternative" {
\voiceOne
@c manually adjusted to suit the imposed line length. -td
@lilypond[quote,verbatim,ragged-right]
-music = \relative c'' {
- \repeat unfold 3 { a4 a a a }
+music = \relative {
+ \repeat unfold 3 { a'4 a a a }
}
dialogue = \lyricmode {
@c but the example is long enough to avoid looking strange.
@lilypond[verbatim,quote,noragged-right]
<<
- \relative c' {
+ \relative {
\key g \major
\time 3/4
\partial 4
- d4 | g4 g a8( b) | g4 g b8( c) |
+ d'4 | g4 g a8( b) | g4 g b8( c) |
d4 d e | c2
}
\addlyrics {
@lilypond[verbatim,quote]
<<
- \relative c'' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+ c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
}
- \relative c' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+ r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- dorn,
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
@c The following should appear as music without code
@c The three voice styles should be defined in -init
@lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
\key aes \major
<<
{ % Voice one
\voiceOneStyle
- c2 aes4. bes8
+ c''2 aes4. bes8
}
\\ % Voice two
{ \voiceTwoStyle
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceOne
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceTwo
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
示しています。
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
\voiceOneStyle
% This section is homophonic
- c16^( d e f
+ c'16^( d e f
% Start simultaneous section of three voices
<<
% Continue the main voice in parallel
ボイスが無音の場所を飛ばすには以下のように空白音符を使用します:
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
% Initiate first voice
\new Voice {
\voiceOne
- c16^( d e f g4 f e | d2 e) |
+ c'16^( d e f g4 f e | d2 e) |
}
% Initiate second voice
\new Voice {
@lilypond[quote,verbatim]
<<
\new Voice = "one" {
- \relative c'' {
+ \relative {
\autoBeamOff
\time 2/4
- c4 b8. a16 | g4. f8 | e4 d | c2 |
+ c''4 b8. a16 | g4. f8 | e4 d | c2 |
}
}
\new Lyrics \lyricsto "one" {
@lilypond[quote,verbatim,ragged-right]
<<
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.instrumentName = #"Soprano"
- c2 c
+ c''2 c
}
- \new Staff \relative c' {
+ \new Staff \relative {
\set instrumentName = #"Alto" % Wrong!
- d2 d
+ d'2 d
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Score.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Voice \with {
\consists "Ambitus_engraver"
} {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
}
<<
\new Voice {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4 |
+ r4 <a' d fis>2 <a e' a>4 |
<d fis d'>4. <d fis d'>8 <a d a'>2 |
<g cis g'>4 <a d fis> <a cis e>2 |
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4 |
+ <d, d'>4 <d d'>2 <cis cis'>4 |
<b b'>4. <b' b'>8 <fis fis'>2 |
<e e'>4 <d d'> <a' a'>2 |
}
r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4 |
+ r4 <a' d fis>2 <a e' a>4 |
<d fis d'>4. <d fis d'>8 <a d a'>2 |
<g cis g'>4 <a d fis> <a cis e>2 |
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4 |
+ <d, d'>4 <d d'>2 <cis cis'>4 |
<b b'>4. <b' b'>8 <fis fis'>2 |
<e e'>4 <d d'> <a' a'>2 |
}
\dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}
-violin = \relative c'' {
+violin = \relative {
\repeat volta 2 {
- c4._\dolce b8 a8 g a b |
+ c''4._\dolce b8 a8 g a b |
\padText
c4.^"hi there!" d8 e' f g d |
c,4.\fthenp b8 c4 c-. |
とても読み難く、特に最後の行が読み難いです。
@example
-violin = \relative c'' @{
+violin = \relative @{
\repeat volta 2 @{
- c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
+ c''4._\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 @{
@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
- (parser location padding)
+ (padding)
(number?)
#{
\once \override TextScript.padding = #padding
以下のような結果になります:
@lilypond[quote,ragged-right]
-\transpose f c' \relative c {
+\transpose f c' \relative {
\time 2/4
\set Score.skipBars = ##t
R2*3 |
@code{\tempo} コマンドでセットすることができます:
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\time 3/4
\tempo "Andante"
- a4 a a
+ a'4 a a
\time 6/8
\tempo 4. = 96
a4. a
以上の要素をすべて集めたちょっとした例をお見せします:
@lilypond[verbatim,quote]
-\relative c, {
+\relative {
\clef "bass"
\time 3/4
\tempo "Andante" 4 = 120
- c2 e8 c'
+ c,2 e8 c'
g'2.
f4 e d
c4 c, r
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \hide Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \omit Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
@end example
@example
\include "definitions.ily"
-\relative c'' @{
+\relative @{
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
((0) (x11-color 'violet )) ; for B
)))
-\relative c' {
+\relative {
% Arrange to obtain color from color-notehead procedure
\override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
@example
function =
#(define-music-function
- (parser location @var{arg1} @var{arg2} @dots{})
+ (@var{arg1} @var{arg2} @dots{})
(@var{type1?} @var{type2?} @dots{})
#@{
@var{@dots{}music@dots{}}
@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
- (parser location padding)
+ (padding)
(number?)
#{
\once \override TextScript.padding = $padding
@lilypond[quote,verbatim,ragged-right]
custosNote =
#(define-music-function
- (parser location note)
+ (note)
(ly:music?)
#{
\tweak NoteHead.stencil #ly:text-interface::print
@lilypond[quote,verbatim,ragged-right]
tempoPadded =
#(define-music-function
- (parser location padding tempotext)
+ (padding tempotext)
(number? markup?)
#{
\once \override Score.MetronomeMark.padding = $padding
\tempo \markup { \bold #tempotext }
#})
-\relative c'' {
+\relative {
\tempo \markup { "Low tempo" }
- c4 d e f g1
+ c''4 d e f g1
\tempoPadded #4.0 "High tempo"
g4 f e d c1
}
\score {
\new ChoirStaff <<
- \new Staff \relative c'' {
+ \new Staff \relative {
\stemUp
- c4. d8 e8 f g4
+ c''4. d8 e8 f g4
}
- \new Staff \relative c {
+ \new Staff \relative {
\clef bass
\stemDown
c4 g' f e
繰り返しの差し替え部分でも同様です。
@lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
\repeat volta 2 {
- e2. f4~
+ e'2. f4~
2 g2~
}
\alternative {
括弧付きフレット番号の譜刻をキャンセルします:
@lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
\repeat volta 2 {
- e2. f4~
+ e'2. f4~
2 g2~ }
\alternative {
{ g4 f2. }
通常、ハーモニクスにはテキスト マークアップによる説明も付け加えます。
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\clef "treble_8"
\override Staff.NoteHead.style = #'harmonic-mixed
- d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
+ d'^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Yoshiki Sawada
}
\score {
- \new Staff \relative g, {
+ \new Staff \relative {
\clef bass
\key g \major
- \repeat unfold 2 { g16( d' b') a b d, b' d, } |
+ \repeat unfold 2 { g,16( d' b') a b d, b' d, } |
\repeat unfold 2 { g,16( e' c') b c e, c' e, } |
}
\header {
}
\score {
- \new Staff \relative b {
+ \new Staff \relative {
\clef bass
\key g \major
\partial 16 b16 |
}
tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
(add-toc-item! 'tocActMarkup text))
@end verbatim
}
tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
(add-toc-item! 'tocActMarkup text))
\book {
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
局部的に臨時記号スタイルを @code{forget} に変更する関数を定義します:
@lilypond[verbatim,quote]
-forget = #(define-music-function (parser location music) (ly:music?) #{
+forget = #(define-music-function (music) (ly:music?) #{
\accidentalStyle forget
#music
\accidentalStyle modern
@lilypond[quote,verbatim]
\score{
- \relative c' {
- \repeat unfold 8 { c8 } |
+ \relative {
+ \repeat unfold 8 { c'8 } |
\overrideTimeSignatureSettings
4/4 % timeSignatureFraction
1/4 % baseMomentFraction
リストの @emph{最後の} 数字が拍子記号の分母になります。
@lilypond[quote,verbatim]
-\relative c' {
+\relative {
\compoundMeter #'((2 2 2 8))
- \repeat unfold 6 c8 \repeat unfold 12 c16
+ \repeat unfold 6 c'8 \repeat unfold 12 c16
}
@end lilypond
また、この関数で指定された値に基づいて自動連桁の設定は調節されます。
@lilypond[quote,verbatim]
-\relative c' {
+\relative {
\compoundMeter #'((1 4) (3 8))
- \repeat unfold 5 c8 \repeat unfold 10 c16
+ \repeat unfold 5 c'8 \repeat unfold 10 c16
}
-\relative c' {
+\relative {
\compoundMeter #'((1 2 3 8) (3 4))
- \repeat unfold 12 c8
+ \repeat unfold 12 c'8
}
@end lilypond
}
}
\new Voice = two {
- \relative c' {
+ \relative {
\voiceTwo
\set Voice.beatStructure = #'(1 3 3)
- f8 f f f f f f
+ f'8 f f f f f f
}
}
>>
次の小節線は 5/4 ではなく 9/8 の位置で引かれます。
@lilypond[quote,verbatim]
-\new Voice \relative c' {
+\new Voice \relative {
\set Timing.measureLength = #(ly:make-moment 5/4)
- c1 c4 |
+ c'1 c4 |
c1 c4 |
c4 c
\set Timing.measurePosition = #(ly:make-moment 5/8)
これにより持ち越されるイベントはすでに和音 @code{q} に存在しているものだけです。
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\chordRepeats #'(articulation-event)
- { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+ { <a'-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
q2 c, |
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@c Translators: Yoshiki Sawada
}
labelContext =
#(define-music-function
- (parser location context)
+ (context)
(string?)
#{ s1*0^\markup { \typewriter #context } #})
を参照してください。
@lilypond[verbatim,quote,ragged-right]
-\relative c'' {
+\relative {
<<
\new Staff \with {
instrumentName = #"Alto Flute in G"
shortInstrumentName = #"Flt."
}
{
- f2 g4 f \break
+ f''2 g4 f \break
g4 f g2
}
\new Staff \with {
<<
\new Staff <<
\time 2/4
- \new Voice = "one" \relative c'' {
+ \new Voice = "one" \relative {
\voiceOne
- c4 b8. a16 g4. r8 a4 ( b ) c2
+ c''4 b8. a16 g4. r8 a4 ( b ) c2
}
- \new Voice = "two" \relative c' {
+ \new Voice = "two" \relative {
\voiceTwo
- s2 s4. f8 e4 d c2
+ s2 s4. f'8 e4 d c2
}
>>
<<
\new Staff <<
\time 2/4
- \new Voice = "one" \relative c'' {
+ \new Voice = "one" \relative {
\voiceOne
- c4 b8. a16 g4. r8 a4 ( b ) c2
+ c''4 b8. a16 g4. r8 a4 ( b ) c2
}
- \new Voice = "two" \relative c' {
+ \new Voice = "two" \relative {
\voiceTwo
- s2 s4. f8 e8 d4. c2
+ s2 s4. f'8 e8 d4. c2
}
>>
% 最初は "one" の音符に揃えます
@lilypond[quote,ragged-right,verbatim]
{
- \relative c'' { \autoBeamOff
- r8 b c fis, fis c' b e, }
+ \relative { \autoBeamOff
+ r8 b' c fis, fis c' b e, }
\addlyrics { Che_in ques -- ta_e_in quel -- l'al -- tr'on -- da }
\addlyrics { "Che in" ques -- "ta e in" quel -- l'al -- tr'on -- da }
\addlyrics { Che~in ques -- ta~e~in quel -- l'al -- tr'on -- da }
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b }
+ \relative {
+ \repeat volta 2 { b'4 b }
\alternative { { b b } { b c } }
c4 c
}
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
+ \relative {
\set melismaBusyProperties = #'()
- \repeat volta 2 { b4 b ~}
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
\unset melismaBusyProperties
c4 c
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b ~}
+ \relative {
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
c4 c
}
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b ~}
+ \relative {
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
c4 c
}
\score {
<<
\new Voice = "melody" {
- \relative c' {
+ \relative {
<<
{
\voiceOne
- e4 e8 e
+ e'4 e8 e
}
\new Voice = "splitpart" {
\voiceTwo
@lilypond[verbatim,ragged-right,quote]
<<
- \relative c' \new Voice = "lahlah" {
+ \relative \new Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
\slurDotted
f8.[( g16])
a4
@c KEEP LY
@lilypond[verbatim,quote]
<<
- \relative c' \new Voice = "lahlah" {
+ \relative \new Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
<<
\new Voice = "alternative" {
\voiceOne
@c manually adjusted to suit the imposed line length. -td
@lilypond[quote,verbatim,ragged-right]
-music = \relative c'' {
- \repeat unfold 3 { a4 a a a }
+music = \relative {
+ \repeat unfold 3 { a'4 a a a }
}
dialogue = \lyricmode {
@lilypond[quote,verbatim]
\include "arabic.ly"
-\relative do' {
+\relative {
\set Staff.extraNatural = ##f
- dod dob dosd \dwn dob dobsb dodsd do do
+ dod' dob dosd \dwn dob dobsb dodsd do do
}
@end lilypond
@lilypond[quote,verbatim]
\include "arabic.ly"
\score {
- \relative re' {
+ \relative {
\set Staff.extraNatural = ##f
\set Staff.autoBeaming = ##f
\key re \bayati
\time 10/8
- re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
+ re'4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb
fa4 fa16 [misb] misb8. [re16] re8 [misb] re [do] sisb
do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8
@c but the example is long enough to avoid looking strange.
@lilypond[verbatim,quote,noragged-right]
<<
- \relative c' {
+ \relative {
\key g \major
\time 3/4
\partial 4
- d4 | g4 g a8( b) | g4 g b8( c) |
+ d'4 | g4 g a8( b) | g4 g b8( c) |
d4 d e | c2
}
\addlyrics {
@lilypond[verbatim,quote]
<<
- \relative c'' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+ c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let flee -- cy flocks the hills a -- dorn, __
}
- \relative c' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+ r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
}
\addlyrics {
Let flee -- cy flocks the hills a -- dorn,
section of music is repeated many times.
@lilypond[verbatim,quote]
-tripletA = \tuplet 3/2 { c,8 e g }
+tripletA = \relative { \tuplet 3/2 { c'8 e g } }
barA = { \tripletA \tripletA \tripletA \tripletA }
-\relative c'' {
- \barA \barA
-}
+{ \barA \barA }
@end lilypond
Variables may be used for many other types of objects in
}
@end lilypond
-All these quotes makes the input less readable and they are a source
-of errors. With @code{\relative}, the previous example is much
-easier to read and type:
+@funindex \fixed
+Common octave marks can be indicated just once, using the command
+@code{\fixed} followed by a reference pitch:
+
+@lilypond[verbatim,quote]
+\fixed c'' {
+ \key a \major
+ \time 6/8
+ cis8. d16 cis8 e4 e8 |
+ b,8. cis16 b,8 d4 d8 |
+}
+@end lilypond
+
+With @code{\relative}, the previous example needs no octave marks
+because this melody moves in steps no larger than three staff positions:
@lilypond[verbatim,quote]
\relative {
\relative { c'4 \relative { f'' g } c }
@end lilypond
-@funindex \absolute
-If you are using absolute music inside of relative, you'll need to
-mark the absolute music explicitly with @code{\absolute} to stop
-it from becoming part of the relative music:
+To use absolute mode inside of @code{\relative}, put the absolute
+music inside @code{\fixed c @{ @dots{} @}} and the absolute pitches
+will not affect the octaves of the relative music:
@lilypond[verbatim,quote]
-\relative { c'4 \absolute { f'' g'' } c }
+\relative {
+ c'4 \fixed c { f'' g'' } c |
+ c4 \fixed c'' { f g } c
+}
@end lilypond
@node After the tutorial
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Fundamental concepts
@chapter Fundamental concepts
preceding chord. So in
@example
-\relative c' @{ noteA << < noteB noteC > \\ noteD >> noteE @}
+\relative @{ noteA << < noteB noteC > \\ noteD >> noteE @}
@end example
@noindent
command at the start of each voice:
@example
-\relative c' @{ noteA @dots{} @}
+\relative @{ noteA @dots{} @}
<<
- \relative c'' @{ < noteB noteC > @dots{} @}
+ \relative @{ < noteB noteC > @dots{} @}
\\
- \relative g' @{ noteD @dots{} @}
+ \relative @{ noteD @dots{} @}
>>
-\relative c' @{ noteE @dots{} @}
+\relative @{ noteE @dots{} @}
@end example
Let us finally analyze the voices in a more complex piece of music.
@c The following should appear as music without code
@c The three voice styles should be defined in -init
@lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
\key aes \major
<<
{ % Voice one
\voiceOneStyle
- c2 aes4. bes8
+ c''2 aes4. bes8
}
\\ % Voice two
{ \voiceTwoStyle
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceOne
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceTwo
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
permitting a phrasing slur to be drawn over them.
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
\voiceOneStyle
% This section is homophonic
- c16^( d e f
+ c'16^( d e f
% Start simultaneous section of three voices
<<
% Continue the main voice in parallel
as here:
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
% Initiate first voice
\new Voice {
\voiceOne
- c16^( d e f g4 f e | d2 e) |
+ c'16^( d e f g4 f e | d2 e) |
}
% Initiate second voice
\new Voice {
@lilypond[quote,verbatim]
<<
\new Voice = "one" {
- \relative c'' {
+ \relative {
\autoBeamOff
\time 2/4
- c4 b8. a16 | g4. f8 | e4 d | c2 |
+ c''4 b8. a16 | g4. f8 | e4 d | c2 |
}
}
\new Lyrics \lyricsto "one" {
SopMusic = \relative { c'4 | e4. e8 g4 g | a4 a g }
AltoMusic = \relative { c'4 | c4. c8 e4 e | f4 f e }
-TenorMusic = \relative { e4 | g4. g8 c4. b8 | a8 b c d e4 }
-BassMusic = \relative { c4 | c4. c8 c4 c | f8 g a b c4 }
+TenorMusic = \relative { e4 | g4. g8 c4. b8 | a8 b c d e4 }
+BassMusic = \relative { c4 | c4. c8 c4 c | f8 g a b c4 }
VerseOne =
\lyricmode { E -- | ter -- nal fa -- ther, | strong to save, }
@lilypond[quote,verbatim,ragged-right]
<<
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.instrumentName = #"Soprano"
- c2 c
+ c''2 c
}
- \new Staff \relative c' {
+ \new Staff \relative {
\set instrumentName = #"Alto" % Wrong!
- d2 d
+ d'2 d
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Score.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Voice \with {
\consists "Ambitus_engraver"
} {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
}
<<
\new Voice {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
the cello @code{celloMusic}. While we're doing this, let's rename
@code{text} to be @code{sopranoLyrics}. Remember to rename both
instances of all these names -- both the initial definition (the
-@code{melody = \relative c' @{ } part) and the name's use (in the
+@code{melody = \relative @{ } part) and the name's use (in the
@code{\score} section).
While we're doing this, let's change the cello part's staff --
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4 |
+ r4 <a' d fis>2 <a e' a>4 |
<d fis d'>4. <d fis d'>8 <a d a'>2 |
<g cis g'>4 <a d fis> <a cis e>2 |
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4 |
+ <d, d'>4 <d d'>2 <cis cis'>4 |
<b b'>4. <b' b'>8 <fis fis'>2 |
<e e'>4 <d d'> <a' a'>2 |
}
r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4 |
+ r4 <a' d fis>2 <a e' a>4 |
<d fis d'>4. <d fis d'>8 <a d a'>2 |
<g cis g'>4 <a d fis> <a cis e>2 |
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4 |
+ <d, d'>4 <d d'>2 <cis cis'>4 |
<b b'>4. <b' b'>8 <fis fis'>2 |
<e e'>4 <d d'> <a' a'>2 |
}
\dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}
-violin = \relative c'' {
+violin = \relative {
\repeat volta 2 {
- c4._\dolce b8 a8 g a b |
+ c''4._\dolce b8 a8 g a b |
\centreText
c4.^"hi there!" d8 e f g d |
c4.\fthenp b8 c4 c-. |
the last line.
@example
-violin = \relative c'' @{
+violin = \relative @{
\repeat volta 2 @{
- c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
+ c''4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
\once \override TextScript.self-alignment-X = #CENTER
c4.^"hi there!" d8 e f g d |
c4._\markup @{
@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
- (parser location padding)
+ (padding)
(number?)
#{
\once \override TextScript.padding = #padding
@end lilypond
A descant may be added by defining values for the variable
-@code{DescantMusic} and descant lyrics may be provided by
-defining values for @code{DescantLyrics}.
+@code{DescantMusic} and descant lyrics may be provided by defining
+values for @code{DescantLyrics}. In a similar way a solo part may be
+added above the grouped choir staves by defining values for
+@code{SoloMusic} and @code{SoloLyrics}.
@code{\header} and @code{\paper} blocks may be added as normal.
A @code{\layout} block may be provided as the value of the
is within just one staff space of the previous note.
@lilypond[verbatim,quote]
-% set the starting point to middle C
\relative {
c' d e f
g a b c
}
@end lilypond
-The initial note is @notation{middle C}. Each successive note is
+The initial note is @notation{middle C}, denoted by @code{c'}.
+Each successive note is
placed closest to the previous note -- in other words, the first
@code{c} is the closest C to middle C. This is followed by the
closest D to the previous note. We can create melodies which have
@end lilypond
@noindent
-It is not necessary for the first note of the melody to start on
-the note which specifies the starting pitch. In the previous
-example, the first note -- the @code{d} -- is the closest D to
-middle C.
+In the previous example, the first note -- the @code{d'} with one
+@code{'}-mark -- is the D in the octave starting from middle C
+and going up to B.
By adding (or removing) quotes @code{'} or commas @code{,} from
-the @q{@w{@code{@bs{}relative c'}}} command, we can change the
-starting octave:
+the first note, we can change the starting octave:
@lilypond[verbatim,quote]
-% one octave above middle C
\relative {
e'' c a c
}
@lilypond[verbatim,quote]
\relative {
- b' c % c is 1 staff space up, so is the c above
+ b' c % c is 1 staff space up, so is the c above
b d % d is 2 up or 5 down, so is the d above
b e % e is 3 up or 4 down, so is the e above
b a % a is 6 up or 1 down, so is the a below
set with the @code{\tempo} command:
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\time 3/4
\tempo "Andante"
- a4 a a
+ a'4 a a
\time 6/8
\tempo 4. = 96
a4. a
Here is a small example showing all these elements together:
@lilypond[verbatim,quote]
-\relative c, {
+\relative {
\clef "bass"
\time 3/4
\tempo "Andante" 4 = 120
- c2 e8 c'
+ c,2 e8 c'
g'2.
f4 e d
c4 c, r
beginning or end of a line to avoid ambiguities.
A LilyPond command followed by a simple expression in braces (such
-as @q{@w{@code{@bs{}relative c' @{ @dots{} @}}}}) also counts as a
+as @q{@w{@code{@bs{}relative @{ @dots{} @}}}}) also counts as a
single music expression.
@cindex comments
@cindex files, tips for constructing
LilyPond input must be surrounded by @code{@{ @}} marks or a
-@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}}, as we saw in
+@q{@w{@code{@bs{}relative @{ @dots{} @}}}}, as we saw in
@ref{Working on input files}. For the rest of this manual, most
examples will omit this. To replicate the examples, you may copy
-and paste the displayed input, but you @strong{must} add the
-@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} like this:
+and paste the displayed input, but to put the pitches in the same
+octaves as seen in the manual you @strong{must} add a particular
+form of @code{@bs{}relative} with an explicit starting pitch
+@code{c''} like this:
@example
\relative c'' @{
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Tweaking output
@chapter Tweaking output
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \hide Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \omit Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
@end example
@example
\include "definitions.ily"
-\relative c'' @{
+\relative @{
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
((0) (x11-color 'violet )) ; for B
)))
-\relative c' {
+\relative {
% Arrange to obtain color from color-notehead procedure
\override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
-\version "2.19.21"
+\version "2.19.22"
\include "example-header.ily"
\paper {
}
%%%%%%%%% MACRO FOR MAKING SLASHES THROUGH STEMS %%%%%%%%%%
-MakeSlash = #(define-music-function (parser location angle len-left len-right
+MakeSlash = #(define-music-function (angle len-left len-right
thick y-factor offset)
(number? number? number? number? number?
pair?)
si que m'ès -- tuet fai -- re _ chan -- _ _ çon
}
-triplumNotes = \relative c' {
+triplumNotes = \relative {
\clef "treble_8"
%\set Staff.midiInstrument = "flute"
% \global
\override StemTremolo.beam-thickness = #.125
\override StemTremolo.slope = #1.0
- f8 f4 e8 d c f f f | % 1
+ f'8 f4 e8 d c f f f | % 1
% the \scaleDurations command below makes 5 notes last the
% duration of a dotted quarter
e8 c4 \scaleDurations 3/2 { \tuplet 5/4{e16[ d e d e]} } e8 f4 | % 2
-\version "2.19.2"
+\version "2.19.21"
%\include "example-header.ily"
}
tenor = {
- \new Voice \relative c' {
+ \new Voice \relative {
\global
\repeat volta 2 {
- c16 h c8~ 16 h c g a8 g~ 16 g as es
+ c'16 h c8~ 16 h c g a8 g~ 16 g as es
f16 es f d g as g f es d \tieDown es8~ 16 \tieNeutral f es d
c16 h c g' c h c c, f8. g16 as!4~
16 g as b c h c8 d8. c16 h c d h
pedal = {
\global
\clef "bass"
- \relative c {
+ \relative {
\repeat volta 2 {
r8 c16 d es d es8~ 16 a, h g c h c8
r16 g as f g f g8 c,2
I = \once \override NoteColumn.ignore-collision = ##t
-\version "2.17.30"
+\version "2.19.21"
staffPiano = \new PianoStaff {
\set Score.timing = ##f
\new Staff = "RH" { % Right hand
\clef treble
\key g \major
- \relative c'' {
+ \relative {
\override Staff.NoteCollision.merge-differently-headed = ##t
<<
{
\override Beam.positions = #'(8 . 8)
\hide NoteHead
\override NoteHead.duration-log = #1
- s1 b8[^\markup {
+ s1 b'8[^\markup {
\override #'(baseline-skip . 0.5)
% Add color to markup in top staff
\column { \with-color #red \small { ^ 3 } }
-\version "2.19.12"
+\version "2.19.22"
\layout {
indent = #0
sffp = #(make-dynamic-script "sffp")
sffpp = #(make-dynamic-script "sffpp")
-beam = #(define-music-function (parser location left right) (number? number?)
+beam = #(define-music-function (left right) (number? number?)
(cond ((and (= left 0) (> right 0))
#{
\set stemRightBeamCount = #right
)
)
-fraction = #(define-music-function (parser location music) (ly:music?)
+fraction = #(define-music-function (music) (ly:music?)
#{ \tweak text #tuplet-number::calc-fraction-text #music #})
-triangle = #(define-music-function (parser location music) (ly:music?)
+triangle = #(define-music-function (music) (ly:music?)
#{ \once \set shapeNoteStyles = ##(do do do do do do do) #music #})
-semicircle = #(define-music-function (parser location music) (ly:music?)
+semicircle = #(define-music-function (music) (ly:music?)
#{ \once \set shapeNoteStyles = ##(re re re re re re re) #music #})
-blackdiamond = #(define-music-function (parser location music) (ly:music?)
+blackdiamond = #(define-music-function (music) (ly:music?)
#{ \once \set shapeNoteStyles = ##(mi mi mi mi mi mi mi) #music #})
-tiltedtriangle = #(define-music-function (parser location music) (ly:music?)
+tiltedtriangle = #(define-music-function (music) (ly:music?)
#{ \once \set shapeNoteStyles = ##(fa fa fa fa fa fa fa) #music #})
-square = #(define-music-function (parser location music) (ly:music?)
+square = #(define-music-function (music) (ly:music?)
#{ \once \set shapeNoteStyles = ##(la la la la la la la) #music #})
-wedge = #(define-music-function (parser location music) (ly:music?)
+wedge = #(define-music-function (music) (ly:music?)
#{ \once \set shapeNoteStyles = ##(ti ti ti ti ti ti ti) #music #})
-harmonic = #(define-music-function (parser location music) (ly:music?)
+harmonic = #(define-music-function (music) (ly:music?)
#{ \once \set shapeNoteStyles = ##(harmonic harmonic harmonic harmonic harmonic harmonic harmonic) #music #})
-cross = #(define-music-function (parser location music) (ly:music?)
+cross = #(define-music-function (music) (ly:music?)
#{ \once \set shapeNoteStyles = ##(cross cross cross cross cross cross cross) #music #})
-white = #(define-music-function (parser location music) (ly:music?)
+white = #(define-music-function (music) (ly:music?)
#{ \once \override NoteHead.duration-log = #1 #music #})
-\version "2.16.0"
+\version "2.19.21"
\include "example-header.ily"
\include "predefined-guitar-fretboards.ly"
\numericTimeSignature
}
-melody = \relative c' {
+melody = \relative {
\global
- d4
+ d'4
g4 b8( a) g4 fis
e e e e
a c8( b) a4 g
-\version "2.17.30"
+\version "2.19.21"
\include "example-header.ily"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\override NoteColumn.ignore-collision = ##t
}
-upperVoiceOne = \relative c'' {
+upperVoiceOne = \relative {
\voiceOne
\hide TupletBracket
- <aes f'>8\([ \tuplet 5/4{g'32( aes g f g]) }
+ <aes' f'>8\([ \tuplet 5/4{g'32( aes g f g]) }
<es aes>8[ \tuplet 5/4{<d bes'>32( c' bes aes bes]) }
<es, aes es'>8 <d fis b d>\) | % end m. 1
%--------------------------------------------------%
\ottava #1 <es es'>16 <f f'> <d d'> \appoggiatura f8 <es es'>16\)
}
-upperVoiceTwo = \relative c'' {
+upperVoiceTwo = \relative {
\voiceTwo
- s8 c8\< <bes, f'>[ <bes aes'> c' <bes, d fis>\!]
+ s8 c''8\< <bes, f'>[ <bes aes'> c' <bes, d fis>\!]
s32 s32_\appassmolto s8. \voiceOne r8 <bes'' es bes'>-> s4
\override Stem.cross-staff = ##t
\override Stem.length = #28
s8 \voiceTwo g,8 aes4 s4
}
-middleVoiceOne = \relative c' {
+middleVoiceOne = \relative {
\override Stem.cross-staff = ##t
\override Stem.length = #32
\override Flag.style = #'no-flag
- d!8\noBeam s8 s8 s8_\crmolto s4 % 1
+ d'!8\noBeam s8 s8 s8_\crmolto s4 % 1
s4 <g bes\arpeggio>8[ <es' g>] \voiceOne e,8( dis16 e) | % 2
\revert Stem.length
\revert Stem.cross-staff
%s2. % beginning m. 3
}
-middleVoiceTwo = \relative c' {
+middleVoiceTwo = \relative {
s2. | % 1
\override Stem.cross-staff = ##t
\override Stem.length = #24
\override Flag.style = #'no-flag
- s2 \voiceTwo e!4 | % 2
+ s2 \voiceTwo e'!4 | % 2
s4 \voiceTwo <bes c es f>8 <f' aes es'>16 d' <bes, f' aes c>8 <bes' fis'> | % 3
}
-lowerVoiceOne = \relative c, {
+lowerVoiceOne = \relative {
\override Staff.NoteCollision.merge-differently-headed = ##t
\override Staff.NoteCollision.merge-differently-dotted = ##t
- bes8 \csm \stemDown <bes'' c es>8 s2
+ bes,,8 \csm \stemDown <bes'' c es>8 s2
\csl \stemUp
\set subdivideBeams = ##t
\set baseMoment = #(ly:make-moment 1/16)
bes,,8 \csm \stemDown <bes'' c es>8 s2
}
-lowerVoiceTwo = \relative c, {
+lowerVoiceTwo = \relative {
\voiceTwo
- bes2.
+ bes,,2.
\csh
\once \override Beam.damping = #+inf.0
<bes'' es g>8 \csl \slurUp
-\version "2.19.16"
+\version "2.19.21"
#(define (glissando::calc-extra-dy grob)
(let* ((original (ly:grob-original grob))
< gis\4 d'\3 fis\2 >2 < b'\2\harmonic e\harmonic >2\fermata
}
-lower= \relative c {
+lower= \relative {
\set fingeringOrientations = #'(left)
\partial 4. s4.
-\version "2.16.0"
+\version "2.19.21"
\include "example-header.ily"
#(ly:set-option 'point-and-click #f)
\key c \major
}
-cf = \relative c {
+cf = \relative {
\clef bass
\global
c4 c' b a |
ES: do central,
I: do centrale,
F: do central, do 3
-D: zweigestrichenes@w{ }c,
+D: eingestrichenes@w{ }c,
NL: centrale@w{ }c,
DK: enstreget@w{ }c,
S: ettstruket@w{ }c,
@c but the example is long enough to avoid looking strange.
@lilypond[verbatim,quote,noragged-right]
<<
- \relative c' {
+ \relative {
\key g \major
\time 3/4
\partial 4
- d4 | g4 g a8( b) | g4 g b8( c) |
+ d'4 | g4 g a8( b) | g4 g b8( c) |
d4 d e | c2
}
\addlyrics {
@lilypond[verbatim,quote]
<<
- \relative c'' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+ c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- | dorn, __
}
- \relative c' {
+ \relative {
\key f \major
\time 6/8
\partial 8
- r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+ r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
}
\addlyrics {
Let | flee -- cy flocks the | hills a -- dorn,
@c Translation checker:
@c Translation checker committish:
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Fundamentele concepten
@translationof Fundamental concepts
@c The following should appear as music without code
@c The three voice styles should be defined in -init
@lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
\key aes \major
<<
{ % Voice one
\voiceOneStyle
- c2 aes4. bes8
+ c''2 aes4. bes8
}
\\ % Voice two
{ \voiceTwoStyle
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceOne
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\voiceTwo
- c4 d8~ 8 e4( f | g4 a) b-> c |
+ c'4 d8~ 8 e4( f | g4 a) b-> c |
\oneVoice
c,4 d8~ 8 e4( f | g4 a) b-> c |
}
permitting a phrasing slur to be drawn over them.
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
\voiceOneStyle
% This section is homophonic
- c16^( d e f
+ c'16^( d e f
% Start simultaneous section of three voices
<<
% Continue the main voice in parallel
as here:
@lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
% Initiate first voice
\new Voice {
\voiceOne
- c16^( d e f g4 f e | d2 e) |
+ c'16^( d e f g4 f e | d2 e) |
}
% Initiate second voice
\new Voice {
@lilypond[quote,verbatim]
<<
\new Voice = "one" {
- \relative c'' {
+ \relative {
\autoBeamOff
\time 2/4
- c4 b8. a16 | g4. f8 | e4 d | c2 |
+ c''4 b8. a16 | g4. f8 | e4 d | c2 |
}
}
\new Lyrics \lyricsto "one" {
@lilypond[quote,verbatim,ragged-right]
<<
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.instrumentName = #"Soprano"
- c2 c
+ c''2 c
}
- \new Staff \relative c' {
+ \new Staff \relative {
\set instrumentName = #"Alto" % Wrong!
- d2 d
+ d'2 d
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Staff.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Staff \relative {
aeses'2 aes
}
- \new Staff \relative c'' {
+ \new Staff \relative {
\set Score.extraNatural = ##f
- aeses2 aes
+ aeses'2 aes
}
>>
@end lilypond
\new Voice \with {
\consists "Ambitus_engraver"
} {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
}
<<
\new Voice {
- \relative c'' {
+ \relative {
\voiceOne
- c4 a b g
+ c''4 a b g
}
}
\new Voice {
- \relative c' {
+ \relative {
\voiceTwo
- c4 e d f
+ c'4 e d f
}
}
>>
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4 |
+ r4 <a' d fis>2 <a e' a>4 |
<d fis d'>4. <d fis d'>8 <a d a'>2 |
<g cis g'>4 <a d fis> <a cis e>2 |
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4 |
+ <d, d'>4 <d d'>2 <cis cis'>4 |
<b b'>4. <b' b'>8 <fis fis'>2 |
<e e'>4 <d d'> <a' a'>2 |
}
r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
\clef "treble"
\global
- r4 <a d fis>2 <a e' a>4 |
+ r4 <a' d fis>2 <a e' a>4 |
<d fis d'>4. <d fis d'>8 <a d a'>2 |
<g cis g'>4 <a d fis> <a cis e>2 |
}
-lower = \relative c, {
+lower = \relative {
\clef "bass"
\global
- <d d'>4 <d d'>2 <cis cis'>4 |
+ <d, d'>4 <d d'>2 <cis cis'>4 |
<b b'>4. <b' b'>8 <fis fis'>2 |
<e e'>4 <d d'> <a' a'>2 |
}
\dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}
-violin = \relative c'' {
+violin = \relative {
\repeat volta 2 {
- c4._\dolce b8 a8 g a b |
+ c''4._\dolce b8 a8 g a b |
\padText
c4.^"hi there!" d8 e' f g d |
c,4.\fthenp b8 c4 c-. |
the last line.
@example
-violin = \relative c'' @{
+violin = \relative @{
\repeat volta 2 @{
- c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
+ c''4._\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 @{
@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
- (parser location padding)
+ (padding)
(number?)
#{
\once \override TextScript.padding = #padding
this option to the music above, leads to the following result
@lilypond[quote,ragged-right]
-\transpose f c' \relative c {
+\transpose f c' \relative {
\time 2/4
\set Score.skipBars = ##t
R2*3 |
gezet met het @code{\tempo}-commando:
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\time 3/4
\tempo "Andante"
- a4 a a
+ a'4 a a
\time 6/8
\tempo 4. = 96
a4. a
toont:
@lilypond[verbatim,quote]
-\relative c, {
+\relative {
\clef "bass"
\time 3/4
\tempo "Andante" 4 = 120
\clef "bass"
- c2 e8 c'
+ c,2 e8 c'
g'2.
f4 e d
c4 c, r
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Tweaking output
@chapter Tweaking output
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \hide Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \omit Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
@end example
@example
\include "definitions.ily"
-\relative c'' @{
+\relative @{
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
((0) (x11-color 'violet )) ; for B
)))
-\relative c' {
+\relative {
% Arrange to obtain color from color-notehead procedure
\override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
above the ligature.
@lilypond[quote,ragged-right,verbatim]
-\relative c'' {
- \[ g c, a' f d' \]
+\relative {
+ \[ g' c, a' f d' \]
a g f
\[ e f a g \]
}
@lilypond[quote,ragged-right,verbatim]
\score {
<<
- \new MensuralVoice = "discantus" \relative c'' {
+ \new MensuralVoice = "discantus" \relative {
\hide Score.BarNumber {
- c1\melisma bes a g\melismaEnd
+ c''1\melisma bes a g\melismaEnd
f\breve
\[ f1\melisma a c\breve d\melismaEnd \]
c\longa
Because note head style does not influence flag count, in
this style a semiminima should be notated as @code{a8*2}, not
@code{a4}, otherwise it will look like a minima.
-The multiplyer can be different if coloratio is used e.g. to notate
+The multiplier can be different if coloratio is used e.g. to notate
triplets.
Use @code{semipetrucci} style to draw half-colored
@cindex rests, ancient
Use the @code{style} property of grob @code{Rest} to select
-ancient rests. Supported styles are @code{classical},
-@code{neomensural}, and @code{mensural}. @code{classical} differs
-from the @code{default} style only in that the quarter rest looks
-like a horizontally mirrored 8th rest. The @code{mensural} and
-the @code{neomensural} styles mimic the appearance of rests in
-manuscripts and prints up to the 16th century.
+ancient rests. Supported ancient styles are
+@code{neomensural}, and @code{mensural}.
-The following example demonstrates the @code{mensural} and
-@code{neomensural} styles:
+The following example demonstrates these styles:
@lilypond[quote,fragment,ragged-right,verbatim]
\set Score.skipBars = ##t
-\override Rest.style = #'classical
-r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break
\override Rest.style = #'mensural
r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break
\override Rest.style = #'neomensural
r\longa^"neomensural" r\breve r1 r2 r4 r8 r16
@end lilypond
-There are no 32th and 64th rests specifically for the mensural or
-neo-mensural style. Instead, the rests from the default style will be
-taken.
+There are no 32nd and 64th rests specifically for the mensural or
+neo-mensural styles. Rests from the default style are used.
@seealso
Music Glossary:
@cindex key signature
The @code{mensural} style provides a sharp and a flat sign
-different from the default style. If called for, the natural sign
-will be taken from the @code{vaticana} style.
+different from the default style. Mensural notation rarely used a natural
+sign: instead the appropriate sharp or flat is used. For example, a B
+natural in the key of F major would be indicated with a sharp. However,
+if specifically called for, the natural sign is taken from the @code{vaticana}
+style.
@lilypond[quote,ragged-right,staffsize=26]
\markup {
@lilypond[quote,verbatim]
ficta = { \once \set suggestAccidentals = ##t }
-\score { \relative c''
+\score { \relative
\new MensuralVoice {
\once \set suggestAccidentals = ##t
- bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1
+ bes'4 a2 g2 \ficta fis8 \ficta e! fis2 g1
}
}
@end lilypond
For example,
-@c @example
-@c \set Score.timing = ##f
-@c \set Score.defaultBarType = "-"
-@c \override NoteHead.style = #'neomensural
-@c \override Staff.TimeSignature.style = #'neomensural
-@c \clef "petrucci-g"
-@c \[ c'\maxima g \]
-@c \[ d\longa c\breve f e d \]
-@c \[ c'\maxima d'\longa \]
-@c \[ e'1 a g\breve \]
-@c @end example
@lilypond[quote,ragged-right,verbatim]
\score {
- \relative c' {
+ \relative {
\set Score.timing = ##f
\set Score.defaultBarType = "-"
\override NoteHead.style = #'petrucci
\override Staff.TimeSignature.style = #'mensural
\clef "petrucci-g"
- \[ c'\maxima g \]
- \[ d\longa
+ \[ c''\maxima g \]
+ \[ d'\longa
\override NoteHead.ligature-flexa = ##t
\once \override NoteHead.flexa-width = #3.2
c\breve f e d \]
- \[ c'\maxima d\longa \]
+ \[ c\maxima d\longa \]
\[ e1 a, g\breve \]
}
\layout {
@end lilypond
Without replacing @code{Ligature_bracket_engraver} with
-@code{Mensural_ligature_engraver}, the same music transcribes
-to the following
+@code{Mensural_ligature_engraver}, the same music looks as follows:
@lilypond[quote,ragged-right]
-\relative c' {
+\relative {
\set Score.timing = ##f
\set Score.defaultBarType = "-"
\override NoteHead.style = #'petrucci
\override Staff.TimeSignature.style = #'mensural
\clef "petrucci-g"
- \[ c'\maxima g \]
- \[ d\longa
+ \[ c''\maxima g \]
+ \[ d'\longa
\override NoteHead.ligature-flexa = ##t
\once \override NoteHead.flexa-width = #3.2
c\breve f e d \]
- \[ c'\maxima d\longa \]
+ \[ c\maxima d\longa \]
\[ e1 a, g\breve \]
}
@end lilypond
@ref{Ligatures}.
@knownissues
-Horizontal spacing of ligatures is poor.
+Horizontal spacing of ligatures may be poor.
Accidentals may collide with previous notes.
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum
- \[ b \]
+ \[ b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum
- \[ \cavum b \]
+ \[ \cavum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum
- \[ \linea b \]
+ \[ \linea b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Auctum Ascendens
- \[ \auctum \ascendens b \]
+ \[ \auctum \ascendens b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Auctum Descendens
- \[ \auctum \descendens b \]
+ \[ \auctum \descendens b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Inclinatum
- \[ \inclinatum b \]
+ \[ \inclinatum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.5\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Inclinatum Auctum
- \[ \inclinatum \auctum b \]
+ \[ \inclinatum \auctum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Punctum Inclinatum Parvum
- \[ \inclinatum \deminutum b \]
+ \[ \inclinatum \deminutum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Virga
- \[ \virga b \]
+ \[ \virga b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Clivis vel Flexa
- \[ b \flexa g \]
+ \[ b' \flexa g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Clivis Aucta Descendens
- \[ b \flexa \auctum \descendens g \]
+ \[ b' \flexa \auctum \descendens g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Clivis Aucta Ascendens
- \[ b \flexa \auctum \ascendens g \]
+ \[ b' \flexa \auctum \ascendens g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=2.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Cephalicus
- \[ b \flexa \deminutum g \]
+ \[ b' \flexa \deminutum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Podatus vel Pes
- \[ g \pes b \]
+ \[ g' \pes b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Auctus Descendens
- \[ g \pes \auctum \descendens b \]
+ \[ g' \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Auctus Ascendens
- \[ g \pes \auctum \ascendens b \]
+ \[ g' \pes \auctum \ascendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Epiphonus
- \[ g \pes \deminutum b \]
+ \[ g' \pes \deminutum b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Initio Debilis
- \[ \deminutum g \pes b \]
+ \[ \deminutum g' \pes b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Auctus Descendens Initio Debilis
- \[ \deminutum g \pes \auctum \descendens b \]
+ \[ \deminutum g' \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus
- \[ a \pes b \flexa g \]
+ \[ a' \pes b \flexa g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Auctus Descendens
- \[ a \pes b \flexa \auctum \descendens g \]
+ \[ a' \pes b \flexa \auctum \descendens g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Deminutus
- \[ a \pes b \flexa \deminutum g \]
+ \[ a' \pes b \flexa \deminutum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Initio Debilis
- \[ \deminutum a \pes b \flexa g \]
+ \[ \deminutum a' \pes b \flexa g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Auctus Descendens Initio Debilis
- \[ \deminutum a \pes b \flexa \auctum \descendens g \]
+ \[ \deminutum a' \pes b \flexa \auctum \descendens g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Torculus Deminutus Initio Debilis
- \[ \deminutum a \pes b \flexa \deminutum g \]
+ \[ \deminutum a' \pes b \flexa \deminutum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Porrectus
- \[ a \flexa g \pes b \]
+ \[ a' \flexa g \pes b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Porrectus Auctus Descendens
- \[ a \flexa g \pes \auctum \descendens b \]
+ \[ a' \flexa g \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Porrectus Deminutus
- \[ a \flexa g \pes \deminutum b \]
+ \[ a' \flexa g \pes \deminutum b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Climacus
- \[ \virga b \inclinatum a \inclinatum g \]
+ \[ \virga b' \inclinatum a \inclinatum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Climacus Auctus
- \[ \virga b \inclinatum a \inclinatum \auctum g \]
+ \[ \virga b' \inclinatum a \inclinatum \auctum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Climacus Deminutus
- \[ \virga b \inclinatum a \inclinatum \deminutum g \]
+ \[ \virga b' \inclinatum a \inclinatum \deminutum g \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Scandicus
- \[ g \pes a \virga b \]
+ \[ g' \pes a \virga b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Scandicus Auctus Descendens
- \[ g \pes a \pes \auctum \descendens b \]
+ \[ g' \pes a \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Scandicus Deminutus
- \[ g \pes a \pes \deminutum b \]
+ \[ g' \pes a \pes \deminutum b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Quilisma
- \[ g \pes \quilisma a \pes b \]
+ \[ g' \pes \quilisma a \pes b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Quilisma Pes Auctus Descendens
- \[ g \quilisma a \pes \auctum \descendens b \]
+ \[ g' \quilisma a \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Oriscus
- \[ \oriscus b \]
+ \[ \oriscus b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Quassus
- \[ \oriscus g \pes \virga b \]
+ \[ \oriscus g' \pes \virga b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Pes Quassus Auctus Descendens
- \[ \oriscus g \pes \auctum \descendens b \]
+ \[ \oriscus g' \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Salicus
- \[ g \oriscus a \pes \virga b \]
+ \[ g' \oriscus a \pes \virga b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Salicus Auctus Descendens
- \[ g \oriscus a \pes \auctum \descendens b \]
+ \[ g' \oriscus a \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Stropha
- \[ \stropha b \]
+ \[ \stropha b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Stropha Aucta
- \[ \stropha \auctum b \]
+ \[ \stropha \auctum b' \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Bistropha
- \[ \stropha b \stropha b \]
+ \[ \stropha b' \stropha b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Tristropha
- \[ \stropha b \stropha b \stropha b \]
+ \[ \stropha b' \stropha b \stropha b \]
}
\layout { \neumeDemoLayout }}
@end lilypond
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \relative c'' {
+ \relative {
% Trigonus
- \[ \stropha b \stropha b \stropha a \]
+ \[ \stropha b' \stropha b \stropha a \]
}
\layout { \neumeDemoLayout }
}
@lilypond[verbatim,ragged-right]
\include "gregorian.ly"
-chant = \relative c' {
+chant = \relative {
\clef "G_8"
\set Score.timing = ##f
\hide Stem
- c\breve \hide NoteHead c c c c c
+ c'\breve \hide NoteHead c c c c c
\undo \hide NoteHead
\undo \hide Stem \stemUp c4 b4 a
\hide Stem c2 c4 \divisioMaior
@code{s} @q{notes}.
@lilypond[verbatim,quote]
-spiritus = \relative c' {
+spiritus = \relative {
\time 1/4
\override Lyrics.LyricText.X-extent = #'(0 . 3)
- d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
+ d'4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
d4 f8 g g8 d f g a g f4 g8 a a4 s
\tuplet 3/2 { g8 f d } e f g a g4
}
@node Ancient and modern from one source
@unnumberedsubsubsec Ancient and modern from one source
-@c TODO Add text
-@c Here among others the snippets about reducing note length
-TBC
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{using-tags-to-produce-mensural-and-modern-music-from-the-same-source.ly}
@c @seealso
@c ... and reference to other sections ...
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Changing defaults
@chapter Changing defaults
the spacing engine knows the width of the note heads and avoids the
collision by lengthening the line accordingly.
-Usually for simple calculations nearly-identical functions for both the
-@q{unpure} and @q{pure} parts can be used, by only changing the number
-of arguments passed to, and the scope of, the function.
+Usually for simple calculations nearly-identical functions for
+both the @q{unpure} and @q{pure} parts can be used, by only
+changing the number of arguments passed to, and the scope of, the
+function. This use case is frequent enough that
+@code{ly:make-unpure-pure-container} constructs such a second
+function by default when called with only one function argument.
@warning{If a function is labeled as @q{pure} and it turns out not to
be, the results can be unexpected.}
@example
function =
#(define-music-function
- (parser location @var{arg1} @var{arg2} @dots{})
+ (@var{arg1} @var{arg2} @dots{})
(@var{type1?} @var{type2?} @dots{})
#@{
@var{@dots{}music@dots{}}
(eg. @samp{#arg1}).
@end multitable
-The @code{parser} and @code{location} arguments are mandatory, and
-are used in some advanced situations as described in the
-@q{Extending} manual (see @rextend{Music functions}). For
-substitution functions, just be sure to include them.
-
-The list of type predicates is also required. Some of the most
-common type predicates used in music functions are:
+The list of type predicates is required. Some of the most common
+type predicates used in music functions are:
@example
boolean?
@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
- (parser location padding)
+ (padding)
(number?)
#{
\once \override TextScript.padding = #padding
@lilypond[quote,verbatim,ragged-right]
custosNote =
#(define-music-function
- (parser location note)
+ (note)
(ly:music?)
#{
\tweak NoteHead.stencil #ly:text-interface::print
@lilypond[quote,verbatim,ragged-right]
tempoPadded =
#(define-music-function
- (parser location padding tempotext)
+ (padding tempotext)
(number? markup?)
#{
\once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
-\relative c'' {
+\relative {
\tempo \markup { "Low tempo" }
- c4 d e f g1
+ c''4 d e f g1
\tempoPadded #4.0 "High tempo"
g4 f e d c1
}
\score {
\new ChoirStaff <<
- \new Staff \relative c'' {
+ \new Staff \relative {
\stemUp
- c4. d8 e8 f g4
+ c''4. d8 e8 f g4
}
- \new Staff \relative c {
+ \new Staff \relative {
\clef bass
\stemDown
c4 g' f e
the second alternative of a repeat.
@lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
\repeat volta 2 {
- e2. f4~
+ e'2. f4~
2 g2~
}
\alternative {
engraving fret numbers in parentheses:
@lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
\repeat volta 2 {
- e2. f4~
+ e'2. f4~
2 g2~ }
\alternative {
{ g4 f2. }
text markup.
@lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
\clef "treble_8"
\override Staff.NoteHead.style = #'harmonic-mixed
- d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
+ d'^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node General input and output
@chapter General input and output
}
\score {
- \new Staff \relative g, {
+ \new Staff \relative {
\clef bass
\key g \major
- \repeat unfold 2 { g16( d' b') a b d, b' d, } |
+ \repeat unfold 2 { g,16( d' b') a b d, b' d, } |
\repeat unfold 2 { g,16( e' c') b c e, c' e, } |
}
\header {
}
\score {
- \new Staff \relative b {
+ \new Staff \relative {
\clef bass
\key g \major
\partial 16 b16 |
}
tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
(add-toc-item! 'tocActMarkup text))
@end verbatim
}
tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
(add-toc-item! 'tocActMarkup text))
\book {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@node Pitches
@lilypond[verbatim,quote]
{
\clef treble
- c'4 c'' e' g
- d''4 d' d c
+ c'4 e' g' c''
+ c'4 g b c'
\clef bass
- c,4 c,, e, g
- d,,4 d, d c
+ c,4 e, g, c
+ c,4 g,, b,, c,
}
@end lilypond
-@funindex absolute
-@funindex \absolute
-Music can be marked explicitly as being in absolute octave
-notation by preceding it with @code{\absolute}:
+@funindex fixed
+@funindex \fixed
+Common octave marks can be entered just once on a reference pitch
+after @code{\fixed} placed before the music. Pitches inside
+@code{\fixed} only need @code{'} or@tie{}@code{,} marks
+when they are above or below the octave of the reference pitch.
-@example
-\absolute @var{musicexpr}
-@end example
+@lilypond[verbatim,quote]
+{
+ \fixed c' {
+ \clef treble
+ c4 e g c'
+ c4 g, b, c
+ }
+ \clef bass
+ \fixed c, {
+ c4 e g c'
+ c4 g, b, c
+ }
+}
+@end lilypond
-will be interpreted in absolute octave entry mode regardless of
-the context it appears in.
+Pitches in the music expression following @code{\fixed} are
+unaffected by any enclosing @code{\relative}, discussed next.
@seealso
Music Glossary:
Identifying middle C with @code{c'} is quite basic, so finding
octaves of @code{c} tends to be straightforward. If your music
starts with @code{gis} above @code{c'''}, you'd write something
-like @code{\relative @{ gis''' @dots{} @}}
+like @code{\relative c''' @{ gis' @dots{} @}}
@item an octave of the first note inside
-Writing @code{\relative @{ gis''' @dots{} @}} makes it easy to
+Writing @code{\relative gis''' @{ gis @dots{} @}} makes it easy to
determine the absolute pitch of the first note inside.
@item no explicit starting pitch
-This (namely writing @code{\relative @{ gis''' @dots{} @}}) can be
-viewed as a compact version of the previous option: the first note
-inside is written in absolute pitch itself. This happens to be
-equivalent to choosing @code{f} as the reference pitch.
+The form @code{\relative @{ gis''' @dots{} @}}) serves
+as a compact version of the previous option: the first note
+inside is written in absolute pitch itself. (This happens to be
+equivalent to choosing @code{f} as the reference pitch.)
@end table
-The documentation will usually employ the first option.
+The documentation will usually employ the last option.
@end itemize
Here is the relative mode shown in action:
@end lilypond
When @code{\relative} blocks are nested, the innermost
-@code{\relative} block applies.
+@code{\relative} block starts with its own reference pitch
+independently of the outer @code{\relative}.
@lilypond[verbatim,quote]
\relative {
}
@end lilypond
-One consequence of these rules is that the first note inside
-@code{@w{\relative f}} music is interpreted just the same as
-if it was written in absolute pitch mode.
@seealso
Music Glossary:
also vary depending on the language:
@quotation
-@multitable {@code{nederlands}} {-s/--sharp} {-ess/-es} {-ss/-x/--sharpsharp} {-essess/-eses}
+@multitable {@code{nederlands}} {-@code{s}/-@code{-sharp}} {-@code{ess}/-@code{es}} {-@code{ss}/-@code{x}/-@code{-sharpsharp}} {-@code{essess}/-@code{eses}}
@headitem Language
@tab sharp @tab flat @tab double sharp @tab double flat
@item @code{nederlands}
- @tab -is @tab -es @tab -isis @tab -eses
+ @tab -@code{is} @tab -@code{es} @tab -@code{isis} @tab -@code{eses}
@item @code{catalan}
- @tab -d/-s @tab -b @tab -dd/-ss @tab -bb
+ @tab -@code{d}/-@code{s} @tab -@code{b} @tab -@code{dd}/-@code{ss} @tab -@code{bb}
@item @code{deutsch}
- @tab -is @tab -es @tab -isis @tab -eses
+ @tab -@code{is} @tab -@code{es} @tab -@code{isis} @tab -@code{eses}
@item @code{english}
- @tab -s/--sharp @tab -f/--flat @tab -ss/-x/--sharpsharp
- @tab -ff/--flatflat
+ @tab -@code{s}/-@code{-sharp} @tab -@code{f}/-@code{-flat} @tab -@code{ss}/-@code{x}/-@code{-sharpsharp}
+ @tab -@code{ff}/-@code{-flatflat}
@item @code{espanol} or @code{español}
- @tab -s @tab -b @tab -ss/-x @tab -bb
+ @tab -@code{s} @tab -@code{b} @tab -@code{ss}/-@code{x} @tab -@code{bb}
@item @code{italiano} or @code{français}
- @tab -d @tab -b @tab -dd @tab -bb
+ @tab -@code{d} @tab -@code{b} @tab -@code{dd} @tab -@code{bb}
@item @code{norsk}
- @tab -iss/-is @tab -ess/-es @tab -ississ/-isis
- @tab -essess/-eses
+ @tab -@code{iss}/-@code{is} @tab -@code{ess}/-@code{es} @tab -@code{ississ}/-@code{isis}
+ @tab -@code{essess}/-@code{eses}
@item @code{portugues}
- @tab -s @tab -b @tab -ss @tab -bb
+ @tab -@code{s} @tab -@code{b} @tab -@code{ss} @tab -@code{bb}
@item @code{suomi}
- @tab -is @tab -es @tab -isis @tab -eses
+ @tab -@code{is} @tab -@code{es} @tab -@code{isis} @tab -@code{eses}
@item @code{svenska}
- @tab -iss @tab -ess @tab -ississ @tab -essess
+ @tab -@code{iss} @tab -@code{ess} @tab -@code{ississ} @tab -@code{essess}
@item @code{vlaams}
- @tab -k @tab -b @tab -kk @tab -bb
+ @tab -@code{k} @tab -@code{b} @tab -@code{kk} @tab -@code{bb}
@end multitable
@end quotation
the accidental style to @code{forget}:
@lilypond[verbatim,quote]
-forget = #(define-music-function (parser location music) (ly:music?) #{
+forget = #(define-music-function (music) (ly:music?) #{
\accidentalStyle forget
#music
\accidentalStyle modern
@lilypond[quote,verbatim]
\score {
\new Staff {
- \relative c' {
+ \relative {
\time #'(2 2 3) 7/8
- \repeat unfold 7 { c8 } |
+ \repeat unfold 7 { c'8 } |
\time #'(3 2 2) 7/8
\repeat unfold 7 { c8 } |
}
@lilypond[quote,verbatim]
\score{
- \relative c' {
- \repeat unfold 8 { c8 } |
+ \relative {
+ \repeat unfold 8 { c'8 } |
\overrideTimeSignatureSettings
4/4 % timeSignatureFraction
1/4 % baseMomentFraction
before it, the top numbers.
@lilypond[quote,verbatim]
-\relative c' {
+\relative {
\compoundMeter #'((2 2 2 8))
- \repeat unfold 6 c8 \repeat unfold 12 c16
+ \repeat unfold 6 c'8 \repeat unfold 12 c16
}
@end lilypond
automatic beaming settings will be adjusted depending on the values.
@lilypond[quote,verbatim]
-\relative c' {
+\relative {
\compoundMeter #'((1 4) (3 8))
- \repeat unfold 5 c8 \repeat unfold 10 c16
+ \repeat unfold 5 c'8 \repeat unfold 10 c16
}
-\relative c' {
+\relative {
\compoundMeter #'((1 2 3 8) (3 4))
- \repeat unfold 12 c8
+ \repeat unfold 12 c'8
}
@end lilypond
}
}
\new Voice = two {
- \relative c' {
+ \relative {
\voiceTwo
\set Voice.beatStructure = #'(1 3 3)
- f8 f f f f f f
+ f'8 f f f f f f
}
}
>>
The next bar line then falls at 9/8 rather than 5/4.
@lilypond[quote,verbatim]
-\new Voice \relative c' {
+\new Voice \relative {
\set Timing.measureLength = #(ly:make-moment 5/4)
- c1 c4 |
+ c'1 c4 |
c1 c4 |
c4 c
\set Timing.measurePosition = #(ly:make-moment 5/8)
articulation or ornamentation within, or attached to, the previous
chord.
-@lilypond[verbatim,quote,relative=2]
-<a-. c\prall e>1\sfz c'4 q2 r8 q8 |
-q2 c, |
+@lilypond[verbatim,quote]
+\relative {
+ <a'-. c\prall e>1\sfz c'4 q2 r8 q8 |
+ q2 c, |
+}
@end lilypond
To have some of them retained, the @code{\chordRepeats} function can be
present on the @code{q} chord itself.
@lilypond[verbatim,quote]
-\relative c'' {
+\relative {
\chordRepeats #'(articulation-event)
- { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+ { <a'-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
q2 c, |
}
@end lilypond
affect the outer one; hence the different octave entry of the final note
in this example.
-@c Without \new Voice, implicit voice creation does the dumbest thing.
@lilypond[verbatim,quote]
-\new Voice
-\relative c'' {
+\relative {
\chordRepeats #'(articulation-event)
\relative
{ <a'-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
- q2 c |
+ q2 c'' |
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.19.21"
+@c \version "2.19.22"
@ignore
GDP TODO list
}
labelContext =
#(define-music-function
- (parser location context)
+ (context)
(string?)
#{ s1*0^\markup { \upright {\typewriter #context } } #})
settings, see @ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents}.
@lilypond[verbatim,quote,ragged-right]
-\relative c'' {
+\relative {
<<
\new Staff \with {
instrumentName = #"Alto Flute in G"
shortInstrumentName = #"Flt."
}
{
- f2 g4 f \break
+ f''2 g4 f \break
g4 f g2
}
\new Staff \with {
<<
\new Staff <<
\time 2/4
- \new Voice = "one" \relative c'' {
+ \new Voice = "one" \relative {
\voiceOne
- c4 b8. a16 g4. r8 a4 ( b ) c2
+ c''4 b8. a16 g4. r8 a4 ( b ) c2
}
- \new Voice = "two" \relative c' {
+ \new Voice = "two" \relative {
\voiceTwo
- s2 s4. f8 e4 d c2
+ s2 s4. f'8 e4 d c2
}
>>
<<
\new Staff <<
\time 2/4
- \new Voice = "one" \relative c'' {
+ \new Voice = "one" \relative {
\voiceOne
- c4 b8. a16 g4. r8 a4 ( b ) c2
+ c''4 b8. a16 g4. r8 a4 ( b ) c2
}
- \new Voice = "two" \relative c' {
+ \new Voice = "two" \relative {
\voiceTwo
- s2 s4. f8 e8 d4. c2
+ s2 s4. f'8 e8 d4. c2
}
>>
% takes durations and alignment from notes in "one" initially
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b }
+ \relative {
+ \repeat volta 2 { b'4 b }
\alternative { { b b } { b c } }
c4 c
}
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
+ \relative {
\set melismaBusyProperties = #'()
- \repeat volta 2 { b4 b ~}
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
\unset melismaBusyProperties
c4 c
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b ~}
+ \relative {
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
c4 c
}
\new Staff {
\time 2/4
\new Voice = "melody" {
- \relative c'' {
- \repeat volta 2 { b4 b ~}
+ \relative {
+ \repeat volta 2 { b'4 b ~}
\alternative { { b b } { b \repeatTie c } }
c4 c
}
\score {
<<
\new Voice = "melody" {
- \relative c' {
+ \relative {
<<
{
\voiceOne
- e4 e8 e
+ e'4 e8 e
}
\new Voice = "splitpart" {
\voiceTwo
@lilypond[verbatim,ragged-right,quote]
<<
- \relative c' \new Voice = "lahlah" {
+ \relative \new Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
\slurDotted
f8.[( g16])
a4
@lilypond[verbatim,quote]
<<
- \relative c' \new Voice = "lahlah" {
+ \relative \new Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
<<
\new Voice = "alternative" {
\voiceOne
@c manually adjusted to suit the imposed line length. -td
@lilypond[quote,verbatim,ragged-right]
-music = \relative c'' {
- \repeat unfold 3 { a4 a a a }
+music = \relative {
+ \repeat unfold 3 { a'4 a a a }
}
dialogue = \lyricmode {
@lilypond[quote,verbatim]
\include "arabic.ly"
-\relative do' {
+\relative {
\set Staff.extraNatural = ##f
- dod dob dosd \dwn dob dobsb dodsd do do
+ dod' dob dosd \dwn dob dobsb dodsd do do
}
@end lilypond
@lilypond[quote,verbatim]
\include "arabic.ly"
\score {
- \relative re' {
+ \relative {
\set Staff.extraNatural = ##f
\set Staff.autoBeaming = ##f
\key re \bayati
\time 10/8
- re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
+ re'4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb
fa4 fa16 [misb] misb8. [re16] re8 [misb] re [do] sisb
do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "scheme-language"
} % begin verbatim
addScript =
-#(define-music-function (parser location script music)
+#(define-music-function (script music)
(ly:event? ly:music?)
(map-some-music
(lambda (mus)
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "staff-notation, vocal-music"
cueWhile =
#(define-music-function
- (parser location instrument name dir music)
+ (instrument name dir music)
(string? string? ly:dir? ly:music?)
#{
\cueDuring $instrument #dir {
incipit.ly
mensurstriche-layout-bar-lines-between-the-staves.ly
rest-styles.ly
+using-tags-to-produce-mensural-and-modern-music-from-the-same-source.ly
vertical-line-as-a-baroque-articulation-mark.ly
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "expressive-marks, really-cool, scheme-language, text"
} % begin verbatim
hairpinWithCenteredText =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
#{
\once \override Voice.Hairpin.after-line-breaking =
#(lambda (grob)
%
% This file is in the public domain.
%% Note: this file works from version 2.19.0
-\version "2.19.0"
+\version "2.19.22"
\header {
lsrtags = "pitches, real-music, really-cool, scheme-language"
rhythm =
-#(define-music-function (parser location p) (ly:pitch?)
+#(define-music-function (p) (ly:pitch?)
"Make the rhythm in Mars (the Planets) at the given pitch"
#{ \tuplet 3/2 { $p 8 8 8 } 4 4 8 8 4 #})
-% DO NOT EDIT this file manually; it is automatically
-% generated from Documentation/snippets/new
-% Make any changes in Documentation/snippets/new/
-% and then run scripts/auxiliar/makelsr.py
-%
-% This file is in the public domain.
-%% Note: this file works from version 2.19.21
-\version "2.19.21"
+%% 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 = "midi, scheme-language"
- lsrtags = "scheme-language, midi"
+ texidoc = "
+The following example shows how to create a dynamic marking, not
+included in the default list, and assign it a specific value so that it
+can be used to affect MIDI output.
- texidoc = "The following example shows how to create a dynamic
- marking, not included in the default list, and assign it a specific
- value so that it can be used to affect MIDI output.
- The dynamic mark @code{\\rfz} (@notation{rinforzando}) is assigned a
- value of @code{0.9}."
+The dynamic mark @code{\\rfz} is assigned a value of @code{0.9}.
+"
doctitle = "Creating custom dynamics in MIDI output"
} % begin verbatim
-
#(define (myDynamics dynamic)
(if (equal? dynamic "rfz")
0.9
-% DO NOT EDIT this file manually; it is automatically
-% generated from Documentation/snippets/new
-% Make any changes in Documentation/snippets/new/
-% and then run scripts/auxiliar/makelsr.py
-%
-% This file is in the public domain.
-%% Note: this file works from version 2.18.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 = "tweaks-and-overrides, pitches, staff-notation, contexts-and-engravers"
+ lsrtags = "contexts-and-engravers, pitches, staff-notation, tweaks-and-overrides"
texidoc = "
LilyPond supports custom key signatures. In this example, print for D
minor with an extended range of printed flats.
+
"
doctitle = "Creating custom key signatures"
} % begin verbatim
-
\new Staff \with {
\override StaffSymbol.line-count = #8
\override KeySignature.flat-positions = #'((-7 . 6))
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "expressive-marks, text, workaround"
} % begin verbatim
paren =
-#(define-event-function (parser location dyn) (ly:event?)
+#(define-event-function (dyn) (ly:event?)
(make-dynamic-script
#{ \markup \concat {
\normal-text \italic \fontsize #2 (
-% DO NOT EDIT this file manually; it is automatically
-% generated from Documentation/snippets/new
-% Make any changes in Documentation/snippets/new/
-% and then run scripts/auxiliar/makelsr.py
-%
-% This file is in the public domain.
-%% Note: this file works from version 2.19.7
+%% 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.19.7"
\header {
-
lsrtags = "contexts-and-engravers"
+ texidoc = "
+This example demonstrates how the ambitus engraver may be defined on
+the user side, with a Scheme engraver.
- texidoc = "This example demonstrates how the ambitus engraver may be
- defined on the user side, with a Scheme engraver.
+This is basically a rewrite in Scheme of the code from
+@code{lily/ambitus-engraver.cc}.
- This is basically a rewrite in Scheme of the code from
- @file{lily/ambitus-engraver.cc}.
"
-
doctitle = "Defining an engraver in Scheme: ambitus engraver"
} % begin verbatim
-
#(use-modules (oop goops))
%%%
-% DO NOT EDIT this file manually; it is automatically
-% generated from Documentation/snippets/new
-% Make any changes in Documentation/snippets/new/
-% and then run scripts/auxiliar/makelsr.py
-%
-% This file is in the public domain.
-%% Note: this file works from version 2.19.12
-\version "2.19.12"
+%% 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 = "devel, scheme-language, tweaks-and-overrides"
@{
- \\once \\override NoteHead.before-line-breaking = #display-ancestry
+ \\once \\override NoteHead #'before-line-breaking = #display-ancestry
c @}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
% Two functions for (de)crescendo spanners where you can explicitly give the
% spanner text.
mycresc =
-#(define-music-function (parser location mymarkup) (markup?)
+#(define-music-function (mymarkup) (markup?)
(make-music 'CrescendoEvent
'span-direction START
'span-type 'text
'span-text mymarkup))
mydecresc =
-#(define-music-function (parser location mymarkup) (markup?)
+#(define-music-function (mymarkup) (markup?)
(make-music 'DecrescendoEvent
'span-direction START
'span-type 'text
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "staff-notation, tweaks-and-overrides"
doctitle = "Extending glissandi across repeats"
} % begin verbatim
-repeatGliss = #(define-music-function (parser location grace)
+repeatGliss = #(define-music-function (grace)
(ly:pitch?)
#{
% the next two lines ensure the glissando is long enough
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "contemporary-notation, winds"
} % begin verbatim
slap =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
#{
\override NoteHead.stencil =
#(lambda (grob)
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "headword"
ssnor = \set stringNumberOrientations = #'(right)
% define fingering offset
-FO = #(define-music-function (parser location offsetX offsetY) (number? number?)
+FO = #(define-music-function (offsetX offsetY) (number? number?)
#{
\once \override Voice.Fingering.extra-offset = #(cons offsetX offsetY)
#})
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "automatic-notation, really-cool, scheme-language"
(set! pitch (modulo (1+ pitch) 7)))))
oneNoteScore =
-#(define-music-function (parser location) ()
- (add-one-note-score parser)
+#(define-music-function () ()
+ (add-one-note-score (*parser*))
(make-music 'Music 'void #t))
%%%
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "repeats"
} % begin verbatim
makePercent =
-#(define-music-function (parser location note) (ly:music?)
+#(define-music-function (note) (ly:music?)
"Make a percent repeat the same length as NOTE."
(make-music 'PercentEvent
'length (ly:music-length note)))
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.19.2
-\version "2.19.2"
+%% Note: this file works from version 2.19.21
+\version "2.19.21"
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
} % begin verbatim
-\relative c'' {
+\relative {
\time 2/4
<<
{
\once \hide Stem
\once \override Stem.length = #8
- b8 ~ 8\noBeam
+ b'8 ~ 8\noBeam
\once \hide Stem
\once \override Stem.length = #8
g8 ~ 8\noBeam
-\version "2.19.0"
+\version "2.19.22"
\header {
lsrtags = "pitches, real-music, really-cool, scheme-language"
}
rhythm =
-#(define-music-function (parser location p) (ly:pitch?)
+#(define-music-function (p) (ly:pitch?)
"Make the rhythm in Mars (the Planets) at the given pitch"
#{ \tuplet 3/2 { $p 8 8 8 } 4 4 8 8 4 #})
+++ /dev/null
-\version "2.19.21"
-
-\header {
-
- lsrtags = "scheme-language, midi"
-
- texidoc = "The following example shows how to create a dynamic
- marking, not included in the default list, and assign it a specific
- value so that it can be used to affect MIDI output.
-
- The dynamic mark @code{\rfz} (@notation{rinforzando}) is assigned a
- value of @code{0.9}."
-
- doctitle = "Creating custom dynamics in MIDI output"
-}
-
-#(define (myDynamics dynamic)
- (if (equal? dynamic "rfz")
- 0.9
- (default-dynamic-absolute-volume dynamic)))
-
-\score {
- \new Staff {
- \set Staff.midiInstrument = #"cello"
- \set Score.dynamicAbsoluteVolumeFunction = #myDynamics
- \new Voice {
- \relative {
- a'4\pp b c-\rfz
- }
- }
- }
- \layout {}
- \midi {}
-}
+++ /dev/null
-\version "2.18.0"
-
-\header {
- lsrtags = "tweaks-and-overrides, pitches, staff-notation, contexts-and-engravers"
-
- texidoc = "
-LilyPond supports custom key signatures. In this example, print for D
-minor with an extended range of printed flats.
-"
- doctitle = "Creating custom key signatures"
-}
-
-\new Staff \with {
- \override StaffSymbol.line-count = #8
- \override KeySignature.flat-positions = #'((-7 . 6))
- \override KeyCancellation.flat-positions = #'((-7 . 6))
- % presumably sharps are also printed in both octaves
- \override KeySignature.sharp-positions = #'((-6 . 7))
- \override KeyCancellation.sharp-positions = #'((-6 . 7))
-
- \override Clef.stencil = #
- (lambda (grob)(grob-interpret-markup grob
- #{ \markup\combine
- \musicglyph #"clefs.C"
- \translate #'(-3 . -2)
- \musicglyph #"clefs.F"
- #}))
- clefPosition = #3
- middleCPosition = #3
- middleCClefPosition = #3
-}
-
-{
- \key d\minor
- f bes, f bes,
-}
+++ /dev/null
-\version "2.19.7"
-
-\header {
-
- lsrtags = "contexts-and-engravers"
-
-
- texidoc = "This example demonstrates how the ambitus engraver may be
- defined on the user side, with a Scheme engraver.
-
- This is basically a rewrite in Scheme of the code from
- @file{lily/ambitus-engraver.cc}.
-"
-
- doctitle = "Defining an engraver in Scheme: ambitus engraver"
-}
-
-#(use-modules (oop goops))
-
-%%%
-%%% Grob utilities
-%%%
-%%% These are literal rewrites of some C++ methods used by the ambitus engraver.
-
-#(define (ly:separation-item::add-conditional-item grob grob-item)
- "Add @var{grob-item} to the array of conditional elements of @var{grob}.
-Rewrite of @code{Separation_item::add_conditional_item} from @file{lily/separation-item.cc}."
- (ly:pointer-group-interface::add-grob grob 'conditional-elements grob-item))
-
-#(define (ly:accidental-placement::accidental-pitch accidental-grob)
- "Get the pitch from the grob cause of @var{accidental-grob}.
-Rewrite of @code{accidental_pitch} from @file{lily/accidental-placement.cc}."
- (ly:event-property (ly:grob-property (ly:grob-parent accidental-grob Y) 'cause)
- 'pitch))
-
-#(define (ly:accidental-placement::add-accidental grob accidental-grob)
- "Add @var{accidental-grob}, an @code{Accidental} grob, to the
-list of the accidental grobs of @var{grob}, an @code{AccidentalPlacement}
-grob.
-Rewrite of @code{Accidental_placement::add_accidental} from @file{lily/accidental-placement.cc}."
- (let ((pitch (ly:accidental-placement::accidental-pitch accidental-grob)))
- (set! (ly:grob-parent accidental-grob X) grob)
- (set! (ly:grob-property accidental-grob 'X-offset)
- ly:grob::x-parent-positioning)
- (let* ((accidentals (ly:grob-object grob 'accidental-grobs))
- (handle (assq (ly:pitch-notename pitch) accidentals))
- (entry (if handle (cdr handle) '())))
- (set! (ly:grob-object grob 'accidental-grobs)
- (assq-set! accidentals
- (ly:pitch-notename pitch)
- (cons accidental-grob entry))))))
-
-%%%
-%%% Ambitus data structure
-%%%
-
-%%% The <ambitus> class holds the various grobs that are created
-%%% to print an ambitus:
-%%% - ambitus-group: the grob that groups all the components of an ambitus
-%%% (Ambitus grob);
-%%% - ambitus-line: the vertical line between the upper and lower ambitus
-%%% notes (AmbitusLine grob);
-%%% - ambitus-up-note and ambitus-down-note: the note head and accidental
-%%% for the lower and upper note of the ambitus (see <ambitus-note> class
-%%% below).
-%%% The other slots define the key and clef context of the engraver:
-%%% - start-c0: position of middle c at the beginning of the piece. It
-%%% is used to place the ambitus notes according to their pitch;
-%%% - start-key-sig: the key signature at the beginning of the piece. It
-%%% is used to determine if accidentals shall be printed next to ambitus
-%%% notes.
-
-#(define-class <ambitus> ()
- (ambitus-group #:accessor ambitus-group)
- (ambitus-line #:accessor ambitus-line)
- (ambitus-up-note #:getter ambitus-up-note
- #:init-form (make <ambitus-note>))
- (ambitus-down-note #:getter ambitus-down-note
- #:init-form (make <ambitus-note>))
- (start-c0 #:accessor ambitus-start-c0
- #:init-value #f)
- (start-key-sig #:accessor ambitus-start-key-sig
- #:init-value '()))
-
-%%% Accessor for the lower and upper note data of an ambitus
-#(define-method (ambitus-note (ambitus <ambitus>) direction)
- "If @var{direction} is @code{UP}, then return the upper ambitus note
-of @var{ambitus}, otherwise return the lower ambitus note."
- (if (= direction UP)
- (ambitus-up-note ambitus)
- (ambitus-down-note ambitus)))
-
-%%% The <ambitus-note> class holds the grobs that are specific to ambitus
-%%% (lower and upper) notes:
-%%% - head: an AmbitusNoteHead grob;
-%%% - accidental: an AmbitusAccidental grob, to be possibly printed next
-%%% to the ambitus note head.
-%%% Moreover:
-%%% - pitch is the absolute pitch of the note
-%%% - cause is the note event that causes this ambitus note, i.e. the lower
-%%% or upper note of the considered music sequence.
-
-#(define-class <ambitus-note> ()
- (head #:accessor ambitus-note-head
- #:init-value #f)
- (accidental #:accessor ambitus-note-accidental
- #:init-value #f)
- (cause #:accessor ambitus-note-cause
- #:init-value #f)
- (pitch #:accessor ambitus-note-pitch
- #:init-value #f))
-
-%%%
-%%% Ambitus engraving logics
-%%%
-%%% Rewrite of the code from @file{lily/ambitus-engraver.cc}.
-
-#(define (make-ambitus translator)
- "Build an ambitus object: initialize all the grobs and their relations.
-
-The Ambitus grob contain all other grobs:
- Ambitus
- |- AmbitusLine
- |- AmbitusNoteHead for upper note
- |- AmbitusAccidental for upper note
- |- AmbitusNoteHead for lower note
- |- AmbitusAccidental for lower note
-
-The parent of an accidental is the corresponding note head,
-and the accidental is set as the 'accidental-grob of the note head
-so that is printed by the function that prints notes."
- ;; make the ambitus object
- (let ((ambitus (make <ambitus>)))
- ;; build the Ambitus grob, which will contain all other grobs
- (set! (ambitus-group ambitus) (ly:engraver-make-grob translator 'Ambitus '()))
- ;; build the AmbitusLine grob (line between lower and upper note)
- (set! (ambitus-line ambitus) (ly:engraver-make-grob translator 'AmbitusLine '()))
- ;; build the upper and lower AmbitusNoteHead and AmbitusAccidental
- (for-each (lambda (direction)
- (let ((head (ly:engraver-make-grob translator 'AmbitusNoteHead '()))
- (accidental (ly:engraver-make-grob translator 'AmbitusAccidental '()))
- (group (ambitus-group ambitus)))
- ;; The parent of the AmbitusAccidental grob is the
- ;; AmbitusNoteHead grob
- (set! (ly:grob-parent accidental Y) head)
- ;; The AmbitusAccidental grob is set as the accidental-grob
- ;; object of the AmbitusNoteHead. This is later used by the
- ;; function that prints notes.
- (set! (ly:grob-object head 'accidental-grob) accidental)
- ;; both the note head and the accidental grobs are added
- ;; to the main ambitus grob.
- (ly:axis-group-interface::add-element group head)
- (ly:axis-group-interface::add-element group accidental)
- ;; the note head and the accidental grobs are added to the
- ;; ambitus object
- (set! (ambitus-note-head (ambitus-note ambitus direction))
- head)
- (set! (ambitus-note-accidental (ambitus-note ambitus direction))
- accidental)))
- (list DOWN UP))
- ;; The parent of the ambitus line is the lower ambitus note head
- (set! (ly:grob-parent (ambitus-line ambitus) X)
- (ambitus-note-head (ambitus-note ambitus DOWN)))
- ;; the ambitus line is added to the ambitus main grob
- (ly:axis-group-interface::add-element (ambitus-group ambitus) (ambitus-line ambitus))
- ambitus))
-
-#(define-method (initialize-ambitus-state (ambitus <ambitus>) translator)
- "Initialize the state of @var{ambitus}, by getting the starting
-position of middle C and key signature from @var{translator}'s context."
- (if (not (ambitus-start-c0 ambitus))
- (begin
- (set! (ambitus-start-c0 ambitus)
- (ly:context-property (ly:translator-context translator)
- 'middleCPosition
- 0))
- (set! (ambitus-start-key-sig ambitus)
- (ly:context-property (ly:translator-context translator)
- 'keyAlterations)))))
-
-#(define-method (update-ambitus-notes (ambitus <ambitus>) note-grob)
- "Update the upper and lower ambitus pithes of @var{ambitus}, using
-@var{note-grob}."
- ;; Get the event that caused the note-grob creation
- ;; and check that it is a note-event.
- (let ((note-event (ly:grob-property note-grob 'cause)))
- (if (ly:in-event-class? note-event 'note-event)
- ;; get the pitch from the note event
- (let ((pitch (ly:event-property note-event 'pitch)))
- ;; if this pitch is lower than the current ambitus lower
- ;; note pitch (or it has not been initialized yet),
- ;; then this pitch is the new ambitus lower pitch,
- ;; and conversely for upper pitch.
- (for-each (lambda (direction pitch-compare)
- (if (or (not (ambitus-note-pitch (ambitus-note ambitus direction)))
- (pitch-compare pitch
- (ambitus-note-pitch (ambitus-note ambitus direction))))
- (begin
- (set! (ambitus-note-pitch (ambitus-note ambitus direction))
- pitch)
- (set! (ambitus-note-cause (ambitus-note ambitus direction))
- note-event))))
- (list DOWN UP)
- (list ly:pitch<? (lambda (p1 p2)
- (ly:pitch<? p2 p1))))))))
-
-#(define-method (typeset-ambitus (ambitus <ambitus>) translator)
- "Typeset the ambitus:
-- place the lower and upper ambitus notes according to their pitch and
- the position of the middle C;
-- typeset or delete the note accidentals, according to the key signature.
- An accidental, if it is to be printed, is added to an AccidentalPlacement
- grob (a grob dedicated to the placement of accidentals near a chord);
-- both note heads are added to the ambitus line grob, so that a line should
- be printed between them."
- ;; check if there are lower and upper pitches
- (if (and (ambitus-note-pitch (ambitus-note ambitus UP))
- (ambitus-note-pitch (ambitus-note ambitus DOWN)))
- ;; make an AccidentalPlacement grob, for placement of note accidentals
- (let ((accidental-placement (ly:engraver-make-grob
- translator
- 'AccidentalPlacement
- (ambitus-note-accidental (ambitus-note ambitus DOWN)))))
- ;; For lower and upper ambitus notes:
- (for-each (lambda (direction)
- (let ((pitch (ambitus-note-pitch (ambitus-note ambitus direction))))
- ;; set the cause and the staff position of the ambitus note
- ;; according to the associated pitch
- (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction))
- 'cause)
- (ambitus-note-cause (ambitus-note ambitus direction)))
- (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction))
- 'staff-position)
- (+ (ambitus-start-c0 ambitus)
- (ly:pitch-steps pitch)))
- ;; determine if an accidental shall be printed for this note,
- ;; according to the key signature
- (let* ((handle (or (assoc (cons (ly:pitch-octave pitch)
- (ly:pitch-notename pitch))
- (ambitus-start-key-sig ambitus))
- (assoc (ly:pitch-notename pitch)
- (ambitus-start-key-sig ambitus))))
- (sig-alter (if handle (cdr handle) 0)))
- (cond ((= (ly:pitch-alteration pitch) sig-alter)
- ;; the note alteration is in the key signature
- ;; => it does not have to be printed
- (ly:grob-suicide!
- (ambitus-note-accidental (ambitus-note ambitus direction)))
- (set! (ly:grob-object (ambitus-note-head (ambitus-note ambitus direction))
- 'accidental-grob)
- '()))
- (else
- ;; otherwise, the accidental shall be printed
- (set! (ly:grob-property (ambitus-note-accidental
- (ambitus-note ambitus direction))
- 'alteration)
- (ly:pitch-alteration pitch)))))
- ;; add the AccidentalPlacement grob to the
- ;; conditional items of the AmbitusNoteHead
- (ly:separation-item::add-conditional-item
- (ambitus-note-head (ambitus-note ambitus direction))
- accidental-placement)
- ;; add the AmbitusAccidental to the list of the
- ;; AccidentalPlacement grob accidentals
- (ly:accidental-placement::add-accidental
- accidental-placement
- (ambitus-note-accidental (ambitus-note ambitus direction)))
- ;; add the AmbitusNoteHead grob to the AmbitusLine grob
- (ly:pointer-group-interface::add-grob
- (ambitus-line ambitus)
- 'note-heads
- (ambitus-note-head (ambitus-note ambitus direction)))))
- (list DOWN UP))
- ;; add the AccidentalPlacement grob to the main Ambitus grob
- (ly:axis-group-interface::add-element (ambitus-group ambitus) accidental-placement))
- ;; no notes ==> suicide the grobs
- (begin
- (for-each (lambda (direction)
- (ly:grob-suicide! (ambitus-note-accidental (ambitus-note ambitus direction)))
- (ly:grob-suicide! (ambitus-note-head (ambitus-note ambitus direction))))
- (list DOWN UP))
- (ly:grob-suicide! ambitus-line))))
-
-%%%
-%%% Ambitus engraver definition
-%%%
-#(define ambitus-engraver
- (lambda (context)
- (let ((ambitus #f))
- ;; when music is processed: make the ambitus object, if not already built
- (make-engraver
- ((process-music translator)
- (if (not ambitus)
- (set! ambitus (make-ambitus translator))))
- ;; set the ambitus clef and key signature state
- ((stop-translation-timestep translator)
- (if ambitus
- (initialize-ambitus-state ambitus translator)))
- ;; when a note-head grob is built, update the ambitus notes
- (acknowledgers
- ((note-head-interface engraver grob source-engraver)
- (if ambitus
- (update-ambitus-notes ambitus grob))))
- ;; finally, typeset the ambitus according to its upper and lower notes
- ;; (if any).
- ((finalize translator)
- (if ambitus
- (typeset-ambitus ambitus translator)))))))
-
-%%%
-%%% Example
-%%%
-
-\score {
- \new StaffGroup <<
- \new Staff { c'4 des' e' fis' gis' }
- \new Staff { \clef "bass" c4 des ~ des ees b, }
- >>
- \layout { \context { \Staff \consists #ambitus-engraver } }
-}
+++ /dev/null
-\version "2.19.12"
-
-\header {
- lsrtags = "devel, scheme-language, tweaks-and-overrides"
-
- texidoc = "
-When working with grob callbacks, it can be helpful to understand a
-grob's @qq{ancestry}. Most grobs have @qq{parents} which influence the
-positioning of the grob. X- and Y-parents influence the horizontal and
-vertical positions for the grob, respectively. Additionally, each
-parent may have parents of its own.
-
-
-Unfortunately, there are several aspects of a grob's ancestry that can
-lead to confusion:
-
-* The types of parents a grob has may depend on context. * For some
-grobs, the X- and Y-parents are the same. * A particular @qq{ancestor}
-may be related to a grob in multiple ways. * The concept of
-@qq{generations} is misleading.
-
-
-For example, the @code{System} grob can be both parent (on the Y-side)
-and grandparent (twice on the X-side) to a @code{VerticalAlignment}
-grob.
-
-
-This macro prints (to the console) a textual representation of a grob's
-ancestry.
-
-
-When called this way
-
-
-@{
- \\once \\override NoteHead.before-line-breaking = #display-ancestry
- c @}
-
-
-The following output is generated:
-
-
-------------------------------------
-
-NoteHead X,Y: NoteColumn
- X: PaperColumn
- X,Y: System
- Y: VerticalAxisGroup
- X: NonMusicalPaperColumn
- X,Y: System
- Y: VerticalAlignment
- X: NonMusicalPaperColumn
- X,Y: System
- Y: System
-
-
-
-"
- doctitle = "Displaying grob ancestry"
-}
-%% http://lsr.di.unimi.it/LSR/Item?id=622
-%% see also http://www.lilypond.org/doc/v2.18/Documentation/snippets/tweaks-and-overrides#tweaks-and-overrides-displaying-grob-ancestry
-
-#(define (grob-name grob)
- (if (ly:grob? grob)
- (assoc-ref (ly:grob-property grob 'meta) 'name)
- #f))
-
-#(define (get-ancestry grob)
- (if (not (null? (ly:grob-parent grob X)))
- (list (grob-name grob)
- (get-ancestry (ly:grob-parent grob X))
- (get-ancestry (ly:grob-parent grob Y)))
- (grob-name grob)))
-
-#(define (format-ancestry lst padding)
- (string-append
- (symbol->string (car lst))
- "\n"
- (let ((X-ancestry
- (if (list? (cadr lst))
- (format-ancestry (cadr lst) (+ padding 3))
- (symbol->string (cadr lst))))
- (Y-ancestry
- (if (list? (caddr lst))
- (format-ancestry (caddr lst) (+ padding 3))
- (symbol->string (caddr lst)))))
- (if (equal? X-ancestry Y-ancestry)
- (string-append
- (format #f "~&")
- (make-string padding #\space)
- "X,Y: "
- (if (list? (cadr lst))
- (format-ancestry (cadr lst) (+ padding 5))
- (symbol->string (cadr lst))))
- (string-append
- (format #f "~&")
- (make-string padding #\space)
- "X: " X-ancestry
- "\n"
- (make-string padding #\space)
- "Y: " Y-ancestry
- (format #f "~&"))))
- (format #f "~&")))
-
-#(define (display-ancestry grob)
- (format (current-error-port)
- "~3&~a~2%~a~&"
- (make-string 36 #\-)
- (format-ancestry (get-ancestry grob) 0)))
-
-\relative c' {
- \once \override NoteHead.before-line-breaking = #display-ancestry
- f4
- \once \override Accidental.before-line-breaking = #display-ancestry
- \once \override Arpeggio.before-line-breaking = #display-ancestry
- <f as c>4\arpeggio
-}
-\version "2.19.2"
+\version "2.19.21"
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
doctitle = "Making an object invisible with the 'transparent property"
}
-\relative c'' {
+\relative {
\time 2/4
<<
{
\once \hide Stem
\once \override Stem.length = #8
- b8 ~ 8\noBeam
+ b'8 ~ 8\noBeam
\once \hide Stem
\once \override Stem.length = #8
g8 ~ 8\noBeam
-\version "2.19.7"
+\version "2.19.21"
\header {
lsrtags = "contemporary-notation, pitches, really-cool, staff-notation, version-specific"
}
-\relative c' {
+\relative {
\set Staff.keyAlterations = #`((6 . ,FLAT)
(5 . ,FLAT)
(3 . ,SHARP))
- c4 d e fis
+ c'4 d e fis
aes4 bes c2
}
+++ /dev/null
-\version "2.19.14"
-
-\header {
- lsrtags = "simultaneous-notes, tweaks-and-overrides"
-
- texidoc = "
-If notes from two voices with stems in the same direction are placed at
-the same position, but the voices have no voice-specific shifts
-specified, the error message @samp{warning: ignoring too many clashing
-note columns} will appear when compiling the LilyPond file. This
-message can be suppressed by setting the @code{'ignore-collision}
-property of the @code{NoteColumn} object to @code{#t}. Please note that
-this does not just suppress warnings but stops LilyPond trying to
-resolve collisions at all and so may have unintended results unless
-used with care.
-"
- doctitle = "Suppressing warnings for clashing note columns"
-}
-
-ignore = \override NoteColumn.ignore-collision = ##t
-
-\relative c' {
- \new Staff <<
- \new Voice{ \ignore \stemDown f2 g }
- \new Voice{ c2 \stemDown c, }
- >>
-}
+++ /dev/null
-\version "2.17.18"
-
-\header {
- lsrtags = "pitches, staff-notation, tweaks-and-overrides"
-
- texidoc = "
-Changing the Clef glyph, its position, or the ottavation does not
-change the position of subsequent notes on the staff. To get key
-signatures on their correct staff lines @code{middleCClefPosition}
-must also be specified, with positive or negative values moving
-@emph{middle C} up or down respectively, relative to the staff's
-center line.
-
-For example, @code{\\clef \"treble_8\"} is equivalent to setting
-the @code{clefGlyph}, @code{clefPosition} (the vertical position
-of the clef itself on the staff), @code{middleCPosition} and
-@code{clefTransposition}. Note that when any of these properties
-(except @code{middleCPosition}) are changed a new clef symbol is
-printed.
-
-The following examples show the possibilities when setting these
-properties manually. On the first line, the manual changes preserve the
-standard relative positioning of clefs and notes, whereas on the second
-line, they do not.
-
-"
- doctitle = "Tweaking clef properties"
-} % begin verbatim
-
-\layout { ragged-right = ##t }
-{
- % The default treble clef
- \key f \major
- c'1
- % The standard bass clef
- \set Staff.clefGlyph = #"clefs.F"
- \set Staff.clefPosition = #2
- \set Staff.middleCPosition = #6
- \set Staff.middleCClefPosition = #6
- \key g \major
- c'1
- % The baritone clef
- \set Staff.clefGlyph = #"clefs.C"
- \set Staff.clefPosition = #4
- \set Staff.middleCPosition = #4
- \set Staff.middleCClefPosition = #4
- \key f \major
- c'1
- % The standard choral tenor clef
- \set Staff.clefGlyph = #"clefs.G"
- \set Staff.clefPosition = #-2
- \set Staff.clefTransposition = #-7
- \set Staff.middleCPosition = #1
- \set Staff.middleCClefPosition = #1
- \key f \major
- c'1
- % A non-standard clef
- \set Staff.clefPosition = #0
- \set Staff.clefTransposition = #0
- \set Staff.middleCPosition = #-4
- \set Staff.middleCClefPosition = #-4
- \key g \major
- c'1 \break
-
- % The following clef changes do not preserve
- % the normal relationship between notes, key signatures
- % and clefs:
-
- \set Staff.clefGlyph = #"clefs.F"
- \set Staff.clefPosition = #2
- c'1
- \set Staff.clefGlyph = #"clefs.G"
- c'1
- \set Staff.clefGlyph = #"clefs.C"
- c'1
- \set Staff.clefTransposition = #7
- c'1
- \set Staff.clefTransposition = #0
- \set Staff.clefPosition = #0
- c'1
-
- % Return to the normal clef:
-
- \set Staff.middleCPosition = #0
- c'1
-}
+++ /dev/null
-\version "2.19.21"
-
-\header {
- lsrtags = "automatic-notation, keyboards, template, vocal-music"
-
- texidoc = "
-This template adds an automatic piano reduction to the standard SATB
-vocal score demonstrated in @qq{Vocal ensemble template}. This
-demonstrates one of the strengths of LilyPond – you can use a music
-definition more than once. If any changes are made to the vocal notes
-(say, @code{tenorMusic}), then the changes will also apply to the piano
-reduction.
-
-"
- doctitle = "Vocal ensemble template with automatic piano reduction"
-}
-\paper {
- top-system-spacing.basic-distance = #10
- score-system-spacing.basic-distance = #20
- system-system-spacing.basic-distance = #20
- last-bottom-spacing.basic-distance = #10
-}
-
-global = {
- \key c \major
- \time 4/4
-}
-
-sopMusic = \relative {
- c''4 c c8[( b)] c4
-}
-sopWords = \lyricmode {
- hi hi hi hi
-}
-
-altoMusic = \relative {
- e'4 f d e
-}
-altoWords =\lyricmode {
- ha ha ha ha
-}
-
-tenorMusic = \relative {
- g4 a f g
-}
-tenorWords = \lyricmode {
- hu hu hu hu
-}
-
-bassMusic = \relative {
- c4 c g c
-}
-bassWords = \lyricmode {
- ho ho ho ho
-}
-
-\score {
- <<
- \new ChoirStaff <<
- \new Lyrics = "sopranos" \with {
- % This is needed for lyrics above a staff
- \override VerticalAxisGroup.staff-affinity = #DOWN
- }
- \new Staff = "women" <<
- \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
- \new Voice = "altos" { \voiceTwo << \global \altoMusic >> }
- >>
- \new Lyrics = "altos"
- \new Lyrics = "tenors" \with {
- % This is needed for lyrics above a staff
- \override VerticalAxisGroup.staff-affinity = #DOWN
- }
-
- \new Staff = "men" <<
- \clef bass
- \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> }
- \new Voice = "basses" { \voiceTwo << \global \bassMusic >> }
- >>
- \new Lyrics = "basses"
- \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords
- \context Lyrics = "altos" \lyricsto "altos" \altoWords
- \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords
- \context Lyrics = "basses" \lyricsto "basses" \bassWords
- >>
- \new PianoStaff <<
- \new Staff <<
- \set Staff.printPartCombineTexts = ##f
- \partcombine
- << \global \sopMusic >>
- << \global \altoMusic >>
- >>
- \new Staff <<
- \clef bass
- \set Staff.printPartCombineTexts = ##f
- \partcombine
- << \global \tenorMusic >>
- << \global \bassMusic >>
- >>
- >>
- >>
-}
+++ /dev/null
-\version "2.19.21"
-
-\header {
- lsrtags = "really-simple, template, vocal-music"
-
- texidoc = "
-Here is a standard four-part SATB vocal score. With larger ensembles,
-it is often useful to include a section which is included in all parts.
-For example, the time signature and key signature are almost always the
-same for all parts. Like in the @qq{Hymn} template, the four voices are
-regrouped on only two staves.
-
-"
- doctitle = "Vocal ensemble template"
-}
-\paper {
- top-system-spacing.basic-distance = #10
- score-system-spacing.basic-distance = #20
- system-system-spacing.basic-distance = #20
- last-bottom-spacing.basic-distance = #10
-}
-
-global = {
- \key c \major
- \time 4/4
-}
-
-sopMusic = \relative {
- c''4 c c8[( b)] c4
-}
-sopWords = \lyricmode {
- hi hi hi hi
-}
-
-altoMusic = \relative {
- e'4 f d e
-}
-altoWords = \lyricmode {
- ha ha ha ha
-}
-
-tenorMusic = \relative {
- g4 a f g
-}
-tenorWords = \lyricmode {
- hu hu hu hu
-}
-
-bassMusic = \relative {
- c4 c g c
-}
-bassWords = \lyricmode {
- ho ho ho ho
-}
-
-\score {
- \new ChoirStaff <<
- \new Lyrics = "sopranos" \with {
- % this is needed for lyrics above a staff
- \override VerticalAxisGroup.staff-affinity = #DOWN
- }
- \new Staff = "women" <<
- \new Voice = "sopranos" {
- \voiceOne
- << \global \sopMusic >>
- }
- \new Voice = "altos" {
- \voiceTwo
- << \global \altoMusic >>
- }
- >>
- \new Lyrics = "altos"
- \new Lyrics = "tenors" \with {
- % this is needed for lyrics above a staff
- \override VerticalAxisGroup.staff-affinity = #DOWN
- }
- \new Staff = "men" <<
- \clef bass
- \new Voice = "tenors" {
- \voiceOne
- << \global \tenorMusic >>
- }
- \new Voice = "basses" {
- \voiceTwo << \global \bassMusic >>
- }
- >>
- \new Lyrics = "basses"
- \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords
- \context Lyrics = "altos" \lyricsto "altos" \altoWords
- \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords
- \context Lyrics = "basses" \lyricsto "basses" \bassWords
- >>
-}
+++ /dev/null
-
-\version "2.19.20"
-
-\header {
- lsrtags = "headword"
-
- texidoc = "
-Vocal headword
-
-"
- doctitle = "Vocal headword"
-}
-
-%% http://lsr.di.unimi.it/LSR/Item?id=832
-%% see also http://lilypond.org/doc/v2.18/Documentation/notation/vocal-music
-
-% L. van Beethoven. Symphony No. 9 in D minor, op.125; Finale
-% mm. 216 -- 236
-% Text: F. von Schiller
-
-\score {
- \new Staff \relative c' {
- \set Score.currentBarNumber = 216
- \bar "" % make first bar number be shown
- \clef bass \key d \minor \time 3/4
- % \tempo "Presto"
- % \compressMMRests R2.*8
- \tempo "Recitativo"
- \autoBeamOff
- r4^\markup { \small Baritono } r a
- \appoggiatura a8 e'2. ~
- e4 d8[ cis d e]
- e4 g, r8 g
- bes2 a8 e
- g4 f r
- R2.*2
- gis2 gis4
- r4 d'4. b8
- b4 gis8([ a b cis]
- e8[ d cis d)] b([ gis)]
- e8 d d4 fis8([ e)]
- d4 cis r
- \key d \major
- r4 r a'
- d4.( e8[ fis e)]
- e([ d)] d([ cis d a)]
- g8([ fis)] fis([ e d c)]
- c8([ b)] g'2~
- \once \override Script.outside-staff-priority = #1 % put fermata closer to staff
- g4.\fermata ^\markup { \small \italic "ad libitum" } e8[ cis!] d
- d8 a a4 r \bar "||"
-
- % \time 4/4 \tempo "Allegro assai"
- % R1
- % e''4^\f d r2
- % R1
- % e4( ^\f d2) a8([ g)]
- }
- \addlyrics {
- O Freun -- _ _ de, nicht die -- _ se Tö -- ne!
- Son -- dern laßt uns an -- _ ge -- neh -- me -- re an -- stim -- men,
- und freu -- _ _ _ _ _ _ _ den -- vol -- le -- re!
- % Freu -- de, Freu -- de,__
- }
-}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.19.7
-\version "2.19.7"
+%% Note: this file works from version 2.19.21
+\version "2.19.21"
\header {
lsrtags = "contemporary-notation, pitches, really-cool, staff-notation, version-specific"
-\relative c' {
+\relative {
\set Staff.keyAlterations = #`((6 . ,FLAT)
(5 . ,FLAT)
(3 . ,SHARP))
- c4 d e fis
+ c'4 d e fis
aes4 bes c2
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "scheme-language, tweaks-and-overrides"
tweaks)))))
customScripts =
-#(define-music-function (parser location settings)(list?)
+#(define-music-function (settings)(list?)
#{
\override Script.before-line-breaking =
#(custom-script-tweaks settings)
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
}
% Function to print a specified number of slashes
-comp = #(define-music-function (parser location count) (integer?)
+comp = #(define-music-function (count) (integer?)
#{
\override Rest.stencil = #ly:percent-repeat-item-interface::beat-slash
\override Rest.thickness = #0.48
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "real-music, specific-notation, template"
}
AltOn =
-#(define-music-function (parser location mag) (number?)
+#(define-music-function (mag) (number?)
#{ \override Stem.length = #(* 7.0 mag)
\override NoteHead.font-size =
#(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #})
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "editorial-annotations, fretted-strings, scheme-language, text, tweaks-and-overrides"
} % begin verbatim
stringNumberSpanner =
- #(define-music-function (parser location StringNumber) (string?)
+ #(define-music-function (StringNumber) (string?)
#{
\override TextSpanner.style = #'solid
\override TextSpanner.font-size = #-5
beams into sub-groups by setting the property @code{subdivideBeams}.
When set, multiple beams will be subdivided at intervals defined by the
current value of @code{baseMoment} by reducing the multiple beams to
-just one beam between the sub-groups. Note that @code{baseMoment}
-defaults to one over the denominator of the current time signature if
-not set explicitly. It must be set to a fraction giving the duration of
-the beam sub-group using the @code{ly:make-moment} function, as shown
-in this snippet. Also, when @code{baseMoment} is changed,
-@code{beatStructure} should also be changed to match the new
-@code{baseMoment}:
+the number of beams that indicates the length of the sub-group. Note
+that @code{baseMoment} defaults to one over the denominator of the
+current time signature if not set explicitly. It must be set to a
+fraction giving the duration of the beam sub-group using the
+@code{ly:make-moment} function, as shown in this snippet. Also, when
+@code{baseMoment} is changed, @code{beatStructure} should also be
+changed to match the new @code{baseMoment}:
"
doctitle = "Subdividing beams"
-% DO NOT EDIT this file manually; it is automatically
-% generated from Documentation/snippets/new
-% Make any changes in Documentation/snippets/new/
-% and then run scripts/auxiliar/makelsr.py
-%
-% This file is in the public domain.
-%% Note: this file works from version 2.19.14
-\version "2.19.14"
+%% 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 = "simultaneous-notes, tweaks-and-overrides"
texidoc = "
If notes from two voices with stems in the same direction are placed at
-the same position, but the voices have no voice-specific shifts
+the same position, and both voices have no shift or the same shift
specified, the error message @samp{warning: ignoring too many clashing
note columns} will appear when compiling the LilyPond file. This
message can be suppressed by setting the @code{'ignore-collision}
this does not just suppress warnings but stops LilyPond trying to
resolve collisions at all and so may have unintended results unless
used with care.
+
"
doctitle = "Suppressing warnings for clashing note columns"
} % begin verbatim
-
ignore = \override NoteColumn.ignore-collision = ##t
\relative c' {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
\header {
lsrtags = "pitches, scheme-language, workaround"
music))
naturalizeMusic =
-#(define-music-function (parser location m)
+#(define-music-function (m)
(ly:music?)
(naturalize m))
-% DO NOT EDIT this file manually; it is automatically
-% generated from Documentation/snippets/new
-% Make any changes in Documentation/snippets/new/
-% and then run scripts/auxiliar/makelsr.py
-%
-% This file is in the public domain.
-%% Note: this file works from version 2.17.18
-\version "2.17.18"
+%% 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, staff-notation, tweaks-and-overrides"
texidoc = "
Changing the Clef glyph, its position, or the ottavation does not
change the position of subsequent notes on the staff. To get key
-signatures on their correct staff lines @code{middleCClefPosition}
-must also be specified, with positive or negative values moving
-@emph{middle C} up or down respectively, relative to the staff's
-center line.
+signatures on their correct staff lines @code{middleCClefPosition} must
+also be specified, with positive or negative values moving @code{middle
+C} up or down respectively, relative to the staff's center line.
-For example, @code{\\clef \"treble_8\"} is equivalent to setting
-the @code{clefGlyph}, @code{clefPosition} (the vertical position
-of the clef itself on the staff), @code{middleCPosition} and
+
+For example, @code{\\clef \"treble_8\"} is equivalent to setting the
+@code{clefGlyph}, @code{clefPosition} (the vertical position of the
+clef itself on the staff), @code{middleCPosition} and
@code{clefTransposition}. Note that when any of these properties
(except @code{middleCPosition}) are changed a new clef symbol is
printed.
+
The following examples show the possibilities when setting these
properties manually. On the first line, the manual changes preserve the
standard relative positioning of clefs and notes, whereas on the second
doctitle = "Tweaking clef properties"
} % begin verbatim
-\layout { ragged-right = ##t } % begin verbatim
-
{
% The default treble clef
\key f \major
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.19.22"
+
+\header {
+ lsrtags = "ancient-notation, vocal-music"
+
+ texidoc = "
+By using tags, it's possible to use the same music to produce both
+mensural and modern music. In this snippet, a function @code{menrest}
+is introduced, allowing mensural rests to be pitched as in the
+original, but with modern rests in the standard staff position. Tags
+are used to produce different types of bar line at the end of the
+music, but tags can also be used where other differences are needed:
+for example using @qq{whole measure rests} (R1, R\\breve etc.) in
+modern music, but normal rests (r1, r\\breve, etc.) in the mensural
+version. Note that converting mensural music to its modern equivalent
+is usually referred to as @code{transcription}.
+
+"
+ doctitle = "Using tags to produce mensural and modern music from the same source"
+} % begin verbatim
+
+menrest = #(define-music-function (note)
+ (ly:music?)
+#{
+ \tag #'mens $(make-music 'RestEvent note)
+ \tag #'mod $(make-music 'RestEvent note 'pitch '())
+#})
+
+MensStyle = {
+ \autoBeamOff
+ \override NoteHead #'style = #'petrucci
+ \override Score.BarNumber #'transparent = ##t
+ \override Stem.neutral-direction = #up
+}
+
+finalis = {
+ \once \override BreathingSign.stencil = #ly:breathing-sign::finalis
+ \once \override BreathingSign.Y-offset = #0
+ \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
+ \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
+
+ \breathe
+}
+
+Music = \relative c'' {
+ \set Score.tempoHideNote = ##t
+ \key f \major
+ \time 4/4
+ g1 d'2 \menrest bes4 bes2 a2 r4 g4 fis2. \tag #'mens { \finalis } \tag #'mod { \bar "||" }
+}
+
+MenLyr = \lyricmode { So farre, deere life, deare life }
+ModLyr = \lyricmode { So far, dear life, dear life }
+
+\score {
+ \keepWithTag #'mens {
+ <<
+ \new MensuralStaff
+ {
+ \new MensuralVoice = Cantus \clef "mensural-c1" \MensStyle \Music
+ }
+ \new Lyrics \lyricsto Cantus \MenLyr
+ >>
+ }
+}
+
+\score {
+ \keepWithTag #'mod {
+ \new ChoirStaff <<
+ \new Staff
+ {
+ \new Voice = Sop \with {
+ \remove "Note_heads_engraver"
+ \consists "Completion_heads_engraver"
+ \remove "Rest_engraver"
+ \consists "Completion_rest_engraver" }
+ {
+ \shiftDurations #1 #0 { \autoBeamOff \Music }
+ }
+ }
+ \new Lyrics \lyricsto Sop \ModLyr
+ >>
+ }
+}
-% DO NOT EDIT this file manually; it is automatically
-% generated from Documentation/snippets/new
-% Make any changes in Documentation/snippets/new/
-% and then run scripts/auxiliar/makelsr.py
-%
-% This file is in the public domain.
-%% Note: this file works from version 2.19.21
-\version "2.19.21"
+%% 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 = "automatic-notation, keyboards, template, vocal-music"
-% DO NOT EDIT this file manually; it is automatically
-% generated from Documentation/snippets/new
-% Make any changes in Documentation/snippets/new/
-% and then run scripts/auxiliar/makelsr.py
-%
-% This file is in the public domain.
-%% Note: this file works from version 2.19.21
-\version "2.19.21"
+%% 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 = "really-simple, template, vocal-music"
-% DO NOT EDIT this file manually; it is automatically
-% generated from Documentation/snippets/new
-% Make any changes in Documentation/snippets/new/
-% and then run scripts/auxiliar/makelsr.py
-%
-% This file is in the public domain.
-%% Note: this file works from version 2.19.20
-
-\version "2.19.20"
+%% 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 = "headword"
doctitle = "Vocal headword"
} % begin verbatim
-
%% http://lsr.di.unimi.it/LSR/Item?id=832
%% see also http://lilypond.org/doc/v2.18/Documentation/notation/vocal-music
\set Score.currentBarNumber = 216
\bar "" % make first bar number be shown
\clef bass \key d \minor \time 3/4
- % \tempo "Presto"
- % \compressMMRests R2.*8
\tempo "Recitativo"
\autoBeamOff
r4^\markup { \small Baritono } r a
skips-in-lyric-mode-2.ly
skips-in-lyric-mode.ly
using-arpeggiobracket-to-make-divisi-more-visible.ly
+using-tags-to-produce-mensural-and-modern-music-from-the-same-source.ly
vertically-aligning-ossias-and-lyrics.ly
vertically-centered-common-lyrics.ly
vocal-ensemble-template-with-automatic-piano-reduction.ly
@c used for news about the upcoming release; see CG 10.2
@newsItem
-@subheading LilyPond 2.19.20 released @emph{May 10, 2015}
+@subheading LilyPond 2.19.21 released @emph{May 24, 2015}
We are happy to announce the release of LilyPond
-2.19.20. This release includes a number of enhancements, and contains some
+2.19.21. This release includes a number of enhancements, and contains some
work in progress. You will have access to the very latest features, but
some may be incomplete, and you may encounter bugs and crashes. If you
require a stable version of Lilypond, we recommend using the 2.18
* don't duplicate entries from news-front.itexi
@end ignore
+@newsItem
+@subheading LilyPond 2.19.20 released @emph{May 10, 2015}
+
+We are happy to announce the release of LilyPond
+2.19.20. 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.19 released @emph{April 26, 2015}
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=19
-PATCH_LEVEL=21
+PATCH_LEVEL=22
MY_PATCH_LEVEL=
VERSION_STABLE=2.18.2
-VERSION_DEVEL=2.19.20
+VERSION_DEVEL=2.19.21
CXXFLAGS=${CXXFLAGS-$CFLAGS}
LDFLAGS=${LDFLAGS-""}
optimise_b=yes
+ checks_b=no
profile_b=no
debug_b=yes
pipe_b=yes
[compile with debugging info. Default: on])],
[debug_b=$enableval])
+ AC_ARG_ENABLE(checking,
+ [AS_HELP_STRING([--enable-checking],
+ [compile with expensive run-time checks. Default: off])],
+ [checks_b=$enableval])
+
AC_ARG_ENABLE(optimising,
[AS_HELP_STRING([--enable-optimising],
[compile with optimising. Default: on])],
[pipe_b=$enableval])
if test "$optimise_b" = yes; then
- AC_DEFINE(NDEBUG)
- DEFINES="$DEFINES -DNDEBUG"
OPTIMIZE=" -O2 -finline-functions"
+ # following two lines are compatibility while Patchy has not
+ # yet learnt about --enable-checking. But once it has, we
+ # don't want -DDEBUG twice, so we omit it here if it is going
+ # to get added anyway later.
+ elif test "$checks_b" != yes; then
+ DEFINES="$DEFINES -DDEBUG"
+ fi
+
+ if test "$checks_b" = yes; then
+ DEFINES="$DEFINES -DDEBUG"
fi
if test $profile_b = yes; then
}
void OK () const
{
-#ifndef NDEBUG
+#ifdef DEBUG
for (vsize i = 2; i <= size (); i++)
assert (compare (elt (i / 2), elt (i)) <= 0);
#endif
/*
leads to dubious crashes - libstdc++ bug?
*/
-#ifndef NDEBUG
+#ifdef DEBUG
#define _GLIBCXX_DEBUG 1
#endif
#endif
/*
leads to dubious crashes - libstdc++ bug?
*/
-#ifndef NDEBUG
+#ifdef DEBUG
#define _GLIBCXX_DEBUG 1
#endif
#endif
"
}
-\version "2.17.6"
+\version "2.19.21"
-\relative c'' {
+\relative {
\time 3/4
% FIXME: standard vs default, alteration-FOO vs FOO-alteration
\override Staff.Accidental.glyph-name-alist = #standard-alteration-glyph-name-alist
- cis^\markup { \typewriter default } c ces
+ cis''^\markup { \typewriter default } c ces
\override Staff.Accidental.glyph-name-alist = #alteration-hufnagel-glyph-name-alist
cis^\markup { \typewriter hufnagel } c ces
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Several automatic accidental rules
\layout { ragged-right = ##t }
\score {
- \relative c'' {
+ \relative {
\accidentalStyle dodecaphonic
- gis4 a g gisis
+ gis'4 a g gisis
\accidentalStyle neo-modern
gis8 a gis gis g' gis gis,, a'
\accidentalStyle neo-modern-cautionary
}
\score {
- \relative c'' {
+ \relative {
\set Staff.autoAccidentals = #'()
\set Staff.autoCautionaries = #'()
- gis!4 a! g! gisis!
+ gis'!4 a! g! gisis!
gis!8 a gis! gis g'! gis! gis,,! a'
eis! fis! eis? eis g?2
\key e \major
-\version "2.17.0"
+\version "2.19.21"
\header {
texidoc = "Horizontal @code{Fingering} grobs should not collide with
"
}
-\relative c' {
+\relative {
\time 2/4
\set fingeringOrientations = #'(left)
<a-3 cis-4> <a-3 cis!-4> |
}
-\version "2.17.15"
+\version "2.19.21"
\layout
{
ragged-right = ##t
}
-\new PianoStaff \relative c' <<
+\new PianoStaff \relative <<
\accidentalStyle piano
\new Staff { ges'4 ges4 }
\new Staff { r8 gis r8 gis }
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Accidental padding works for all accidentals, including
those modifying the same pitch."
}
-\relative c' {
+\relative {
\override Staff.AccidentalPlacement.padding = #2
- <ces cis>1
+ <ces' cis>1
<ces des>1
}
}
-\version "2.17.25"
+\version "2.19.21"
\paper {
ragged-right = ##t
}
-\relative c'' {
+\relative {
\time 2/4
\set suggestAccidentals = ##t
- cis^> gis'-!
+ cis''^> gis'-!
\override AccidentalSuggestion.parenthesized = ##t
cis,_"paren" gis'
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "The @code{\\applyOutput} expression is the most flexible way to
))))
))))
-\new Voice \relative c' {
+\new Voice \relative {
\set autoBeaming = ##f
- <d f g b>8
+ <d' f g b>8
\applyOutput #'Voice #mc-squared
<d f g b>8
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Arpeggios do not overshoot the highest note head.
@code{'positions} for comparison with the correct behaviour."
}
-\relative c' {
+\relative {
% simulate overshoot for comparison
\once \override Arpeggio.positions = #'(-3 . 1)
- <c e g b>1\arpeggio
+ <c' e g b>1\arpeggio
<c e g b>1\arpeggio
<f a c>2\arpeggio <g b d f>\arpeggio
}
-\version "2.17.26"
+\version "2.19.21"
\header {
texidoc = "Span arpeggios that are not cross-staff do not have
{
\consists "Span_arpeggio_engraver"
}
-\relative c''
+\relative
{
\set Staff.connectArpeggios = ##t
<<
- {r2. <ges aes c ges'>4\arpeggio |}
+ {r2. <ges' aes c ges'>4\arpeggio |}
\\
{\repeat unfold 12 aes,16 <ees aes c>4\arpeggio |}
>>
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Automatic beams are ended early if a breathing sign is
encountered."
}
-\relative c' {
+\relative {
\time 1/1
- \repeat unfold 8 c8
+ \repeat unfold 8 c'8
c8 c
\breathe
c8 c c c c
texidoc="Autobeaming works properly in partial measures."
}
-\version "2.16.0"
+\version "2.19.21"
-\relative c'' {
+\relative {
\time 6/8
\partial 2
- a8 a a a |
+ a'8 a a a |
}
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "In 4/4 time, the first and second and third and fourth
}
\layout { ragged-right = ##t }
-\relative c'' {
- \repeat unfold 8 { a8} |
+\relative {
+ \repeat unfold 8 { a'8} |
a8 a a a16 a a8 a a16 a a8 |
r16 a8. a8 a16 a r8. a16 a8 a16 a |
}
-\version "2.16.0"
+\version "2.19.22"
\header {
texidoc = "The bottom-level contexts in polyphony shorthand are
}
assertContextId =
-#(define-music-function (parser location id) (string?)
+#(define-music-function (id) (string?)
(let ((music (make-music 'ApplyContext
'procedure
(lambda (ctx)
-\version "2.19.12"
+\version "2.19.21"
forcedLastBreak = {} %% { \break } if needed to match original breaks
}
-sarabandeA = \context Voice \relative c {
+sarabandeA = \context Voice \relative {
\override Staff.NoteCollision.merge-differently-dotted = ##t
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "The @code{barNumberVisibility} property controls at what
"
}
-music = \relative c' {
- \repeat unfold 3 { c2 \bar "" \break \repeat unfold 5 c2 }
+music = \relative {
+ \repeat unfold 3 { c'2 \bar "" \break \repeat unfold 5 c2 }
}
{
-\version "2.17.6"
+\version "2.19.22"
\header {
texidoc = "Bar numbers can automatically reset at volta repeats.
}
musicWithBarNumberCheck =
-#(define-music-function (parser location n)
+#(define-music-function (n)
(integer?)
#{
- \relative c' {
+ \relative {
\override Score.BarNumber.break-visibility = ##(#t #t #t)
\repeat volta 28 {
- c1 |
+ c'1 |
c |
c |
}
-\version "2.17.6"
+\version "2.19.21"
\header {
ragged-right = ##t
}
-\relative c'' {
+\relative {
\override Score.BarNumber.break-visibility = #all-visible
- \partial 4 c4
+ \partial 4 c''4
c1 c c
\set Score.currentBarNumber = #99999
\override Score.BarNumber.padding = #3
beamlets on the same height."
}
-\version "2.17.6"
+\version "2.19.21"
\paper {
raggedright = ##t
}
-\relative c' {
+\relative {
\time 1/4
\override Beam.breakable = ##t
- r16 r16. c32[ c16 \break c8. ] r16
+ r16 r16. c'32[ c16 \break c8. ] r16
}
\layout {
ragged-right = ##t
}
-\version "2.16.0"
+\version "2.19.21"
-\relative c'' {
+\relative {
\time 5/16
\set beatStructure = #'(2 3)
- c8[^"(2+3)" c16 c8]
+ c''8[^"(2+3)" c16 c8]
\set beatStructure = #'(3 2)
c8[^"(3+2)" c16 c8]
}
"
}
-\version "2.17.6"
+\version "2.19.21"
\layout { ragged-right= ##t }
-\relative c'' {
+\relative {
\override Score.Beam.breakable = ##t
- \time 3/16 c16-[ d e \break f-]
+ \time 3/16 c''16-[ d e \break f-]
}
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc="Some classic examples of broken beams, all taken from
ragged-right = ##t
}
-music = \relative c'' {
+music = \relative {
\override Beam.breakable = ##t
- r2. f8[ c \break
+ r2. f''8[ c \break
e c f,] r8 r4 a'8[ e \break
g d g,] r8 r4 f'8[ a, \break
e' g, bes] r8 r4 <a' a,>8 [ d, \break
-\version "2.17.15"
+\version "2.19.21"
\header {
texidoc = "Manual beams do not collide with notes."
}
indent = #0.0
}
-\relative c' \new Staff {
+\relative \new Staff {
<<
\new Voice {
\voiceOne
- \repeat unfold 8 { c8[ c] }
+ \repeat unfold 8 { c'8[ c] }
}
- \new Voice \relative c'' {
+ \new Voice \relative {
\voiceThree
\autoBeamOff
- f r e r
+ f'' r e r
d r c r
b r a r
g r f r
\voiceOne
\repeat unfold 8 { c8[ c] }
}
- \new Voice \relative c'' {
+ \new Voice \relative {
\voiceThree
\autoBeamOff
- f f e e
+ f'' f e e
d d c c
b b a a
g g f f
<<
\new Voice {
- \repeat unfold 8 \relative c' {
+ \repeat unfold 8 \relative {
\voiceOne
- c8[
+ c'8[
\voiceTwo
c'']
}
}
- \new Voice \relative c' {
+ \new Voice \relative {
\voiceFour
- s8 f
+ s8 f'
s8 g
s8 a
s8 b
\break
<<
\new Voice {
- \repeat unfold 8 \relative c' {
+ \repeat unfold 8 \relative {
\voiceOne
%% We must use a wider interval, otherwise the beam will be
c'']
}
}
- \new Voice \relative c' {
+ \new Voice \relative {
\voiceFour
\autoBeamOff
- \stemUp f' \stemDown f,
+ \stemUp f'' \stemDown f,
\stemUp e' \stemDown g,
\stemUp d' \stemDown a
\stemUp c \stemDown b
-\version "2.17.15"
+\version "2.19.21"
\header {
texidoc = "Manual beams do not collide with notes."
}
indent = #0.0
}
-\relative c' \new Staff {
+\relative \new Staff {
<<
\new Voice {
\voiceOne
- \repeat unfold 4 { c8[ c] }
+ \repeat unfold 4 { c'8[ c] }
}
- \new Voice \relative c'' {
+ \new Voice \relative {
\voiceThree
\autoBeamOff
- b r a r
+ b' r a r
g r f r
}
>>
\voiceOne
\repeat unfold 4 { c16[ c] }
}
- \new Voice \relative c'' {
+ \new Voice \relative {
\voiceThree
\autoBeamOff
- b r a r
+ b' r a r
g r f r
}
>>
\new Staff
{
% Stockhausen (without hemiolas)
- \relative c''' {
+ \relative {
\stemUp
- a8[ \clef bass es,,,,
+ a''8[ \clef bass es,,,,
r8 <b' g'>
\clef G
gis''']
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Beams do not collide with flags.
"
}
-\relative c' <<
- { \voiceOne c'8 r } \\
+\relative <<
+ { \voiceOne c''8 r } \\
{ \voiceThree c,8.[ c'16] }
>>
<<
\relative { e''16[ f] }
\\
- \relative c''' { \autoBeamOff g b }
+ \relative { \autoBeamOff g'' b }
>>
c16 b c e g <e b'> |
}
-rachmaninovBeams = \relative c' \new Voice {
+rachmaninovBeams = \relative \new Voice {
\voiceOne
\time 4/4
\key c \minor
- <c' e c'>8[ <g c g'> <c f> <ees, ees'>] ~
+ <c'' e c'>8[ <g c g'> <c f> <ees, ees'>] ~
<ees ees'>8[ <c c'> <des des'> <d d'>]
}
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Cross staff (kneed) beams do not cause extreme slopes."
}
\context PianoStaff <<
\new Staff = "up"
- \relative c'' <<
+ \relative <<
{
\stemDown
- f16( d b \change Staff = down \stemUp
+ f''16( d b \change Staff = down \stemUp
\clef treble g ~ < g e>8)
e[ \change Staff = up
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Beamed stems have standard lengths if possible. Quantization
is switched off in this example."
}
-\relative c' {
+\relative {
\override Beam.skip-quanting = ##t
- f4 f8[ f] f16[ f] f32[ f] f64[ f] f128[ f]
+ f'4 f8[ f] f16[ f] f32[ f] f64[ f] f128[ f]
}
-\version "2.17.11"
+\version "2.19.21"
\header{
texidoc="
Beams should behave reasonably well, even under extreme circumstances.
ragged-right = ##t
}
-extreme = \relative c'' {
+extreme = \relative {
\stemNeutral
- g8[ c c,]
+ g'8[ c c,]
c16[ c'' a f]
\stemUp
c,,32[ c'' a f]
-\version "2.17.30"
+\version "2.19.21"
\header {
texidoc="In feathered beams, stems in knees reach up to the feathered part correctly.
\layout { ragged-right = ##t}
-\relative c' {
+\relative {
\override Beam.grow-direction = #-1
% \hide Beam
\override Stem.direction = #UP
- c32[
+ c'32[
\override Stem.direction = #DOWN
c''32 c32
}
-\version "2.17.11"
+\version "2.19.21"
\paper {
ragged-right = ##t
% a linear decrease instead?
%
-\featherDurations #(ly:make-moment 3/4) \relative c'' {
+\featherDurations #(ly:make-moment 3/4) \relative {
\override Beam.grow-direction = #LEFT
- c16[
+ c''16[
c c c
c c c c ]
}
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "In French style beaming, the stems do not go between beams."
\layout { ragged-right= ##t }
-\relative c'
+\relative
{
\override Stem.french-beaming = ##t
- c16[ c c c]
+ c'16[ c c c]
c8[ c16 e16 f16 g16 g8]
}
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc=" Funky kneed beams with beamlets also work. The beamlets
\layout { ragged-right = ##t}
-\relative c' {
+\relative {
\once \override Stem.direction = #UP
- c16
+ c'16
\once \override Stem.direction = #DOWN
c''8 c,,16
\layout { ragged-right = ##t}
-\relative c'
+\relative
{
\override Beam.auto-knee-gap = #7
\set subdivideBeams = ##t
\time 8/8
- c,16[ g'''16
+ c16[ g'''16
c,,,16 g'''16
c,,,16 g'''16
c,,,16 g'''16 ]
\layout {
ragged-right = ##t
}
-\version "2.17.6"
+\version "2.19.21"
-\relative c'' {
+\relative {
\override Stem.max-beam-connect = #1
- c16[ c16]
+ c''16[ c16]
}
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "
"
}
-\relative c'' {
+\relative {
\tuplet 3/2 {
- c8. c16 c8
+ c''8. c16 c8
}
\tuplet 3/2 {
c8 c16 c8.
-\version "2.17.6"
+\version "2.19.21"
\header {
ragged-right = ##T
}
-\relative c'' {
+\relative {
\override Score.SpacingSpanner.shortest-duration-space = #3.0
- c4-\bendAfter #+5
+ c''4-\bendAfter #+5
c4-\bendAfter #+4
c4-\bendAfter #+3
c4-\bendAfter #+2
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Breathing signs are positioned correctly on custom staves
which use @code{line-positions}."
}
-\relative c' {
+\relative {
\override Staff.StaffSymbol.line-positions = #'(-7 -5 -3 -1)
b2 \breathe b
\override BreathingSign.direction = #DOWN
-\version "2.18.0"
+\version "2.19.21"
\header {
texidoc = "Chord change detection in repeat alternatives
\chordmode { \repeat volta 3 { g1 | }
\alternative { {c |} {c4 g c c |} {g2 c |} } } }
\new Voice {
- \relative c'' {
- \repeat volta 3 { g4 f e d | }
+ \relative {
+ \repeat volta 3 { g'4 f e d | }
\alternative { {c r r r |} {c g c r |} {b g c2 |} } }
\bar "|." }
>>
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "
s2
}
-left = \relative c' {
+left = \relative {
% This tremolo contains just two notes (but three lilypond events/commands!)
- \repeat tremolo 4 { f,16 \change Staff = "right" f'}
+ \repeat tremolo 4 { f16 \change Staff = "right" f'}
}
\score {
}
-\version "2.16.0"
+\version "2.19.21"
\paper{
ragged-right = ##t
}
-\relative c {
+\relative {
\stemDown
\repeat tremolo 16 { d32 a'32 }
}
-\version "2.18.0"
+\version "2.19.22"
\header {
#(set-global-staff-size 35)
clefVariations =
-#(define-music-function (parser location type)(string?)
+#(define-music-function (type)(string?)
#{
\once \omit Staff.Clef s4
\override Staff.Clef.full-size-change = ##t
-\version "2.17.18"
+\version "2.19.21"
\header {
\layout { ragged-right = ##t }
-\relative c' {
+\relative {
\override Staff.ClefModifier.break-visibility = #all-invisible
\clef "treble_8"
- c2 c |
+ c'2 c |
c c | \break
c \clef "tenor" c |
\revert Staff.ClefModifier.break-visibility
}
-\version "2.16.0"
+\version "2.19.21"
#(ly:set-option 'clip-systems)
#(define output-suffix "1")
origScore = \score{
- \relative c' {
+ \relative {
\set Staff.instrumentName = #"bla"
- c1
+ c'1
d
\grace c16
e1
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "If dotted note heads must remain on the left side,
\layout { ragged-right = ##t }
-\relative c {
+\relative {
\clef bass
\override Staff.NoteCollision.prefer-dotted-right = ##t
- << <b g' >4 ^"prefer-dotted-right = #t" \\ { c8. d16 } >>
+ << <b, g' >4 ^"prefer-dotted-right = #t" \\ { c8. d16 } >>
<< <b g' >4 \\ { d8. d16 } >>
<< <b g' >4 \\ { f'8. d16 } >>
<< <c a' >4 \\ { g'8. d16 } >>
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc =
\layout { ragged-right= ##t }
-\context Staff \relative c'' <<
+\context Staff \relative <<
{
\override Staff.NoteCollision.merge-differently-headed = ##t
- c2 c8 c4.
+ c''2 c8 c4.
c2
}\\
{
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Mixed collisions with whole and longer notes
}
\layout{ragged-right=##t}
-\relative c'' {
+\relative {
\override Score.NoteHead.style = #'altdefault
<<
- { c1 c2*2 c1 c4*4 c1 c\breve*1/2 c\breve*1/2 b\breve*1/2 }
+ { c''1 c2*2 c1 c4*4 c1 c\breve*1/2 c\breve*1/2 b\breve*1/2 }
\\
{ c2*2 c1 c4*4 c1 c\breve*1/2 c1 b\breve*1/2 c\breve*1/2 }
>>
-\version "2.17.6"
+\version "2.19.21"
\header{
texidoc = "Each grob can have a color assigned to it.
\paper { ragged-right = ##t }
-\relative c' {
+\relative {
\override Accidental.color = #darkgreen
\override Beam.color = #cyan
\override NoteHead.color = #darkyellow
- c4
+ c'4
\override NoteHead.color = #red
f
\override NoteHead.color = #darkmagenta
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "
}
}
-\context Staff \relative f {
+\context Staff \relative {
\time 9/8
\set completionUnit = #(ly:make-moment 3/8)
g'1.. r2
-\version "2.19.16"
+\version "2.19.21"
\header {
texidoc = "Simple-fraction components of a compound time signature are numeric regardless of the time signature style.
"
}
-\relative b' {
- \compoundMeter #'(2 2) b1
+\relative {
+ \compoundMeter #'(2 2) b'1
\compoundMeter #'(4 4) b1
\compoundMeter #'((1 1) (2 2)) b\breve
\compoundMeter #'((2 2) (4 4)) b\breve
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Create compound time signatures. The argument is a Scheme list
-\relative c' {
+\relative {
\override Staff.TimeSignature.break-visibility = ##(#f #t #t)
\compoundMeter #'(1 2 3 4 8)
- \repeat unfold 10 c8 \repeat unfold 20 c16 \break
+ \repeat unfold 10 c'8 \repeat unfold 20 c16 \break
\time 3/4
\repeat unfold 6 c8 \repeat unfold 12 c16 \break
\version "2.19.21"
-instrument = \relative c' {
- \repeat unfold 40 { c8 }
+instrument = \relative {
+ \repeat unfold 40 { c'8 }
}
\addQuote "instrQuote" \instrument
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Clefs for cue notes at the start of a score should print the
standard clef plus a small cue clef after the time/@/key signature."
}
-vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
+vI = \relative { \clef "treble" \repeat unfold 40 g'4 }
\addQuote vIQuote { \vI }
Solo = \relative c'' {
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Clefs for cue notes should not influence the printed key signature."
}
-vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
+vI = \relative { \clef "treble" \repeat unfold 40 g'4 }
\addQuote vIQuote { \vI }
\score {
\new Staff {
line plus an additional cue clef after the time/@/key signature."
}
-vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
+vI = \relative { \clef "treble" \repeat unfold 40 g'4 }
\addQuote vIQuote { \vI }
Solo = \relative {
by using parentheses or brackets around the transposition number."
}
-vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
+vI = \relative { \clef "treble" \repeat unfold 40 g'4 }
\addQuote vIQuote { \vI }
Solo = \relative {
texidoc = "Transposition for clefs for cue notes."
}
-vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
+vI = \relative { \clef "treble" \repeat unfold 40 g'4 }
\addQuote vIQuote { \vI }
Solo = \relative {
notes and a canceling clef after the cue notes."
}
-vI = \relative c'' { \clef "treble" \repeat unfold 16 g4 }
+vI = \relative { \clef "treble" \repeat unfold 16 g'4 }
\addQuote vIQuote { \vI }
Solo = \relative {
-\version "2.19.21"
+\version "2.19.22"
\header{
\layout { ragged-right = ##t }
dynScript =
-#(define-event-function (parser location text) (markup?)
+#(define-event-function (text) (markup?)
(make-dynamic-script text))
\relative {
-\version "2.19.21"
+\version "2.19.22"
#(use-modules (srfi srfi-13)
(ice-9 format))
(make-column-markup (string-split str #\NewLine)))
test =
-#(define-void-function (parser location harmless strings)
+#(define-void-function (harmless strings)
((string?) pair?)
(let ((input (car strings))
(output (cdr strings))
(if harmless
(ly:progress "Test unequal: ~a.\nin = ~a\nout = ~a\n"
harmless input output)
- (ly:input-warning location "Test unequal: BUG.\nin = ~a\nout = ~a\n"
+ (ly:input-warning (*location*) "Test unequal: BUG.\nin = ~a\nout = ~a\n"
input output)))))
%%%
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Dots move to the right when a collision with the (up)flag happens."
}
\layout { ragged-right = ##t}
-\relative c''
+\relative
{
\time 8/4
\set Staff.autoBeaming = ##f
- a,16.
+ a16.
g''16.
a,4. a8 a8. a16. c,16. g16.
}
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "For volte, the style of double repeats can be set
using @code{doubleRepeatType}."
}
-\relative c' {
+\relative {
\repeat volta 1 {
- c1
+ c'1
}
\mark "default"
\repeat volta 1 {
\bar ":|.:"
c1
}
- \new Staff \relative c' {
- \repeat unfold 4 { c1 }
+ \new Staff \relative {
+ \repeat unfold 4 { c'1 }
}
>>
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Setting the style of a @code{DynamicTextSpanner} to @code{'none}
"
}
-\relative c'' {
+\relative {
\override DynamicTextSpanner.style = #'none
- c2\cresc g,2
+ c''2\cresc g,2
\break
g2 c'2\f
}
-\version "2.19.21"
+\version "2.19.22"
\header {
texidoc = "Postfix functions for custom crescendo text spanners. The spanners
% Two functions for (de)crescendo spanners where you can explicitly give the
% spanner text.
-mycresc = #(define-music-function (parser location mymarkup) (string?)
+mycresc = #(define-music-function (mymarkup) (string?)
(make-music 'CrescendoEvent 'span-direction START
'span-type 'text 'span-text mymarkup))
-mydecresc = #(define-music-function (parser location mymarkup) (string?)
+mydecresc = #(define-music-function (mymarkup) (string?)
(make-music 'DecrescendoEvent 'span-direction START
'span-type 'text 'span-text mymarkup))
-\version "2.17.6"
+\version "2.19.22"
\header {
texidoc = "Music events can be extracted from a score with event
st =
#(define-music-function
- (parser location text)
+ (text)
(string?)
#{
\override TextSpanner.bound-details.left.text = $text
#CENTER
\override TextSpanner.bound-details.right.text =
\markup { \draw-line #'(0 . -1) }
-\relative c' {
+\relative {
\key d \major
\tempo 4 = 96
-\version "2.19.12"
+\version "2.19.21"
\header {
texidoc = "LilyPond creates hairpins found in Ferneyhough scores.
"
}
-\relative c'' {
+\relative {
\override Hairpin.stencil = #flared-hairpin
- a4\< a a a\f
+ a'4\< a a a\f
a4\p\< a a a\ff
a4\sfz\< a a a\!
\override Hairpin.stencil = #constante-hairpin
-\version "2.16.0"
+\version "2.19.22"
\header {
texidoc = "Figured bass supports numbers with slashes through
#(define (adjust-slash-stencil-default num forward stencil mag)
stencil)
-unsetExceptions = #(define-void-function (parser location) ()
+unsetExceptions = #(define-void-function () ()
; (set! horizontal-slash-interval horizontal-slash-interval-default)
; (set! adjust-slash-stencil adjust-slash-stencil-default)
)
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Scripts right of a chord avoid dots."
}
-\relative c' {
+\relative {
\set fingeringOrientations = #'(right)
- <c-\rightHandFinger #1 >4.. <d-3 f>4. r8.
+ <c'-\rightHandFinger #1 >4.. <d-3 f>4. r8.
}
-\version "2.17.16"
+\version "2.19.21"
\header {
texidoc = "Horizontally-offset @code{Fingerings} align along the Y axis when
"
}
-\relative f'' {
+\relative {
\set fingeringOrientations = #'(left)
- <cis-1 a-1 e-1>4
+ <cis''-1 a-1 e-1>4
<ceses-1 a-1 e-1>4
}
-\version "2.17.10"
+\version "2.19.21"
\header {
texidoc = "Horizontal @code{Fingering} grobs that collide do not intersect.
"
}
-\relative c'' {
+\relative {
\set fingeringOrientations = #'(left)
\override Fingering.staff-padding = #'()
\override Fingering.add-stem-support = ##f
- <d-0 c-3 f,-0>4 <d-0 f,-3 e-0>
+ <d''-0 c-3 f,-0>4 <d-0 f,-3 e-0>
<d^0 c^3 f,-0> <d^0 f,-0> <c^3 f,-0>
<d-0 c-0 b-0 a-0 g-0 f-0>
}
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Fingering directions in directed and undirected contexts."
\layout { ragged-right= ##t }
{
- \relative c''
+ \relative
\new Voice {
\tempo "\\voiceTwo"
\voiceTwo
- c2^5 <c^5>
+ c''2^5 <c^5>
c_5 <c_5>
c-5 <c-5>
\tempo "\\oneVoice"
-\version "2.17.6"
+\version "2.19.22"
\header {
texidoc = "Flags can be drawn straight in the style used by
}
-stemLength = #(define-music-function (parser location length) (number?)
+stemLength = #(define-music-function (length) (number?)
"Set the length of the next stem explicitly."
#{
\once \override Stem.length-fraction = #length
texidoc = "When broken, glissandi can span multiple lines."
}
-\version "2.17.6"
+\version "2.19.21"
\paper {
ragged-right = ##t
}
-\relative c'' {
+\relative {
\override Glissando.breakable = ##t
\override Glissando.after-line-breaking = ##t
- d1\glissando
+ d''1\glissando
\break s1
\break s1
\break s1
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Broken glissandi anticipate the pitch on the next line."
}
\score {
- \relative c' {
+ \relative {
\override Glissando.after-line-breaking = ##t
\override Glissando.breakable = ##t
- c1\glissando
+ c'1\glissando
\break
c'1
\break
}
\score {
- \relative c' {
+ \relative {
\override Glissando.after-line-breaking = ##t
\override Glissando.breakable = ##t
- c1\glissando
+ c'1\glissando
\break
c'1
\break
texidoc = "If broken, Glissandi anticipate on the pitch of the next line."
}
-\version "2.17.6"
+\version "2.19.21"
\paper {
ragged-right = ##T }
-\relative c'' {
+\relative {
\override Glissando.breakable = ##t
- d1 \glissando |
+ d''1 \glissando |
\break
c,1
}
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Individual glissandi within a chord can be tweaked."
}
-\relative c' {
+\relative {
\once \override Voice.Glissando.style =
#(lambda (grob)
(if (= 1 (ly:grob-property grob 'glissando-index)) 'zigzag 'default))
- <d f a>1 \glissando s1 <f a c>
+ <d' f a>1 \glissando s1 <f a c>
}
finishing the grace section."
}
-\version "2.16.0"
+\version "2.19.21"
-\relative c''' {
+\relative {
\voiceOne
- c4
+ c'''4
\grace d8 c4
}
-\version "2.17.5"
+\version "2.19.21"
\header {
\layout { ragged-right= ##t }
-\relative c' {
+\relative {
\repeat volta 2 {
- c1
+ c'1
}
\repeat volta 2 {
\grace {c8 } c4
-\version "2.17.6"
+\version "2.19.21"
\header {
\layout { ragged-right = ##t }
-\relative c'' {
+\relative {
\override Hairpin.circled-tip = ##t
- c1\< d\! d\> c\!
+ c''1\< d\! d\> c\!
\override Hairpin.to-barline = ##f
e\> c\< d\! \break
c\< \break
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc ="Hairpin crescendi may be dashed. "
}
-\relative c' {
+\relative {
\override Hairpin.style = #'dashed-line
- f2\< g c1 d4\> b a gis\! }
+ f'2\< g c1 d4\> b a gis\! }
-\version "2.17.6"
+\version "2.19.21"
\header {
\layout { ragged-right = ##t }
-\relative c'' {
+\relative {
\override Score.PaperColumn.keep-inside-line = ##f
- c4 \> c4 c4\! c4_\ff \> c4 c4\!\p
+ c''4 \> c4 c4\! c4_\ff \> c4 c4\!\p
<<
{ c\< c\! }
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Bound padding for hairpins also applies before following
"
}
-\relative c' {
+\relative {
\override Hairpin.to-barline = ##f
- c2\>
+ c'2\>
\dimTextDim
c2\>
\dimHairpin
>>
\new GrandStaff <<
\new Staff \relative { a'^\< a a a a a a a a a a a\! }
- \new Staff \relative c'' { \repeat unfold 12 a4 }
+ \new Staff \relative { \repeat unfold 12 a'4 }
>>
\new GrandStaff <<
\new Staff \relative { a'4 a a a s1 a4 a a a }
}
-\version "2.17.6"
+\version "2.19.21"
-\relative c'' {
+\relative {
\override Hairpin.bound-padding = #1.0
- c4\< c2. c4\!
+ c''4\< c2. c4\!
}
-\version "2.17.6"
+\version "2.19.21"
#(ly:set-option 'warning-as-error #f)
#(ly:expect-warning (_ "Harp pedal diagram contains dividers at positions ~a. Normally, there is only one divider after the third pedal.") '(1 3 5))
a warning is printed out, but they should still look okay."
}
-\relative c'' {
+\relative {
\override Score.PaperColumn.keep-inside-line = ##f
% Sanity checks: #pedals != 7:
- c1^\markup \harp-pedal #"^-v|--"
+ c''1^\markup \harp-pedal #"^-v|--"
% Sanity checks: no divider, multiple dividers, divider on wrong position:
c1^\markup \harp-pedal #"^-v--v^"
c1^\markup \harp-pedal #"^|-v|--|v^"
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Harp pedals can be tweaked through the size, thickness and
harp-pedal-details properties of TextScript."
}
-\relative c'' {
+\relative {
\override Score.PaperColumn.keep-inside-line = ##f
\override Voice.TextScript.harp-pedal-details.box-width = #1
\once \override Voice.TextScript.size = #1.5
\once \override Voice.TextScript.thickness = #7
- c1^\markup \harp-pedal #"o^ovo-|vovo-o^"
+ c''1^\markup \harp-pedal #"o^ovo-|vovo-o^"
c1^\markup \override #'(harp-pedal-details . (
(box-width . 0.6)
(box-height . 0.3)
}
-\version "2.19.21"
+\version "2.19.22"
myDisplayMusic =
-#(define-void-function (parser location music)
+#(define-void-function (music)
(ly:music?)
(display-scheme-music music (current-error-port)))
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "
indent = 0\cm
}
-\relative c' {
+\relative {
\set Staff.shortInstrumentName = "foo"
- f1 | f1 | f1 |
+ f'1 | f1 | f1 |
f1\< | f1 | f1\! |
}
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Instrument names are also printed on partial starting measures."
}
-\relative c'' { \set Staff.instrumentName = "foo" \partial 4 c4 c1 }
+\relative { \set Staff.instrumentName = "foo" \partial 4 c''4 c1 }
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Moving the @code{Volta_engraver} to the @code{Staff}
context does not affect @code{InstrumentName} alignment."
}
-testMusik = \relative c'' {
+testMusik = \relative {
\repeat volta 2 {
- c1 \break
+ c''1 \break
} \alternative {
{ c1 \break }
{ c1 \break }
}
\score {
- \new Staff \relative c' {
+ \new Staff \relative {
\set Staff.shortInstrumentName = #"Instr."
\repeat volta 2 {
- c1 \break
+ c'1 \break
}
\alternative {
{ c1 \break }
-\version "2.19.7"
+\version "2.19.21"
\header {
texidoc = "When a custom key signature has entries which are
"
}
-\relative c' {
+\relative {
\set Staff.keyAlterations = #`(((0 . 3) . ,SHARP)
((0 . 5) . ,FLAT)
((0 . 6) . ,FLAT))
- fis fis as bes
+ fis' fis as bes
fis' as, as bes
}
-\version "2.19.7"
+\version "2.19.21"
\header { texidoc = "By setting @code{Staff.keyAlterations} directly,
key signatures can be set invidually per pitch.
\layout {
ragged-right = ##T
}
-\relative c'
+\relative
\new Staff {
\set Staff.keyAlterations = #`(((0 . 3) . ,FLAT) ((1 . 2) . ,SHARP))
- f8 a c e
+ f'8 a c e
\set Staff.keyAlterations = #`(((0 . 4) . ,DOUBLE-SHARP) ((1 . 2) . ,FLAT))
e a, g a
}
-\version "2.19.7"
+\version "2.19.21"
\header{
texidoc="
Key signatures may appear on key changes, even without a barline.
ragged-right = ##T
}
-\relative c'
+\relative
{
\set Staff.createKeyOnClefChange = ##t
- \key bes \major c2
+ \key bes \major c'2
% \key c \major % \minor
\key es \major % \minor
c2
}
-\version "2.17.6"
+\version "2.19.22"
\layout { ragged-right = ##t }
-withPaddingA = #(define-music-function (parser location padding music) (number? ly:music?)
+withPaddingA = #(define-music-function (padding music) (number? ly:music?)
#{ \override TextScript.padding = #padding
$music
\revert TextScript.padding #})
-withPaddingB = #(define-music-function (parser location padding music) (number? ly:music?)
+withPaddingB = #(define-music-function (padding music) (number? ly:music?)
#{ \override TextScript.padding = #(* padding 2)
$music
\revert TextScript.padding #})
-withPaddingC = #(define-music-function (parser location padding music) (number? ly:music?)
+withPaddingC = #(define-music-function (padding music) (number? ly:music?)
#{ \override TextScript.padding = #(+ 1 (* padding 2))
$music
\revert TextScript.padding #})
texidoc = "Arrows can be applied to text-spanners and line-spanners (such as the Glissando)"
}
-\version "2.17.6"
+\version "2.19.21"
\paper {
ragged-right = ##t
}
-\relative c'' {
+\relative {
\override TextSpanner.bound-padding = #1.0
\override TextSpanner.style = #'line
\override TextSpanner.bound-details.right.arrow = ##t
\override Glissando.arrow-length = #0.5
\override Glissando.arrow-width = #0.25
- a8\startTextSpan gis8 a4 b4\glissando
+ a'8\startTextSpan gis8 a4 b4\glissando
b,4 | g' c\stopTextSpan c
}
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Cover all line styles available."
}
-\relative c'' {
+\relative {
\override Glissando.breakable = ##t
s2
- d2 \glissando d'2
+ d''2 \glissando d'2
\override Glissando.style = #'dashed-line
d,2 \glissando d'2
\override Glissando.style = #'dotted-line
-\version "2.16.0"
+\version "2.19.22"
#(ly:set-option 'warning-as-error #f)
#(ly:expect-warning (_ "Test warning\n"))
%%%% message functions of the Input class:
#(display "\nMessage functions of the Input class:\n" (current-error-port))
-messageTest = #(define-music-function (parser location) ()
- (ly:input-message location "Test ly:input-message" )
+messageTest = #(define-music-function () ()
+ (ly:input-message (*location*) "Test ly:input-message" )
(make-music 'Music))
{
-\version "2.19.2"
+\version "2.19.21"
\header {
texidoc = "With the @code{\\lyricsto} mechanism, individual lyric
lines can be associated with one melody line. Each lyric line
<<
- \new Voice = "bla" \relative c'' {
+ \new Voice = "bla" \relative {
\autoBeamOff
- c2( d4) e8[ c b c] f4
+ c''2( d4) e8[ c b c] f4
}
\new Lyrics \lyricsto "bla" { bla ab blob blob }
\new Lyrics \lyricsto "bla" {
}
-\version "2.17.15"
+\version "2.19.21"
<<
- \relative c' \new Voice = "lahlah" {
+ \relative \new Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
<<
\new Voice = "alternative" {
\voiceOne
-m = \relative c'' {
+m = \relative {
\autoBeamOff
- g8( a) r8 \tuplet 3/2 { g'8( f e) } r8 \grace { d16[ c b] } e4
+ g'8( a) r8 \tuplet 3/2 { g'8( f e) } r8 \grace { d16[ c b] } e4
\textLengthOff
d8.^"melisma" \melisma c16
\melismaEnd
-\version "2.19.2"
+\version "2.19.21"
\header {
<<
-\new Staff \relative c' {
+\new Staff \relative {
\new Voice = "upper" {
\voiceTwo
g'1( |
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Melismata may be entered manually by substituting
@code{_} for lyrics on notes that are part of the melisma."
}
-\relative c' {
+\relative {
\set melismaBusyProperties = #'()
- c4 d( e) f
+ c'4 d( e) f
f4( e) e e
}
\addlyrics {
-\version "2.19.2"
+\version "2.19.21"
\header {
texidoc = "
<<
- \relative c' \new Voice = "bla" {
+ \relative \new Voice = "bla" {
\autoBeamOff
- c4( c16 d c b) c4
+ c'4( c16 d c b) c4
d16[ e f g]
}
-\version "2.16.0"
+\version "2.19.21"
\header {
title = "Aligned-above lyrics should stay close to their staff"
\paper { ragged-last-bottom = ##f }
-tune = \relative c { \repeat unfold 2 { c4( e) g2 | \break c1 }
+tune = \relative { \repeat unfold 2 { c4( e) g2 | \break c1 }
\bar "|." }
\score {
-\version "2.19.2"
+\version "2.19.21"
\header
{
texidoc = "Melismata are triggered by manual beams. Notes in a
<<
\new Staff
- \relative c'' {
+ \relative {
\set Staff.autoBeaming = ##f
- g4 d8[ b8 d8 g8] g4
+ g'4 d8[ b8 d8 g8] g4
}
\new Lyrics \lyricsto "" { bla blaa -- bla }
>>
-\version "2.19.11"
+\version "2.19.22"
\header {
texidoc = "Bar line thickness and spacing should be scaled along
}
example =
-#(define-music-function (parser location mag) (positive?)
+#(define-music-function (mag) (positive?)
#{
\new Staff \with {
\magnifyStaff #mag
-\version "2.19.11"
+\version "2.19.22"
\header {
texidoc = "@code{space-alist} values should be scaled along
}
example =
-#(define-music-function (parser location mag) (positive?)
+#(define-music-function (mag) (positive?)
#{
\new Staff \with {
\magnifyStaff #mag
-\version "2.18.0"
+\version "2.19.22"
\header {
texidoc = "@code{make-relative} has to copy its argument expressions
}
reltranspose =
-#(define-music-function (parser location from to music)
+#(define-music-function (from to music)
(ly:pitch? ly:pitch? ly:music?)
(make-relative (music) music
#{ \transpose #from #to $music #}))
-\version "2.19.0"
+\version "2.19.22"
\header {
texidoc = "@code{make-relative} can make relativization on music
}
withOctave =
-#(define-music-function (parser location music)
+#(define-music-function (music)
(ly:music?)
(make-relative
(music) music
-\version "2.19.20"
+\version "2.19.22"
\header {
texidoc = "@code{make-relative} is a Scheme utility macro mainly
\layout { ragged-right= ##t }
ph =
-#(define-music-function (parser location p1 p2 p3 p4 p5)
+#(define-music-function (p1 p2 p3 p4 p5)
(ly:pitch? ly:pitch? ly:pitch? ly:pitch? ly:pitch?)
(make-relative (p1 p2 p3 p4 p5) (make-event-chord (list p1 p2 p3 p4 p5))
#{
-\version "2.17.10"
+\version "2.19.22"
\header {
texidoc = "The markup-commands @code{\\draw-dashed-line} and
}
test =
-#(define-scheme-function (parser location x-nmbr y-nmbr)(number? number?)
+#(define-scheme-function (x-nmbr y-nmbr)(number? number?)
(let* ((lst (map
(lambda (x)
(let* ((x-lngth (if (positive? x-nmbr)
-\version "2.17.9"
+\version "2.19.22"
\header {
texidoc = "@code{\\rest-by-number} and @code{\\rest} support
}
showRestStyles =
-#(define-scheme-function (parser location)()
+#(define-scheme-function ()()
(make-override-markup
(cons 'baseline-skip 7)
(make-column-markup
-\version "2.17.19"
+\version "2.19.22"
\header {
texidoc = "The rest markup function works for a variety of style, dot and
}
showSimpleRest =
-#(define-scheme-function (parser location dots) (string?)
+#(define-scheme-function (dots) (string?)
(make-override-markup
(cons 'baseline-skip 7)
(make-column-markup
kievan)))))
showMultiMeasureRests =
-#(define-scheme-function (parser location)()
+#(define-scheme-function ()()
(make-override-markup
(cons 'baseline-skip 7)
(make-column-markup
texidoc = "Use \\score block as markup command."
}
-\version "2.17.11"
+\version "2.19.21"
tuning = \markup {
\score {
subsubtitle = \markup { "Originalstimmung:" \tuning }
}
-\relative c'' {
+\relative {
\time 4/8
- \tuplet 3/2 { c8 d e } \tuplet 3/2 {c d e}
+ \tuplet 3/2 { c''8 d e } \tuplet 3/2 {c d e}
\tuplet 3/2 { c8 d e } \tuplet 3/2 {c d e}
g8 a8 g8 a
g8 a8 g8 a
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Metronome marks respect symbol order in
ragged-right = ##t
}
-\relative c' {
+\relative {
\override Staff.KeySignature.break-align-anchor-alignment = #LEFT
\override Score.MetronomeMark.break-align-symbols = #'(time-signature key-signature)
\key c \minor
\tempo "Time"
- c1
+ c'1
\key as \major
\tempo "Key"
c1
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "@code{\\tempo} marks are aligned with the time signature
line-width = 50\mm
}
-\relative c' {
+\relative {
\tempo "T-first"
- c1
+ c'1
\mark \default
\tempo "T-note"
c1 \break
-\version "2.16.0"
+\version "2.19.21"
\header{
texidoc="
"
}
-\relative c'' {
+\relative {
\tempo 4=60
- c1
+ c''1
\tempo "" 4=80
c1
}
-\version "2.16.0"
+\version "2.19.21"
\header{
texidoc="
"
}
-\relative c'' {
- \tempo "Allegro" c1
+\relative {
+ \tempo "Allegro" c''1
\tempo "Allegro" c1
$(make-event-chord (list (make-music 'TempoChangeEvent
'text "blah")))
}
-\version "2.16.0"
+\version "2.19.21"
\score {
- \relative c' {
+ \relative {
\set midiMinimumVolume = #0.0
\set midiMaximumVolume = #1.0
- c\ff c\pppp
+ c'\ff c\pppp
c\ff\> c c c c\!\pppp
c\< c c c c\! \ff
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "@cindex Midi Volume Equaliser
The full orchestra plays a note, where groups stop one after
%}
-flauti = \relative c' {
+flauti = \relative {
\set Staff.midiInstrument = #"flute"
- c1\f R1*10
+ c'1\f R1*10
}
-oboi = \relative c' {
+oboi = \relative {
\set Staff.midiInstrument = #"oboe"
- R1*1 c1\f R1*9
+ R1*1 c'1\f R1*9
}
-clarinetti = \relative c' {
+clarinetti = \relative {
\set Staff.midiInstrument = #"clarinet"
- R1*2 c1\f R1*8
+ R1*2 c'1\f R1*8
}
-fagotti = \relative c' {
+fagotti = \relative {
\set Staff.midiInstrument = #"bassoon"
\clef bass
- R1*3 c1\f R1*7
+ R1*3 c'1\f R1*7
}
-corni = \relative c' {
+corni = \relative {
\set Staff.midiInstrument = #"french horn"
- R1*4 c1\f R1*6
+ R1*4 c'1\f R1*6
}
-trombe = \relative c' {
+trombe = \relative {
\set Staff.midiInstrument = #"trumpet"
\clef bass
- R1*5 c1\f R1*5
+ R1*5 c'1\f R1*5
}
-timpani = \relative c' {
+timpani = \relative {
\set Staff.midiInstrument = #"timpani"
- R1*6 c1\f R1*4
+ R1*6 c'1\f R1*4
}
-violinoI = \relative c' {
+violinoI = \relative {
\set Staff.midiInstrument = #"violin"
- R1*7 c1\f R1*3
+ R1*7 c'1\f R1*3
}
-violinoII = \relative c' {
+violinoII = \relative {
\set Staff.midiInstrument = #"violin"
- R1*8 c1\f R1*2
+ R1*8 c'1\f R1*2
}
-viola = \relative c' {
+viola = \relative {
\set Staff.midiInstrument = #"viola"
\clef alto
- R1*9 c1\f R1*1
+ R1*9 c'1\f R1*1
}
-violoncello = \relative c' {
+violoncello = \relative {
\set Staff.midiInstrument = #"cello"
%\set Staff.midiInstrument = #"contrabass"
\clef bass
- R1*10 c1\f
+ R1*10 c'1\f
}
% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out/initial-key.midi
-\version "2.16.0"
+\version "2.19.21"
\layout {
\context {
>>
-trackBchannelA = \relative c {
+trackBchannelA = \relative {
\set Staff.instrumentName = "trackB:voiceA"
d'4 e f g
% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/option-key.midi
-\version "2.16.0"
+\version "2.19.21"
\layout {
\context {
>>
-trackBchannelA = \relative c {
+trackBchannelA = \relative {
\set Staff.instrumentName = "trackB:voiceA"
f'4 g a bes
% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/rest.midi
-\version "2.16.0"
+\version "2.19.21"
\layout {
\context {
>>
-trackBchannelA = \relative c {
+trackBchannelA = \relative {
r4
\set Staff.instrumentName = "trackB:voiceA"
- a r4 a
+ a, r4 a
| % 2
}
<<
\context Staff = "treble" <<
\set Score.midiChannelMapping = #'instrument
- \context Voice="one" \relative c'' {
+ \context Voice="one" \relative {
\time 4/4
\key c \minor
\voiceOne
%comes
%7
- f8 es16 d c16 bes ! as g f8 as' g f
+ f''8 es16 d c16 bes ! as g f8 as' g f
%8 es8 d es f b, c d b |
f,16 g as4 g16 f e2 |
}
- \context Voice="two" \relative c'' {
+ \context Voice="two" \relative {
\voiceTwo
%dux
%7
- c4 r4 r8 f es d |
+ c''4 r4 r8 f es d |
%8 r8 as g f g f16 es f8 d |
<b, d>8 r <b d> r <g c>2 |
}
<<
\context Staff = "treble" <<
\set Score.midiChannelMapping = #'voice
- \context Voice="one" \relative c'' {
+ \context Voice="one" \relative {
\time 4/4
\key c \minor
\voiceOne
%comes
%7
- f8 es16 d c16 bes ! as g f8 as' g f
+ f''8 es16 d c16 bes ! as g f8 as' g f
%8 es8 d es f b, c d b |
f,16 g as4 g16 f e2 |
}
- \context Voice="two" \relative c'' {
+ \context Voice="two" \relative {
\voiceTwo
%dux
%7
- c4 r4 r8 f es d |
+ c''4 r4 r8 f es d |
%8 r8 as g f g f16 es f8 d |
<b, d>8 r <b d> r <g c>2 |
}
% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-2.midi
-\version "2.16.0"
+\version "2.19.21"
\layout {
\context {
>>
-trackBchannelA = \relative c {
+trackBchannelA = \relative {
\voiceOne
\set Staff.instrumentName = ":1"
}
-trackBchannelB = \relative c {
+trackBchannelB = \relative {
\voiceTwo
f' f f f
| % 2
% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-4.midi
-\version "2.16.0"
+\version "2.19.21"
\layout {
\context {
>>
-trackBchannelA = \relative c {
+trackBchannelA = \relative {
\voiceOne
\set Staff.instrumentName = ":1"
}
-trackBchannelB = \relative c {
+trackBchannelB = \relative {
\voiceThree
c''4. d8 e4 f
| % 2
}
-trackBchannelC = \relative c {
+trackBchannelC = \relative {
\voiceFour
d'1
| % 2
}
-trackBchannelD = \relative c {
+trackBchannelD = \relative {
\voiceTwo
c'4 c2 c4
| % 2
>>
-trackBchannelA = \relative c {
+trackBchannelA = \relative {
\voiceOne
\set Staff.instrumentName = ":1"
}
-trackBchannelB = \relative c {
+trackBchannelB = \relative {
\voiceThree
c''4. d8 e4 f
| % 2
}
-trackBchannelC = \relative c {
+trackBchannelC = \relative {
\voiceFour
d'1
| % 2
}
-trackBchannelD = \relative c {
+trackBchannelD = \relative {
\voiceTwo
c'4 c2 c4
| % 2
c[ c c] c[ c c]
}
-rondo = \relative c' {
+rondo = \relative {
\partial 8
\time 6/8
\key c \major
-\version "2.19.21"
+\version "2.19.22"
\header
{
}
dynScript =
-#(define-music-function (parser location text) (string?)
+#(define-music-function (text) (string?)
(make-dynamic-script text))
\relative {
-\version "2.16.0"
+\version "2.19.22"
\header {
texidoc = "Music functions accept strings as markup arguments
}
testFunc =
-#(define-music-function (parser location text music) (markup? ly:music?)
+#(define-music-function (text music) (markup? ly:music?)
;; dummy function, does nothing
music)
@code{\\bar}, but is implemented completely in Scheme."
}
-\version "2.17.5"
+\version "2.19.22"
-myBar = #(define-music-function (parser location bar-type) (string?)
+myBar = #(define-music-function (bar-type) (string?)
(context-spec-music
(context-spec-music (make-property-set 'whichBar bar-type) 'Timing)
'Score))
-\version "2.17.15"
+\version "2.19.21"
% possible rename to staff-something. -gp
\header{ texidoc = "@cindex Staff Remove
ragged-right = ##t
}
-\relative c' \new Staff \with {
+\relative \new Staff \with {
\remove "Staff_symbol_engraver"
\consists "Pitch_squash_engraver"
\remove "Clef_engraver"
} {
- c4 d4 e8 d8
+ c'4 d4 e8 d8
}
-\version "2.17.6"
+\version "2.19.22"
\header{
texidoc="
Note head shapes may be set from several choices.
}
pattern =
-#(define-music-function (parser location name style) (markup? ly:context-mod?)
+#(define-music-function (name style) (markup? ly:context-mod?)
#{ <<
s1^#name
\new Voice \with #style {
>> #})
patternStyle =
-#(define-music-function (parser location style) (symbol?)
+#(define-music-function (style) (symbol?)
#{
\pattern #(symbol->string style) \with {
\override NoteHead.style = #style
-\version "2.16.0"
+\version "2.19.22"
\header{
texidoc= "Test backup of predicate-based optional music function arguments.
\layout { ragged-right = ##t }
-test=#(define-void-function (parser location expect . rest)
+test=#(define-void-function (expect . rest)
(list? (string? "def1") (integer? "def2") (fraction? "def3") integer?)
(if (not (equal? expect rest))
- (ly:parser-error parser
+ (ly:parser-error (*parser*)
(format #f "Expected ~s, got ~s.\n" expect rest)
- location)))
+ (*location*))))
twice=2
-\version "2.16.0"
+\version "2.19.22"
\header{
texidoc= "Test predicate-based optional music function argument skipping."
\layout { ragged-right = ##t }
-test=#(define-scheme-function (parser location str int frac exp)
+test=#(define-scheme-function (str int frac exp)
((string? "def1") (integer? "def2") (number-pair? "def3") list?)
(if (not (equal? (list str int frac) exp))
- (ly:parser-error parser
+ (ly:parser-error (*parser*)
(format #f "Expected ~a, got ~a.\n" exp
(list str int frac))
- location)))
+ (*location*))))
\test "a" #3 #'(3 . 4) #'("a" 3 (3 . 4))
\test "a" #3 #'("a" 3 "def3")
-\version "2.19.21"
+\version "2.19.22"
\header{
texidoc= "Test optional music function arguments.
% Just like \relative, but defaulting to f as reference, making the
% first note of the music the same as if written as absolute pitch
ablative =
-#(define-music-function (parser location ref music)
+#(define-music-function (ref music)
((ly:pitch? #{ f #}) ly:music?)
#{ \relative $ref $music #})
% Let's take a duration and four pitches, defaulting to 2 c' d' e'
zap =
-#(define-music-function (parser location dur a b c d)
+#(define-music-function (dur a b c d)
((ly:duration? #{ 2 #}) (ly:pitch? #{ c' #})
(ly:pitch? #{ d' #}) (ly:pitch? #{ e' #})
ly:music?) #{ $a $dur $b $c ^\markup{!} $d #})
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "A sublist of grob property lists may be overridden within a callback.
of the right bound of the glissando spanner."
}
-\relative c' {
+\relative {
\override Glissando.after-line-breaking =
#(lambda (grob)
(ly:grob-set-nested-property! grob '(bound-details right Y) 3))
- c1 \glissando
+ c'1 \glissando
d1
}
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Sublist of grob property lists may be also tuned. In the
grob is tweaked."
}
-\relative c' {
+\relative {
\override Stem.details.beamed-lengths = #'(6 10 8)
- c8[ c] c16[ c] c32[ c]
+ c'8[ c] c16[ c] c32[ c]
\revert Stem.details.beamed-lengths
c8[ c] c16[ c] c32[ c]
}
-\version "2.16.0"
+\version "2.19.21"
\header {
\book {
\score {
- \new Staff \relative c' {
+ \new Staff \relative {
%% 19: ideally cramped
%% Calculating page breaks...[6][11][16]
%%\repeat unfold 19 { a b c d \break }
-\version "2.16.0"
+\version "2.19.21"
\header {
\book {
\score {
- \new Staff \relative c' {
+ \new Staff \relative {
\repeat unfold 18 { a b c d \break }
}
}
-\version "2.16.0"
+\version "2.19.21"
\book {
\score {
- \relative c'' {
+ \relative {
\repeat unfold 10 {
- \repeat unfold 4 {c4}
+ \repeat unfold 4 {c''4}
}
}
\header {piece = "Piece I"}
\layout {line-width = 13\cm}
}
\score {
- \relative c'' {
+ \relative {
\repeat unfold 10 {
- \repeat unfold 4 {c4}
+ \repeat unfold 4 {c''4}
}
}
\header {
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Page layout and stretching work with system-count enabled."
\book {
\score {
<<
- \relative c'' { \repeat unfold 10 c1 }
- \relative c'' { \repeat unfold 10 c1 }
- \relative c'' { \repeat unfold 10 c1 }
+ \relative { \repeat unfold 10 c''1 }
+ \relative { \repeat unfold 10 c''1 }
+ \relative { \repeat unfold 10 c''1 }
>>
}
}
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "By default, we start with page 1, which is on the right hand side
\book {
\score {
- \relative c' {\repeat unfold 60 {a b c d}}
+ \relative {\repeat unfold 60 {a b c d}}
}
}
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "The page-turn engraver will not count potential page
}
\score {
- \relative c' {
+ \relative {
\set Score.skipBars = ##t
% this should be kept on one page
\repeat volta 2 {
-\version "2.16.0"
+\version "2.19.21"
#(ly:set-option 'warning-as-error #f)
#(ly:expect-warning (_ "margins do not fit with line-width, setting default values"))
are set and a warning is printed."
}
-someNotes = \relative c' { \repeat unfold 40 { c4 d e f } }
+someNotes = \relative { \repeat unfold 40 { c'4 d e f } }
\paper {
left-margin = 20 \mm
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Here only left-margin is given, right-margin will remain default."
}
-someNotes = \relative c' { \repeat unfold 40 { c4 d e f } }
+someNotes = \relative { \repeat unfold 40 { c'4 d e f } }
\paper {
#(set-paper-size (ly:get-option 'paper-size))
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "If only line-width is given, systems are horizontally centered."
}
-someNotes = \relative c' { \repeat unfold 40 { c4 d e f } }
+someNotes = \relative { \repeat unfold 40 { c'4 d e f } }
\paper {
line-width = 100 \mm
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "All checks can be avoided by setting check-consistency to ##f in \paper."
}
-someNotes = \relative c' { \repeat unfold 40 { c4 d e f } }
+someNotes = \relative { \repeat unfold 40 { c'4 d e f } }
\paper {
left-margin = 20 \mm
-\version "2.16.0"
+\version "2.19.21"
#(ly:set-option 'warning-as-error #f)
#(ly:expect-warning (_ "systems run off the page due to improper paper settings, setting default values"))
#(set-default-paper-size "a4")
-someNotes = \relative c' { \repeat unfold 40 { c4 d e f } }
+someNotes = \relative { \repeat unfold 40 { c'4 d e f } }
\paper {
left-margin = 20 \mm
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Here only right-margin is given, left-margin will remain default."
}
-someNotes = \relative c' { \repeat unfold 40 { c4 d e f } }
+someNotes = \relative { \repeat unfold 40 { c'4 d e f } }
\paper {
#(set-paper-size (ly:get-option 'paper-size))
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Paper margin settings do not have to be complete.
are specified, default values are used."
}
-someNotes = \relative c' { \repeat unfold 40 { c4 d e f } }
+someNotes = \relative { \repeat unfold 40 { c'4 d e f } }
\paper {
#(set-paper-size (ly:get-option 'paper-size))
-\version "2.19.12"
+\version "2.19.21"
\header {
texidoc = "Setting individual nested paper properties does not
system-system-spacing = #'((basic-distance . 12) (minimum-distance . 8))
system-system-spacing.padding = #1
}
- \relative c' {
+ \relative {
\repeat unfold 10 { a4 d e f }
}
}
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "In two-sided mode, a binding offset can be specified, which is added
to the inner margin automatically."
}
-someNotes = \relative c' { \repeat unfold 200 { c4 d e f } }
+someNotes = \relative { \repeat unfold 200 { c'4 d e f } }
\paper {
two-sided = ##t
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Two-sided mode allows you to use different margins for
odd and even pages."
}
-someNotes = \relative c' { \repeat unfold 200 { c4 d e f } }
+someNotes = \relative { \repeat unfold 200 { c'4 d e f } }
\paper {
two-sided = ##t
\version "2.19.16"
\header {
- texidoc = "Different kinds of silence are not merged into the shared voice even if they begin and end simultaneously."
+ texidoc = "Different kinds of silence are not merged into the shared voice even if they begin and end simultaneously; however, when rests and skips are present in the same part, the skips are ignored."
}
\score { <<
\new Staff {
\partcombine
- \relative f' { R1^"R" | s1^"s" | r1^"r" }
- \relative f' { r1_"r" | R1_"R" | s1_"s" }
+ \relative f' { R1^"R" | s1^"s" | r1^"r" | << R1 s1 s4 >> | << r1 s2 s4 >> }
+ \relative f' { r1_"r" | R1_"R" | s1_"s" | << s4 s1 R1 >> | << s4 s2 r1 >> }
}
\new Staff {
\partcombine
- \relative f' { r1^"r" | R1^"R" | s1^"s" }
- \relative f' { R1_"R" | s1_"s" | r1_"r" }
+ \relative f' { r1^"r" | R1^"R" | s1^"s" | << s4 s1 R1 >> | << s4 s2 r1 >> }
+ \relative f' { R1_"R" | s1_"s" | r1_"r" | << R1 s1 s4 >> | << r1 s2 s4 >> }
}
>> }
\layout { ragged-right = ##t }
-mI = \relative c'' {
+mI = \relative {
\set Score.partCombineTextsOnNote = ##t
- g4 \partcombineSoloI r4 c2 |
+ g'4 \partcombineSoloI r4 c2 |
\partcombineSoloII R1*2 |
}
mII = \relative {
\new Staff <<
\partcombine
- \relative c'' {
+ \relative {
r2
- \tuplet 3/2 { g8[ g g] }
+ \tuplet 3/2 { g'8[ g g] }
\tuplet 3/2 { g[ g g] } g1
}
\relative { R1 g'1 }
\paper { ragged-right = ##T }
-\version "2.17.11"
+\version "2.19.21"
\score {
<<
\new Staff {
\partcombine
- \relative c'' {
- \tuplet 3/2 { d4 d d ~ } d2
+ \relative {
+ \tuplet 3/2 { d''4 d d ~ } d2
}
- \relative c'' {
- \tuplet 3/2 { b4 a g ~ } g2
+ \relative {
+ \tuplet 3/2 { b'4 a g ~ } g2
}
}
>>
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "@code{\\partial} works with polymetric staves."
}
\score {
- \relative c' <<
+ \relative <<
\new Staff {
\partial 4
- c4 |
+ c'4 |
c4 c c c |
}
\new Staff {
-\version "2.16.0"
+\version "2.19.21"
\header {
be placed at spacer rests." }
\score {
- \relative c'' {
+ \relative {
\set Staff.pedalSustainStyle = #'bracket
- c4 d <e f b,> \sustainOn b c c, \sustainOff \sustainOn d8[ c] e8[
+ c''4 d <e f b,> \sustainOn b c c, \sustainOff \sustainOn d8[ c] e8[
e \sustainOff \sustainOn] f4 r \sustainOff
g \sustainOn bes bes, \sustainOff c'
-\version "2.19.21"
+\version "2.19.22"
#(ly:set-option 'warning-as-error #f)
#(ly:expect-warning (_ "already have phrasing slur"))
a different spanner-id."
}
-sp=#(define-event-function (parser location n e) (index? ly:event?)
+sp=#(define-event-function (n e) (index? ly:event?)
(set! (ly:music-property e 'spanner-id) (format "sp~a" n))
e)
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "Phrasing slurs do not collide with tuplet numbers."
}
-\relative c'' {
+\relative {
\voiceOne
\tuplet 3/2 {
- c8\( b c
+ c''8\( b c
}
a2.\)
}
-\version "2.19.2"
+\version "2.19.21"
\header {
texidoc = "Nested properties may be overridden using Scheme list
syntax. This test performs two property overrides: the first
"
}
-\relative c' {
+\relative {
\once \override TextSpanner.bound-details.left.text = #"foo"
- c4\startTextSpan
+ c'4\startTextSpan
\once \override Tie.details.note-head-gap = #1
c4 ~ 4 c\stopTextSpan
-\version "2.17.11"
+\version "2.19.21"
\header {
}
-foo = \relative c' {
- \tuplet 3/2 { c4 c c } \tuplet 3/2 { c4 c c }
+foo = \relative {
+ \tuplet 3/2 { c'4 c c } \tuplet 3/2 { c4 c c }
}
\addQuote "foo" { \foo }
the alignment depends on which symbols are visible."
}
-\version "2.17.6"
+\version "2.19.21"
-\relative c' {
+\relative {
\override Score.RehearsalMark.break-align-symbols = #'(clef key-signature staff-bar)
- c1
+ c'1
\clef "bass"
\mark "clef"
\noBreak
--- /dev/null
+\header {
+ texidoc = "Notes are entered using absolute octaves,
+octaves relative to the previous note, or relative to a fixed octave."
+ }
+\version "2.19.21"
+
+\new Staff {
+ \relative { c''4 g \absolute { c'' } e' \fixed c'' { g1 }}
+ \fixed c'' { c4 \fixed c' { g } c e \relative { g''1 } }
+ \clef bass \relative { c4 g c e g1 }
+ \fixed c { c4 g, c e g1 }
+}
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "
Percent repeat counters can be shown at regular
"
}
-\relative c'' {
+\relative {
\set countPercentRepeats = ##t
\set repeatCountVisibility = #(every-nth-repeat-count-visible 5)
- \repeat percent 10 { c1 } \break
+ \repeat percent 10 { c''1 } \break
\set repeatCountVisibility = #(every-nth-repeat-count-visible 2)
\repeat percent 6 { c1 d1 }
}
-\version "2.17.15"
+\version "2.19.21"
\header {
texidoc = "Percent repeats are also centered when there is a grace note in a parallel staff. "
ragged-right =##t
}
-\relative c' <<
- \new Staff { \repeat percent 3 c1}
+\relative <<
+ \new Staff { \repeat percent 3 c'1}
\new Staff { c1 c \grace b8 c1 }
>>
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "Beat repeats for patterns containing mixed durations use
a double percent symbol."
}
-\relative c' {
+\relative {
\repeat percent 4 {
- c8. <d f>16
+ c'8. <d f>16
}
\repeat percent 2 {
\tuplet 3/2 {
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Beat repeats for patterns containing identical durations
shorter than an eighth note use multiple slashes."
}
-\relative c' {
- \repeat percent 2 { c16 d e f }
+\relative {
+ \repeat percent 2 { c'16 d e f }
\repeat percent 4 { c32 e g e }
}
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "A tremolo repeat containing only one note (no sequential music)
\paper { ragged-right = ##t }
\score {
- \new Staff \relative c'' {
- \repeat tremolo 4 { a16 }
+ \new Staff \relative {
+ \repeat tremolo 4 { a'16 }
\repeat tremolo 4 { a16\f }
\repeat tremolo 4 a16
\repeat tremolo 4 a16\f |
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "A tremolo can have more than two notes. Also check that
\paper { ragged-right = ##t }
\score {
- \new Staff \relative c' {
+ \new Staff \relative {
\time 3/4
\repeat tremolo 16 { a64 c e } |
\repeat tremolo 8 { a,64 c e }
-\version "2.16.0"
+\version "2.19.21"
#(ly:set-option 'warning-as-error #f)
#(ly:expect-warning (_ "More alternatives than repeats. Junking excess alternatives"))
Unfolded behavior:"
}
-\context Voice \relative c'' {
- \repeat unfold 3 { c^"3x 0a" d }
+\context Voice \relative {
+ \repeat unfold 3 { c''^"3x 0a" d }
%% less alts than body
\repeat unfold 4 { c^"4x 0a" d } \alternative { e f }
%% more alts than body
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "When too few alternatives are present, the first
\paper { ragged-right = ##t }
-\relative c'' \context Voice {
- \repeat volta 3 c1
+\relative \context Voice {
+ \repeat volta 3 c''1
\alternative { d f } e4
}
-\version "2.16.0"
+\version "2.19.21"
#(ly:set-option 'warning-as-error #f)
#(ly:expect-warning (_ "More alternatives than repeats. Junking excess alternatives"))
%% no alts.
-\context Voice \relative c'' {
+\context Voice \relative {
%% repeat non aligning with barlines.
- \repeat volta 3 { c^"3x 0alt" d e }
+ \repeat volta 3 { c''^"3x 0alt" d e }
%% less alts than body
\repeat volta 4 { c^"4x 2alt" d } \alternative { e f }
%% more alts than body
account properly."
}
-\version "2.17.6"
+\version "2.19.21"
\paper {
ragged-right = ##t
}
-\relative c''' {
+\relative {
\override Rest.direction = #UP
- \stemDown b8[ r b]
+ \stemDown b''8[ r b]
\override Rest.direction = #DOWN
\stemDown b8[ r b]
}
collision."
}
-\version "2.16.0"
+\version "2.19.21"
\paper {
ragged-right = ##t
}
-\relative c''' {
- \stemDown b8[ r b]
+\relative {
+ \stemDown b''8[ r b]
\stemUp b,,8[ r b]
}
-\version "2.17.6"
+\version "2.19.22"
\header {
texidoc = "Breve, whole and half rests moving outside the staff should get
ledger lines."
\paper { ragged-right = ##t }
rPos =
-#(define-music-function (parser location y) (number?)
+#(define-music-function (y) (number?)
#{ \override Rest.staff-position = #y #})
{
-\version "2.17.11"
+\version "2.19.22"
\header {
(set! pitch (modulo (1+ pitch) 7)))))
oneNoteScore =
-#(define-void-function (parser location) ()
- (add-one-note-score parser))
+#(define-void-function () ()
+ (add-one-note-score (*parser*)))
%%%
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Horizontal scripts don't have @code{avoid-slur} set."
ragged-right = ##t
}
-\relative c'' {
+\relative {
\set fingeringOrientations = #'(right)
- < a-1 d-2>2
+ < a'-1 d-2>2
< a-1 d-2>2
< a-1 d-2>2(
< a-1 d-2>2)
"
}
-\version "2.19.16"
-\relative c''
+\version "2.19.21"
+\relative
{
\override Script.toward-stem-shift = #1.0
- a4^> c_>
+ a'4^> c_>
\override Script.toward-stem-shift = #0.0
a4^> c_>
"
}
-\version "2.17.15"
+\version "2.19.21"
\paper {
ragged-right = ##t
}
-\relative c'
+\relative
{
\set stringNumberOrientations = #'(left)
\set fingeringOrientations = #'(left)
\set strokeFingerOrientations = #'(left)
- <cis-1\4
+ <cis'-1\4
-\rightHandFinger #1 f>\arpeggio
}
-\version "2.17.15"
+\version "2.19.21"
\header {
and then return to the previous value."
}
-\relative c' {
+\relative {
\set fingeringOrientations = #'(left)
- <e-1>1 |
+ <e'-1>1 |
\once \set fingeringOrientations = #'(right)
<e-1> |
<e-1> -"left" |
}
-\version "2.17.11"
+\version "2.19.21"
\paper {
ragged-right = ##T
}
-\new Staff \relative c' {
+\new Staff \relative {
\set Score.skipTypesetting = ##t
- \tuplet 3/2 { c8 c c } \tuplet 3/2 { c c c }
+ \tuplet 3/2 { c'8 c c } \tuplet 3/2 { c c c }
\tuplet 3/2 { c c c } \tuplet 3/2 { c c c}
\set Score.skipTypesetting = ##f
d1 \break
\layout {ragged-right = ##t}
-\version "2.17.6"
-\relative c''' {
+\version "2.19.21"
+\relative {
\override Score.PaperColumn.keep-inside-line = ##f
\override TextScript.outside-staff-priority = #2
\override DynamicLineSpanner.outside-staff-priority = #1
- c
+ c'''
\once \override TextScript.self-alignment-X = #CENTER
a,^"this doesn't collide with the c"
b^"this goes above the previous markup"
texidoc = "Some composers use slurs both above and below chords.
This can be typeset by setting @code{doubleSlurs}"
}
-\version "2.16.0"
+\version "2.19.21"
\layout { ragged-right = ##t }
-\relative c' {
+\relative {
\set doubleSlurs = ##t
- <c e>4 ( <d f> <c e> <d f> )
+ <c' e>4 ( <d f> <c e> <d f> )
}
-\version "2.17.6"
+\version "2.19.21"
\header {
ragged-right = ##t
}
-baseWalk = \relative c {
+baseWalk = \relative {
\time 6/4
\stemDown
\slurUp
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Slurs take flag extents into account.
"
}
-\relative c'' {
+\relative {
\stemUp
\slurUp
- b8( c)
+ b'8( c)
}
the given pair. "
}
-\version "2.17.6"
+\version "2.19.21"
\paper { ragged-right = ##T }
-\relative c' {
+\relative {
\override Slur.positions = #'(-4 . -5)
- e( f g)
+ e'( f g)
}
-\version "2.19.21"
+\version "2.19.22"
#(ly:set-option 'warning-as-error #f)
#(ly:expect-warning (_ "already have slur"))
a different spanner-id."
}
-sp=#(define-event-function (parser location n e) (index? ly:event?)
+sp=#(define-event-function (n e) (index? ly:event?)
(set! (ly:music-property e 'spanner-id) (format "sp~a" n))
e)
}
-\version "2.17.11"
+\version "2.19.21"
\paper {
ragged-right = ##t
% #(define debug-slur-scoring #t)
}
-\relative c' {
+\relative {
\slurUp
\override TupletBracket.bracket-visibility = ##f
\override Slur.details.region-size = #6
\tuplet 3/2
{
- c( g' c,)
+ c'( g' c,)
}
}
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Outside staff callbacks that no longer apply to grobs
"
}
-\relative c'' {
+\relative {
\set strokeFingerOrientations = #'(up)
\override StrokeFinger.avoid-slur = #'outside
\autoBeamOff
- <a-\rightHandFinger #2 >16 b
+ <a'-\rightHandFinger #2 >16 b
<a-\rightHandFinger #2 >16( b)
}
-\version "2.17.15"
+\version "2.19.21"
\header {
texidoc="Festival song synthesis output supports
reordered lyrics.
\festival #"song-reordering.xml" { \tempo 4 = 100 }
<<
- \relative c' \context Voice = "lahlah" {
+ \relative \context Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
<<
\context Voice = alternative {
\voiceOne
-\version "2.17.15"
+\version "2.19.21"
\header {
texidoc="Festival song synthesis output supports
reordered lyrics.
\festival #"song-reordering2.xml" { \tempo 4 = 100 }
<<
- \relative c' \context Voice = "lahlah" {
+ \relative \context Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
<<
{
\voiceTwo
-\version "2.17.15"
+\version "2.19.21"
\header {
texidoc="Festival song synthesis output supports
slurs.
\festival #"song-slurs.xml" { \tempo 4 = 100 }
<<
- \relative c' \context Voice = "lahlah" {
+ \relative \context Voice = "lahlah" {
\set Staff.autoBeaming = ##f
- c4
+ c'4
\slurDotted
f8.[( g16])
a4
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Accidentals do not influence the amount of stretchable space.
\layout {
line-width = 18.\cm
}
-\relative c'' {
+\relative {
\accidentalStyle piano-cautionary
\time 2/4
- d16 d d d d d cis d dis dis dis dis
+ d''16 d d d d d cis d dis dis dis dis
}
}
-\version "2.17.6"
+\version "2.19.21"
\layout{
ragged-right = ##t
}
-\relative c'' {
+\relative {
\override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
\override Score.NonMusicalPaperColumn.layer = #2
\time 2/4
\stemUp
s2
- c4 r4
+ c''4 r4
cis4 r4
}
}
-\version "2.17.6"
+\version "2.19.21"
\layout{
ragged-right = ##t
}
-\relative c'' {
+\relative {
\override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
\override Score.NonMusicalPaperColumn.layer = #2
\time 2/4
\stemDown
s2
- e4 s4
+ e''4 s4
e,4 s4
}
}
-\version "2.17.6"
+\version "2.19.21"
\layout{
ragged-right=##t
}
-\new Staff \relative c' {
+\new Staff \relative {
\override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
\override Score.NonMusicalPaperColumn.layer = #1
\time 4/4
s1
- c2. c4
+ c'2. c4
\time 3/4
s2.
c2.
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Clefs are also folded under cross staff constructs."
}
\context PianoStaff <<
\new Staff = "up"
- \relative c'' <<
+ \relative <<
{
\stemDown
- f16[ \change Staff = down \stemUp
+ f''16[ \change Staff = down \stemUp
\clef treble g,]
} \\
texidoc = "accidentals may be folded under preceding notes."
}
-\version "2.16.0"
+\version "2.19.21"
\paper {
ragged-right = ##t
}
-\relative c''' {
- \stemUp c4...*1/2
+\relative {
+ \stemUp c'''4...*1/2
ceses,,!
eses!
}
\new PianoStaff <<
- \new Staff \relative c' {
+ \new Staff \relative {
\tuplet 3/2 { g'4 a2 }
}
\new Staff \relative {
}
-\version "2.17.6"
+\version "2.19.21"
\paper {
ragged-right = ##t
}
-\relative c''
+\relative
{
\override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
- c1
+ c''1
\mark "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "
}
-\version "2.17.11"
+\version "2.19.21"
\header{
\paper {ragged-right = ##f }
-\relative c' {
+\relative {
\context StaffGroup <<
\new Staff \context Voice {
- \tuplet 10/8 { c8[ c c c c c c c c c] }
+ \tuplet 10/8 { c'8[ c c c c c c c c c] }
}
\new Staff \context Voice {
\tuplet 8/8 { c8[ c c c c c c c] }
-\version "2.16.0"
+\version "2.19.21"
\header {
ragged-right = ##t
}
-\relative c'' \context Staff {
+\relative \context Staff {
\set autoBeaming = ##f
- a8[ a8 a8 a8]
+ a'8[ a8 a8 a8]
a8 a8 a8 a8
}
"
}
-\version "2.17.6"
+\version "2.19.21"
-\relative c' {
+\relative {
\override Score.SpacingSpanner.packed-spacing = ##t
- c2 d4 f8[ g] a
+ c'2 d4 f8[ g] a
}
}
-\version "2.17.11"
+\version "2.19.21"
\paper { ragged-right = ##t }
-\relative c''
+\relative
<<
\set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
- \new Staff { c8[ c c c c c] c4 c2 r2 }
+ \new Staff { c''8[ c c c c c] c4 c2 r2 }
\new Staff { c2 \tuplet 3/2 { c8 c c } c4 c1 }
>>
-\version "2.16.0"
+\version "2.19.21"
\header {
ragged-last = ##t
}
-\relative c'' \new Staff { \repeat unfold 20 { c1 } }
+\relative \new Staff { \repeat unfold 20 { c''1 } }
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Upstem notes before a barline are printed with some extra
\layout { ragged-right = ##t}
-\relative e'
+\relative
{
\override Score.PaperColumn.layer = #1
\override Score.PaperColumn.stencil = #ly:paper-column::print
\time 2/8
\stemUp
- e8[ e]
+ e'8[ e]
e'[ e]
}
-\version "2.17.6"
+\version "2.19.21"
\header{
}
-\context Voice \relative c {
+\context Voice \relative {
\override Score.PaperColumn.layer = #1
\override Score.PaperColumn.stencil = #ly:paper-column::print
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "For juxtaposed chords with the same direction, a
slight optical correction is used. It is constant, and works only if
\layout { ragged-right = ##t}
-\relative c'' {
+\relative {
\override Score.PaperColumn.layer = #1
\override Score.PaperColumn.stencil = #ly:paper-column::print
\stemDown
\time 12/4
- f8[
+ f''8[
e f e] f[ d f d] f[ c f c] f[ b, f' b,] f'[ a, f' a,]
}
}
-\version "2.17.28"
+\version "2.19.21"
\paper {
ragged-right = ##t
}
}
-\relative c''
+\relative
<<
\override Score.SpacingSpanner.strict-note-spacing = ##t
\set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
\new Staff {
- c8[ c \clef alto c c \grace { d16 } c8 c] c4 c2
+ c''8[ c \clef alto c c \grace { d16 } c8 c] c4 c2
\grace { c16 c16 }
c2 }
\new Staff {
}
-\version "2.17.11"
+\version "2.19.21"
-\relative c''
+\relative
<<
\override Score.SpacingSpanner.uniform-stretching = ##t
\new Staff {
- c16[ c c c c c c c c c16]
+ c''16[ c c c c c c c c c16]
}
\new Staff {
\tuplet 7/6 { c16 c c cis c c c }
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "The visibility of left-broken line spanners and hairpins
\paper { ragged-right = ##t }
-\relative c' {
+\relative {
\override TextSpanner.bound-details =
#'((left
(Y . 0)
(text . #f))
(right-broken
(text . #f)))
- c1\startTextSpan\< \break
+ c'1\startTextSpan\< \break
\override Hairpin.to-barline = ##f
\override Hairpin.after-line-breaking = ##f
c2\stopTextSpan\!
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "The @code{break-overshoot} property sets the amount that
\paper { ragged-right = ##t }
-\relative c'' {
+\relative {
\override Beam.break-overshoot = #'(1.0 . 2.0)
\override TupletBracket.break-overshoot = #'(1.0 . 2.0)
\override TupletBracket.bracket-visibility = ##t
\override Beam.breakable = ##t
- c2.. \tuplet 3/2 { c8.[ \break c8.] }
+ c''2.. \tuplet 3/2 { c8.[ \break c8.] }
}
}
{
- \new Voice \relative c'' {
+ \new Voice \relative {
\voiceOne
- g8-. a-. b-. c-.
+ g'8-. a-. b-. c-.
a-. b-. c-. d-.
b8[-. a-. g b]
e,-. f-. g-. a-.
\stemDown
e,-. d-. c-. b-. a-. g-.
}
- \relative c'' {
+ \relative {
\stemUp
- d-> c-> b-> a-> g-> f-> e-> d->
+ d''-> c-> b-> a-> g-> f-> e-> d->
d'
d-. c-. b-. a-. g-. f-. e-. d-.
}
up to avoid the ledger line (just as with uncustomized ledger lines)."
}
-\version "2.19.17"
+\version "2.19.21"
-\new Staff \relative c' {
+\new Staff \relative {
\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
+ f4. g a b c d g' a b c d e
}
later by setting the @code{ledger-extra} property."
}
-\version "2.17.6"
+\version "2.19.21"
-\new Staff \relative c' {
+\new Staff \relative {
\override Staff.StaffSymbol.line-positions = #'(-5 -2 -1 2 5 6)
\override Staff.StaffSymbol.ledger-positions = #'(-5 (-2 -1) 2)
\override Staff.StaffSymbol.ledger-extra = #1
}
-\version "2.17.6"
+\version "2.19.21"
-\new Staff \relative c' {
+\new Staff \relative {
\override Staff.StaffSymbol.line-positions = #'(-7 -2 0 3 9)
g c f b e a
}
}
-\version "2.17.6"
-\relative c'' \new Voice \with {
+\version "2.19.21"
+\relative \new Voice \with {
\consists "Melody_engraver"
\override Stem.neutral-direction = #'()
} {
- c4 b c b
+ c''4 b c b
c c c c
b a b a
}
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "Stem length and stem-begin-position can be set manually.
"
}
-\relative c' {
+\relative {
\autoBeamOff
\stemUp
a8 aes''8
-\version "2.16.0"
+\version "2.19.21"
\header {
}
-\relative c'' {
- \stemDown d c b a g f e
+\relative {
+ \stemDown d'' c b a g f e
\stemNeutral
\stemUp a b c d e f g a
\stemNeutral
}
-\version "2.17.6"
+\version "2.19.21"
\layout { ragged-right = ##t }
-\relative c' {
+\relative {
\override Stem.stemlet-length = #0.75
- c8[ r8 c16 r16 c8]
+ c'8[ r8 c16 r16 c8]
c4
}
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Tremolo works even when a stem is forced in a
}
\layout { ragged-right = ##t }
-\relative c
+\relative
{
\clef bass
\stemUp f4 : 32
-\version "2.17.6"
+\version "2.19.21"
\header{
texidoc="Stem tremolos count in a note column's horizontal skyline.
"
}
-\relative c'' {
+\relative {
\autoBeamOff
\override NoteHead.stencil = #(ly:make-stencil '() '(0 . 0) '(0 . 0))
- \repeat unfold 8 { b8:32 }
+ \repeat unfold 8 { b'8:32 }
}
\header { texidoc = "A heavy-bar system start delimiter may be created by tuning the @code{SystemStartBar} grob."
}
-\version "2.17.15"
+\version "2.19.21"
\paper {
ragged-right = ##t
}
<<
\new StaffGroup
- \relative c' <<
+ \relative <<
\set StaffGroup.systemStartDelimiter = #'SystemStartBar
\override StaffGroup.SystemStartBar.thickness = #8
\override StaffGroup.SystemStartBar.padding = #0.2
- \new Staff { c1 }
+ \new Staff { c'1 }
\new Staff { c1 }
>>
\new Staff { c1 }
created with the @code{systemStartDelimiterHierarchy} property."
}
-\version "2.17.15"
+\version "2.19.21"
\paper {
ragged-right = ##t
}
\new StaffGroup
-\relative c' <<
+\relative <<
\set StaffGroup.systemStartDelimiterHierarchy
= #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d)
- \new Staff { c1 }
+ \new Staff { c'1 }
\new Staff { c1 }
\new Staff { c1 }
\new Staff { c1 }
c'1 ~ \break c2 ~ 2
}
-thirdpart = \relative c' {
+thirdpart = \relative {
\repeat volta 2 {
- < c\3 e\2 g\1 >4 < c\3 e\2 g\1 > ~ < c\3 e\2 g\1 >\laissezVibrer r
+ < c'\3 e\2 g\1 >4 < c\3 e\2 g\1 > ~ < c\3 e\2 g\1 >\laissezVibrer r
c4. d8 e2 ~
}
\alternative { { e2 r } { e2\repeatTie e2^\fermata } }
-\version "2.16.0"
+\version "2.19.21"
#(ly:set-option 'warning-as-error #f)
#(ly:expect-warning (_ "No open string for pitch ~a") "#<Pitch f >")
"
}
-mymusic = \relative c {
+mymusic = \relative {
\set minimumFret = #1
<d-0 d'-2 f-3 a-1>1
<f-0>
-\version "2.19.14"
+\version "2.19.22"
\header {
texidoc = "The operation of @code{\\keepWithTag} can be made more
>>
demo =
-#(define-music-function (parser location syms m)
+#(define-music-function (syms m)
(symbol-list? ly:music?)
#{
\new Score <<
#(set-global-staff-size 16)
demoline =
-#(define-scheme-function (parser location m1 m2) (ly:music? ly:music?)
+#(define-scheme-function (m1 m2) (ly:music? ly:music?)
#{
\markup \column { \fill-line { \null \score { #m1 } \score { #m2 } \null }
\vspace #1 }
-\version "2.19.2"
+\version "2.19.22"
\header {
texidoc = "The @code{\\removeWithTag} and @code{\\keepWithTag}
>>
demo =
-#(define-music-function (parser location fun syms m)
+#(define-music-function (fun syms m)
(ly:music-function? symbol-list? ly:music?)
#{
\new Staff
-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc= "Text spanners should not repeat start text when broken."
}
ragged-right = ##t
}
-\relative c'' {
+\relative {
\set crescendoText = #"cresc."
\set crescendoSpanner = #'text
- c1\< c \break
+ c''1\< c \break
c1 c\! \break
}
" }
-\version "2.17.6"
+\version "2.19.21"
\paper {
debug-tie-scoring = ##t
ragged-right = ##t
}
-\relative c'' {
+\relative {
\override Tie.layer = #2
- a ~ <fis a>
+ a' ~ <fis a>
}
% EOF
-\version "2.17.6"
+\version "2.19.21"
\header {
line-width = 40.0\mm
}
-\relative c' {
+\relative {
\override Tie.minimum-length = #5
- f2. f16 f f f ~ | \break
+ f'2. f16 f f f ~ | \break
f1
}
}
-\version "2.19.21"
+\version "2.19.22"
\paper {
indent = #0.0
generateTiePattern
-= #(define-music-function (parser location is-long chords) (boolean? ly:music?)
+= #(define-music-function (is-long chords) (boolean? ly:music?)
"
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "If using integers, the tie will vertically tuned for
as the exact location."
}
-\relative c'' {
+\relative {
\override Tie.staff-position = #3
- d4 ~
+ d''4 ~
\override Tie.staff-position = #3.0
d ~
d
-\version "2.19.16"
+\version "2.19.21"
\header {
texidoc = "This test covers the mensural and neomensural time signature styles."
\layout { indent = 0 }
-testMusic = \relative f' {
- \time 4/4 \partial 4 f4
+testMusic = \relative {
+ \time 4/4 \partial 4 f'4
\time 2/2 \partial 4 f4
\time 6/4 \partial 4 f4
\time 6/8 \partial 4 f4
-\version "2.19.16"
+\version "2.19.21"
\header {
texidoc = "The numbered time signature style prints a fraction."
}
\new Staff {
- \relative d' {
+ \relative {
\override Staff.TimeSignature.style = #'numbered
- \time 4/4 d1
+ \time 4/4 d'1
\time 3/4 d2.
\time 2/2 d1
\time 16/128 d8
-\version "2.19.16"
+\version "2.19.21"
\header {
texidoc = "The single-digit time signature style prints the numerator only."
}
\new Staff {
- \relative d' {
+ \relative {
\override Staff.TimeSignature.style = #'single-digit
- \time 1/2 d2
+ \time 1/2 d'2
\time 2/4 d4 d
\time 3/4 d2.
\time 16/4 d\longa
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "In combination with a beam, the bracket of the tuplet
}
\layout { ragged-right= ##t }
-\context Voice\relative c'' {
- \tuplet 3/2 { r c8[ c8] }
+\context Voice\relative {
+ \tuplet 3/2 { r c''8[ c8] }
\tuplet 3/2 { c8[ c c] }
\tuplet 3/2 { c16[ c16] c8[ c8] }
}
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "@code{TupletBracket} grobs avoid @code{Fingering} grobs.
"
}
-\relative d'' {
+\relative {
\override TupletBracket.direction = #UP
- \tuplet 3/2 { d4 a8-4 }
+ \tuplet 3/2 { d''4 a8-4 }
}
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "Tuplet brackets avoid scripts by default.
"
}
-\relative c'' {
- \tuplet 3/2 { a8^\espressivo r a^\espressivo }
+\relative {
+ \tuplet 3/2 { a'8^\espressivo r a^\espressivo }
}
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "@code{TupletBracket} grobs avoid @code{StringNumber} grobs.
"
}
-\relative d'' {
+\relative {
\override TupletBracket.direction = #UP
- \tuplet 3/2 { d4 <a\4>8 }
+ \tuplet 3/2 { d''4 <a\4>8 }
}
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "Tuplet brackets' outside staff priority can be
}
-\relative c'' {
+\relative {
\override TupletBracket.avoid-scripts = ##f
% Plain old tuplet
- \tuplet 3/2 { a8 r a }
+ \tuplet 3/2 { a'8 r a }
% With nothing set, collisions abound both horizontally and
% vertically
\tuplet 3/2 { a8^\espressivo r a^\espressivo }
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "Tuplet brackets do not push objects with outside-staff-priority
"
}
-\relative c' {
+\relative {
\override TupletBracket.direction = #UP
\tuplet 1/1 { a^"foo" a' a' a' }
}
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "The default behavior of tuplet-bracket visibility is to print a bracket
"
}
-music = \relative c'' {
- \tuplet 3/2 { c16[ d e } f8]
+music = \relative {
+ \tuplet 3/2 { c''16[ d e } f8]
\tuplet 3/2 { c8 d e }
\tuplet 3/2 { c4 d e }
}
}
-\version "2.17.11"
+\version "2.19.21"
\paper {
ragged-right = ##t
}
-\relative c'' {
+\relative {
\override TupletNumber.text = #tuplet-number::calc-fraction-text
\override TupletBracket.edge-text = #(cons
#:arrow-head X LEFT #f)
(markup #:arrow-head X RIGHT #f))
\tuplet 19/11 {
- c4 c4 c4 c4
+ c''4 c4 c4 c4
\bar "-" \break
c4 c4 c4 c4
c4 c4 c4 c4
start of the next non-tuplet note. "
}
-\version "2.17.11"
+\version "2.19.21"
\paper { ragged-right = ##t
indent = 0.0
}
-\relative c'' \new Voice \with {
+\relative \new Voice \with {
\remove Forbid_line_break_engraver
\override Beam.breakable = ##t
}
{
\set tupletFullLength = ##t
- c4
+ c''4
\tuplet 3/2 { c8[ c c] }
\tuplet 3/2 { c8[ c \bar "-" \break c] }
<< \tuplet 3/2 { c8[ c c] }
}
-\version "2.17.11"
+\version "2.19.21"
\layout {
indent = 0.0\mm
}
-\relative c'' {
+\relative {
\override TupletNumber.text = #tuplet-number::calc-fraction-text
- \tuplet 12/17 { c8 c4 c8 c8}
+ \tuplet 12/17 { c''8 c4 c8 c8}
}
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "Broken nested tuplets avoid each other correctly.
\score {
\new Staff
<<
- \relative c'' {
+ \relative {
\override Score.Beam.breakable = ##t
r2
\tuplet 3/4 {
- \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c''8[ c c] }
\tuplet 3/2 { c8[ c c] }
\tuplet 3/2 { c8[ c c] }
}
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc=" Tuplets may be nested."
indent = 0.0
}
-\relative c'' {
+\relative {
\tuplet 3/4 {
- \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c''8[ c c] }
\tuplet 3/2 { c8[ c c] }
\tuplet 3/2 { c8[ c c] }
}
-\version "2.19.3"
+\version "2.19.21"
\header {
texidoc = "Tuplet numbers are positioned correctly on kneed French-style beams."
bottom = \change Staff = "2"
music =
-\relative c' {
+\relative {
\time 3/4
\override Beam.auto-knee-gap = 1
\override Stem.french-beaming = ##t
-\version "2.19.3"
+\version "2.19.21"
\header {
texidoc = "In tuplets with an even number of stems, the number
ragged-right = ##t
}
-\relative c' {
+\relative {
\time 2/4
\override Beam.auto-knee-gap = 1
\tuplet 6/4 4 {
- c16 c'' c,, c'' c,, c''
+ c'16 c'' c,, c'' c,, c''
\once \override TupletNumber.direction = #UP
c,,16 c'' c,, c'' c,, c''
}
-\version "2.19.3"
+\version "2.19.21"
\header {
texidoc = "Tuplet numbers are placed next to the beam unless there is
}
\score {
- \relative c' {
+ \relative {
\time 2/4
\override Beam.auto-knee-gap = 1
\tuplet 6/4 4 {
\once \override TupletNumber.text =
#tuplet-number::calc-fraction-text
- c16 c'' c,, c'' c,, c''
+ c'16 c'' c,, c'' c,, c''
\once \override TupletNumber.text =
#(tuplet-number::fraction-with-notes "16" "16")
c,,16 c'' c,, c'' c,, c''
-\version "2.19.3"
+\version "2.19.21"
\header {
texidoc = "A tuplet number associated with a kneed beam is not placed between
ragged-right = ##t
}
-\relative c'' {
+\relative {
\override Beam.auto-knee-gap = 1
\tuplet 3/2 4 {
- c8 c''' cis,,,
+ c''8 c''' cis,,,
c8 c'''' c,,,
c''8 c c,,
c,8 c,,, c'''
-\version "2.19.4"
+\version "2.19.21"
\header {
texidoc = "Tuplet numbers are placed next to kneed beams when
top = \change Staff = "1"
bottom = \change Staff = "2"
-music = \relative c {
+music = \relative {
\override Beam.auto-knee-gap = 1
\tuplet 3/2 4 {
c8 \top e'' \bottom g,,
-\version "2.17.11"
+\version "2.19.21"
\header {
}
-\relative c'' {
+\relative {
\override TupletBracket.outside-staff-priority = #1
\override TupletNumber.font-size = #5
- \tuplet 3/2 { a4\trill a\trill^"foo" a\trill }
+ \tuplet 3/2 { a'4\trill a\trill^"foo" a\trill }
}
\ No newline at end of file
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "Tuplet numbers' outside staff priority can be
}
-\relative c'' {
+\relative {
\override TupletBracket.avoid-scripts = ##f
- \tuplet 3/2 { a8\trill a\trill a\trill }
+ \tuplet 3/2 { a'8\trill a\trill a\trill }
\override TupletNumber.outside-staff-priority = #1
\tuplet 3/2 { a8\trill a\trill a\trill }
\override Script.outside-staff-priority = #2
-\version "2.19.3"
+\version "2.19.21"
\header {
texidoc = "Tuplet numbers will maintain a constant distance from
ragged-right = ##f
}
-\relative c' {
+\relative {
\tuplet 3/2 4 {
- c8 g''' a
+ c'8 g''' a
\once \offset X-offset 2 TupletNumber
c,,, g''' a
\once \offset X-offset #-2 TupletNumber
-\version "2.19.3"
+\version "2.19.21"
\header {
texidoc = "Tuplet numbers associated with kneed beams will
top = \change Staff = "1"
bottom = \change Staff = "2"
-music = \relative c {
+music = \relative {
\override Beam.auto-knee-gap = 1
\tuplet 5/4 4 {
c16[ \top g'' e' \bottom fis,, \top c']
-\version "2.19.3"
+\version "2.19.21"
\header {
texidoc = "Tuplet numbers are positioned next to kneed beams."
top = \change Staff = "1"
bottom = \change Staff = "2"
-music = \relative c {
+music = \relative {
\time 3/4
\override Beam.auto-knee-gap = 1
\tuplet 3/2 4 {
-\version "2.17.30"
+\version "2.19.21"
\header {
texidoc = "Tuplet bracket formatting supports numerous options,
"
}
-\context Voice \relative c'' {
+\context Voice \relative {
- \tuplet 3/2 { c'8 c,, c }
+ \tuplet 3/2 { c'''8 c,, c }
\tuplet 3/2 { c'8 c'' c,, }
\tuplet 3/2 { c8[^"NB" c c] }
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "Tuplets may contain rests. "
}
-\context Voice \relative c'' {
+\context Voice \relative {
\time 2/4
- \tuplet 3/2 { r c,,, c''' }
+ \tuplet 3/2 { r c, c''' }
\tuplet 3/2 { r c c }
\tuplet 3/2 { r c r }
\tuplet 3/2 { r r r }
texidoc = "Show tuplet numbers also on single-note tuplets (otherwise the timing would look messed up!), but don't show a bracket. Make sure that tuplets without any notes don't show any number, either."
}
-\version "2.17.11"
+\version "2.19.21"
\paper { ragged-right = ##t
indent = 0.0 }
\new Staff <<
- \new Voice \relative c'' {
- \tuplet 6/4 { c2.:8 } \tuplet 3/2 { g4.:8 } \tuplet 3/2 { a,4.:8 } \tuplet 6/4 {} \bar"|."
+ \new Voice \relative {
+ \tuplet 6/4 { c''2.:8 } \tuplet 3/2 { g4.:8 } \tuplet 3/2 { a,4.:8 } \tuplet 6/4 {} \bar"|."
}
>>
ragged-right = ##t
}
-\version "2.17.11"
+\version "2.19.21"
\new Voice {
- \relative c'' {
- \tuplet 3/2 { c4 d e}
+ \relative {
+ \tuplet 3/2 { c''4 d e}
\tuplet 3/2 { c4 d e}
}
- \relative c' {
+ \relative {
\tuplet 5/4 { a'4 as g fis f }
\tuplet 5/4 { fis4 e es d des }
\tuplet 5/4 { fis,4 e es d des }
-\version "2.17.11"
+\version "2.19.21"
\header {
texidoc = "Horizontal tuplet brackets are shifted vertically
\layout { ragged-right= ##t }
-\context Voice\relative c'' {
- \tuplet 3/2 { b'4 b b }
+\context Voice\relative {
+ \tuplet 3/2 { b''4 b b }
\tuplet 3/2 { f4 f f }
\tuplet 3/2 { g4 g g }
\tuplet 3/2 { a4 a a }
-\version "2.17.11"
+\version "2.19.21"
\header {
"
}
-\relative c'' {
+\relative {
\set subdivideBeams = ##t
\set baseMoment = #(ly:make-moment 1/8)
\set beatStructure = #'(2 2 2 2)
\repeat unfold 8 {
- \tuplet 3/2 { c16 e d }
+ \tuplet 3/2 { c''16 e d }
}
}
-\version "2.17.11"
+\version "2.19.21"
\header{
texidoc="Non-standard tuplet texts: Printing other tuplet fractions than the ones actually assigned."
}
\layout { ragged-right= ##t }
-\context Voice \relative c'' {
+\context Voice \relative {
\once \override TupletNumber.text = #(tuplet-number::non-default-tuplet-denominator-text 7)
- \tuplet 3/2 { c4. c4. c4. c4. }
+ \tuplet 3/2 { c''4. c4. c4. c4. }
\once \override TupletNumber.text = #(tuplet-number::non-default-tuplet-fraction-text 12 7)
\tuplet 3/2 { c4. c4. c4. c4. }
\once \override TupletNumber.text = #(tuplet-number::append-note-wrapper (tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
-\version "2.17.11"
+\version "2.19.21"
\header{
texidoc="Non-standard tuplet texts: Printing a tuplet fraction with note durations assigned to both the denominator and the numerator."
}
-\context Voice \relative c'' {
+\context Voice \relative {
\once \override TupletNumber.text = #(tuplet-number::fraction-with-notes "4." "8")
- \tuplet 3/2 { c4. c4. c4. c4. }
+ \tuplet 3/2 { c''4. c4. c4. c4. }
\once \override TupletNumber.text = #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
\tuplet 3/2 { c4. c4. c4. c4. }
}
-\version "2.17.11"
+\version "2.19.21"
\header{
texidoc="Non-standard tuplet texts: Appending a note value to the normal text and to the fraction text."
}
\layout { ragged-right= ##t }
-\context Voice \relative c'' {
+\context Voice \relative {
\once \override TupletNumber.text = #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4")
- \tuplet 3/2 { c8 c8 c8 c8 c8 c8 }
+ \tuplet 3/2 { c''8 c8 c8 c8 c8 c8 }
\once \override TupletNumber.text = #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4")
\tuplet 3/2 { c8 c8 c8 c8 c8 c8 }
}
-\version "2.17.11"
+\version "2.19.21"
\header{
texidoc="
\layout { ragged-right= ##t }
-\context Voice \relative c'' {
- \tuplet 3/2 { a8 b c }
+\context Voice \relative {
+ \tuplet 3/2 { a'8 b c }
\tuplet 3/2 { r8 b[ f] }
\override TupletBracket.bracket-flare = #'(0.5 . 0.5)
\tuplet 3/2 { r8 b r8 }
-\version "2.17.6"
+\version "2.19.21"
\header {
texidoc = "unpure-pure containers take two arguments: an unpure property and
"
}
-\relative c'' {
+\relative {
\stemUp \autoBeamOff
- d,8 eis'
+ d'8 eis'
\once \override Flag.Y-offset =
#(ly:make-unpure-pure-container ly:flag::calc-y-offset 8)
d,8 eis'!
-\version "2.17.15"
+\version "2.19.21"
\header {
value for just one timestep and then return to the previous value."
}
-\relative c' {
+\relative {
\set fingeringOrientations = #'(left)
- <e-1>1 |
+ <e'-1>1 |
\once \unset fingeringOrientations
<e-1>-"default" |
<e-1>-"left" |
-\version "2.16.0"
+\version "2.19.21"
\header { texidoc= "
ragged-right = ##t
}
-\relative c'
+\relative
\context PianoStaff <<
\set PianoStaff.followVoice = ##t
\new Staff = "one" \context Voice {
- c1
+ c'1
\change Staff=two
b2 a
}
-\version "2.17.6"
+\version "2.19.21"
\header { texidoc = "If the 'whiteout property of a
grob is set to #t, that part of all objects in lower
"
}
-\relative c' {
+\relative {
\time 3/4
\override Staff.StaffSymbol.layer = #4
\once \override Tie.layer = #2
markup. "
}
-\version "2.17.6"
+\version "2.19.21"
\paper
{
ragged-right = ##t
}
-\relative c'' {
+\relative {
\override TextScript.layer = #'2
\override TextScript.extra-offset = #'(2 . 4)
- c4-\markup { \whiteout \pad-markup #0.5 foo } c
+ c''4-\markup { \whiteout \pad-markup #0.5 foo } c
}
Stream_event *note = accidentals_[i].melodic_;
Context *origin = accidentals_[i].origin_;
- Pitch *pitch = Pitch::unsmob (note->get_property ("pitch"));
+ Pitch *pitch = unsmob<Pitch> (note->get_property ("pitch"));
if (!pitch)
continue;
Grob *a = trans->make_item ("AccidentalSuggestion", note_head->self_scm ());
Side_position_interface::add_support (a, note_head);
- if (Grob *stem = Grob::unsmob (a->get_object ("stem")))
+ if (Grob *stem = unsmob<Grob> (a->get_object ("stem")))
Side_position_interface::add_support (a, stem);
a->set_parent (note_head, X_AXIS);
{
// Don't mark accidentals as "tied" when the pitch is not
// actually the same. This is relevant for enharmonic ties.
- Stream_event *le = Stream_event::unsmob (l->get_property ("cause"));
- Stream_event *re = Stream_event::unsmob (r->get_property ("cause"));
+ Stream_event *le = unsmob<Stream_event> (l->get_property ("cause"));
+ Stream_event *re = unsmob<Stream_event> (r->get_property ("cause"));
if (le && re
&& !ly_is_equal (le->get_property ("pitch"), re->get_property ("pitch")))
continue;
int barnum = measure_number (origin);
- Pitch *pitch = Pitch::unsmob (note->get_property ("pitch"));
+ Pitch *pitch = unsmob<Pitch> (note->get_property ("pitch"));
if (!pitch)
continue;
SCM key = scm_cons (scm_from_int (o), scm_from_int (n));
Moment end_mp = measure_position (context (),
- Duration::unsmob (note->get_property ("duration")));
+ unsmob<Duration> (note->get_property ("duration")));
SCM position = scm_cons (scm_from_int (barnum), end_mp.smobbed_copy ());
SCM localsig = SCM_EOL;
{
SCM cause = acc->get_parent (Y_AXIS)->get_property ("cause");
- Stream_event *mcause = Stream_event::unsmob (cause);
+ Stream_event *mcause = unsmob<Stream_event> (cause);
if (!mcause)
{
programming_error ("note head has no event cause");
return 0;
}
- return Pitch::unsmob (mcause->get_property ("pitch"));
+ return unsmob<Pitch> (mcause->get_property ("pitch"));
}
void
acs = scm_cdr (acs))
for (SCM s = scm_cdar (acs); scm_is_pair (s); s = scm_cdr (s))
{
- Grob *a = Grob::unsmob (scm_car (s));
+ Grob *a = unsmob<Grob> (scm_car (s));
- if (Grob::is_smob (a->get_object ("tie"))
+ if (unsmob<Grob> (a->get_object ("tie"))
&& !to_boolean (a->get_property ("forced")))
break_reminder->push_back (a);
else
Accidental_placement_entry *ape = new Accidental_placement_entry;
for (SCM t = scm_cdar (s); scm_is_pair (t); t = scm_cdr (t))
- ape->grobs_.push_back (Grob::unsmob (scm_car (t)));
+ ape->grobs_.push_back (unsmob<Grob> (scm_car (t)));
apes.push_back (ape);
}
offset -= a->extent (a, X_AXIS).length () + padding;
}
- if (Skyline_pair *sky = Skyline_pair::unsmob (a->get_property ("horizontal-skylines")))
+ if (Skyline_pair *sky = unsmob<Skyline_pair> (a->get_property ("horizontal-skylines")))
{
Skyline_pair copy (*sky);
copy.raise (a->relative_coordinate (common[X_AXIS], X_AXIS));
SCM
Accidental_placement::calc_positioning_done (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
if (!me->is_live ())
return SCM_BOOL_T;
SCM
Accidental_interface::horizontal_skylines (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
if (!me->is_live ())
return Skyline_pair ().smobbed_copy ();
- Stencil *my_stencil = Stencil::unsmob (me->get_property ("stencil"));
+ Stencil *my_stencil = unsmob<Stencil> (me->get_property ("stencil"));
if (!my_stencil)
return Skyline_pair ().smobbed_copy ();
Skyline_pair *sky =
- Skyline_pair::unsmob
+ unsmob<Skyline_pair>
(Stencil::skylines_from_stencil
(my_stencil->smobbed_copy (), 0.0, Y_AXIS));
SCM
Accidental_interface::height (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
- Grob *tie = Grob::unsmob (me->get_object ("tie"));
+ Grob *me = unsmob<Grob> (smob);
+ Grob *tie = unsmob<Grob> (me->get_object ("tie"));
if (tie
&& !to_boolean (me->get_property ("forced"))
SCM
Accidental_interface::remove_tied (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
- Grob *tie = Grob::unsmob (me->get_object ("tie"));
+ Grob *me = unsmob<Grob> (smob);
+ Grob *tie = unsmob<Grob> (me->get_object ("tie"));
if (tie
&& !to_boolean (me->get_property ("forced"))
SCM
Accidental_interface::print (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return get_stencil (me);
}
SCM
Align_interface::align_to_minimum_distances (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
me->set_property ("positioning-done", SCM_BOOL_T);
SCM
Align_interface::align_to_ideal_distances (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
me->set_property ("positioning-done", SCM_BOOL_T);
if (!pure)
{
- Skyline_pair *skys = Skyline_pair::unsmob (g->get_property (a == Y_AXIS
+ Skyline_pair *skys = unsmob<Skyline_pair> (g->get_property (a == Y_AXIS
? "vertical-skylines"
: "horizontal-skylines"));
if (skys)
Align_interface::set_ordered (Grob *me)
{
SCM ga_scm = me->get_object ("elements");
- Grob_array *ga = Grob_array::unsmob (ga_scm);
+ Grob_array *ga = unsmob<Grob_array> (ga_scm);
if (!ga)
{
ga_scm = Grob_array::make_array ();
- ga = Grob_array::unsmob (ga_scm);
+ ga = unsmob<Grob_array> (ga_scm);
me->set_object ("elements", ga_scm);
}
#include "all-font-metrics.hh"
#include "main.hh"
+#include "protected-scm.hh"
+
+All_font_metrics *all_fonts_global = 0;
+Protected_scm all_fonts_global_scm;
LY_DEFINE (ly_reset_all_fonts, "ly:reset-all-fonts", 0, 0, 0,
(),
"Forget all about previously loaded fonts.")
{
- delete all_fonts_global;
all_fonts_global = new All_font_metrics (global_path.to_string ());
+ all_fonts_global_scm = all_fonts_global->unprotect ();
return SCM_UNSPECIFIED;
}
All_font_metrics::All_font_metrics (const string &path)
{
+#if HAVE_PANGO_FT2
+ pango_dict_ = new Scheme_hash_table;
+#endif
+
otf_dict_ = new Scheme_hash_table;
+ smobify_self ();
+ otf_dict_->unprotect ();
#if HAVE_PANGO_FT2
+ pango_dict_->unprotect ();
PangoFontMap *pfm = pango_ft2_font_map_new ();
pango_ft2_fontmap_ = PANGO_FT2_FONT_MAP (pfm);
pango_dpi_ = PANGO_RESOLUTION;
pango_ft2_font_map_set_resolution (pango_ft2_fontmap_,
pango_dpi_, pango_dpi_);
-
- pango_dict_ = new Scheme_hash_table;
#endif
search_path_.parse_path (path);
All_font_metrics::~All_font_metrics ()
{
- otf_dict_->unprotect ();
-
#if HAVE_PANGO_FT2
- pango_dict_->unprotect ();
g_object_unref (pango_ft2_fontmap_);
#endif
}
-All_font_metrics::All_font_metrics (All_font_metrics const &)
+SCM
+All_font_metrics::mark_smob ()
{
+#if HAVE_PANGO_FT2
+ if (pango_dict_)
+ scm_gc_mark (pango_dict_->self_scm ());
+#endif
+ if (otf_dict_)
+ return otf_dict_->self_scm ();
+ return SCM_UNDEFINED;
}
#if HAVE_PANGO_FT2
scm_from_double (1.0));
}
g_free (pango_fn);
- return derived_unsmob<Pango_font> (val);
+ return unsmob<Pango_font> (val);
}
#endif
debug_output ("]", false);
- Font_metric::unsmob (val)->file_name_ = file_name;
+ unsmob<Font_metric> (val)->file_name_ = file_name;
SCM name_string = ly_string2scm (name);
- Font_metric::unsmob (val)->description_ = scm_cons (name_string,
+ unsmob<Font_metric> (val)->description_ = scm_cons (name_string,
scm_from_double (1.0));
otf_dict_->set (sname, val);
- Font_metric::unsmob (val)->unprotect ();
+ unsmob<Font_metric> (val)->unprotect ();
}
- return derived_unsmob<Open_type_font> (val);
+ return unsmob<Open_type_font> (val);
}
Font_metric *
return f;
}
-
-All_font_metrics *all_fonts_global;
If the engraver is added to a percussion context,
filter out unpitched note heads.
*/
- if (!Pitch::is_smob (p))
+ if (!unsmob<Pitch> (p))
return;
- Pitch pitch = *Pitch::unsmob (p);
+ Pitch pitch = *unsmob<Pitch> (p);
Drul_array<bool> expands = pitch_interval_.add_point (pitch);
if (expands[UP])
causes_[UP] = nr;
SCM
Arpeggio::calc_cross_staff (SCM grob)
{
- Grob *me = Grob::unsmob (grob);
+ Grob *me = unsmob<Grob> (grob);
extract_grob_set (me, "stems", stems);
Grob *vag = 0;
SCM
Arpeggio::calc_positions (SCM grob)
{
- Grob *me = Grob::unsmob (grob);
+ Grob *me = unsmob<Grob> (grob);
Grob *common = get_common_y (me);
/*
SCM
Arpeggio::print (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Interval heads = robust_scm2interval (me->get_property ("positions"),
Interval ())
* Staff_symbol_referencer::staff_space (me);
SCM
Arpeggio::brew_chord_bracket (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Interval heads = robust_scm2interval (me->get_property ("positions"),
Interval ())
* Staff_symbol_referencer::staff_space (me);
SCM
Arpeggio::brew_chord_slur (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
SCM dash_definition = me->get_property ("dash-definition");
Interval heads = robust_scm2interval (me->get_property ("positions"),
Interval ())
SCM
Arpeggio::width (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return ly_interval2scm (get_squiggle (me).extent (X_AXIS));
}
SCM
Arpeggio::pure_height (SCM smob, SCM, SCM)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
if (to_boolean (me->get_property ("cross-staff")))
return ly_interval2scm (Interval ());
for (SCM s = event->get_property ("articulations");
!articulation_event && scm_is_pair (s); s = scm_cdr (s))
{
- Stream_event *art = Stream_event::unsmob (scm_car (s));
+ Stream_event *art = unsmob<Stream_event> (scm_car (s));
if (art->in_event_class (articulation_name))
articulation_event = art;
return;
}
- int durlog = Duration::unsmob (ev->get_property ("duration"))->duration_log ();
+ int durlog = unsmob<Duration> (ev->get_property ("duration"))->duration_log ();
if (durlog <= 2)
{
if (!is_same_grace_state (beam_start_location_, now))
return;
- Duration *stem_duration = Duration::unsmob (ev->get_property ("duration"));
+ Duration *stem_duration = unsmob<Duration> (ev->get_property ("duration"));
Moment dur = stem_duration->get_length ();
- //Moment dur = Duration::unsmob (ev->get_property ("duration"))->get_length ();
+ //Moment dur = unsmob<Duration> (ev->get_property ("duration"))->get_length ();
Moment measure_now = measure_position (context ());
bool recheck_needed = false;
for (; scm_is_pair (split_list_); split_list_ = scm_cdr (split_list_))
{
- splitm = Moment::unsmob (scm_caar (split_list_));
+ splitm = unsmob<Moment> (scm_caar (split_list_));
if ((*splitm + start_moment_) > now)
break;
if (!staffline_ && active_)
{
staffline_ = get_spanner ();
- Grob *it = Grob::unsmob (get_property ("currentCommandColumn"));
+ Grob *it = unsmob<Grob> (get_property ("currentCommandColumn"));
staffline_->set_bound (LEFT, it);
}
interesting_ = get_property ("keepAliveInterfaces");
{
if (staffline_)
{
- Grob *it = Grob::unsmob (get_property ("currentCommandColumn"));
+ Grob *it = unsmob<Grob> (get_property ("currentCommandColumn"));
staffline_->set_bound (RIGHT, it);
Pointer_group_interface::set_ordered (staffline_, ly_symbol2scm ("elements"), false);
for (vsize i = 0; i < elts_.size (); i++)
{
- if (!Grob::is_smob (elts_[i]->get_object ("axis-group-parent-Y")))
+ if (!unsmob<Grob> (elts_[i]->get_object ("axis-group-parent-Y")))
{
if (staffline_->get_parent (Y_AXIS)
&& staffline_->get_parent (Y_AXIS) == elts_[i])
"Determine the extent of @var{elements} relative to @var{common} in the"
" @var{axis} direction.")
{
- Grob_array *ga = Grob_array::unsmob (elements);
+ Grob_array *ga = unsmob<Grob_array> (elements);
SCM_ASSERT_TYPE (ga || scm_is_pair (elements), elements, SCM_ARG1, __FUNCTION__, "list or Grob_array");
LY_ASSERT_SMOB (Grob, common, 2);
if (!ga)
{
for (SCM s = elements; scm_is_pair (s); s = scm_cdr (s))
- elts.push_back (Grob::unsmob (scm_car (s)));
+ elts.push_back (unsmob<Grob> (scm_car (s)));
}
Interval ext = Axis_group_interface::relative_group_extent (ga ? ga->array () : elts,
- Grob::unsmob (common),
+ unsmob<Grob> (common),
(Axis) scm_to_int (axis));
return ly_interval2scm (ext);
}
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_SMOB (Grob, common, 2);
- Interval ext = Axis_group_interface::generic_bound_extent (Grob::unsmob (grob), Grob::unsmob (common), X_AXIS);
+ Interval ext = Axis_group_interface::generic_bound_extent (unsmob<Grob> (grob), unsmob<Grob> (common), X_AXIS);
return ly_interval2scm (ext);
}
{
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_SMOB (Grob, grob_element, 2);
- Axis_group_interface::add_element (Grob::unsmob (grob), Grob::unsmob (grob_element));
+ Axis_group_interface::add_element (unsmob<Grob> (grob), unsmob<Grob> (grob_element));
return SCM_UNSPECIFIED;
}
SCM
Axis_group_interface::adjacent_pure_heights (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
- Grob *common = Grob::unsmob (me->get_object ("pure-Y-common"));
+ Grob *common = unsmob<Grob> (me->get_object ("pure-Y-common"));
extract_grob_set (me, "pure-relevant-grobs", elts);
Paper_score *ps = get_root_system (me)->paper_score ();
if (p && Align_interface::has_interface (p))
return Axis_group_interface::sum_partial_pure_heights (me, start, end);
- Grob *common = Grob::unsmob (me->get_object ("pure-Y-common"));
+ Grob *common = unsmob<Grob> (me->get_object ("pure-Y-common"));
extract_grob_set (me, "pure-relevant-grobs", elts);
Interval r;
SCM
Axis_group_interface::width (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return generic_group_extent (me, X_AXIS);
}
SCM
Axis_group_interface::height (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return generic_group_extent (me, Y_AXIS);
}
{
int start = robust_scm2int (start_scm, 0);
int end = robust_scm2int (end_scm, INT_MAX);
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
/* Maybe we are in the second pass of a two-pass spacing run. In that
case, the Y-extent of a system is already given to us */
SCM
Axis_group_interface::calc_skylines (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Skyline_pair skylines = skyline_spacing (me);
return skylines.smobbed_copy ();
}
SCM
Axis_group_interface::combine_skylines (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "elements", elements);
Grob *y_common = common_refpoint_of_array (elements, me, Y_AXIS);
Grob *x_common = common_refpoint_of_array (elements, me, X_AXIS);
for (vsize i = 0; i < elements.size (); i++)
{
SCM skyline_scm = elements[i]->get_property ("vertical-skylines");
- if (Skyline_pair::is_smob (skyline_scm))
+ if (unsmob<Skyline_pair> (skyline_scm))
{
Real offset = elements[i]->relative_coordinate (y_common, Y_AXIS);
- Skyline_pair other = *Skyline_pair::unsmob (skyline_scm);
+ Skyline_pair other = *unsmob<Skyline_pair> (skyline_scm);
other.raise (offset);
other.shift (elements[i]->relative_coordinate (x_common, X_AXIS));
ret.merge (other);
SCM
Axis_group_interface::calc_pure_relevant_grobs (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
/* TODO: Filter out elements that belong to a different Axis_group,
such as the tie in
<< \new Staff=A { c'1~ \change Staff=B c'}
vector_sort (relevant_grobs, pure_staff_priority_less);
SCM grobs_scm = Grob_array::make_array ();
- Grob_array::unsmob (grobs_scm)->set_array (relevant_grobs);
+ unsmob<Grob_array> (grobs_scm)->set_array (relevant_grobs);
return grobs_scm;
}
SCM
Axis_group_interface::calc_pure_y_common (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "pure-relevant-grobs", elts);
Grob *common = common_refpoint_of_array (elts, me, Y_AXIS);
SCM
Axis_group_interface::calc_x_common (SCM grob)
{
- return calc_common (Grob::unsmob (grob), X_AXIS);
+ return calc_common (unsmob<Grob> (grob), X_AXIS);
}
MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_y_common, 1);
SCM
Axis_group_interface::calc_y_common (SCM grob)
{
- return calc_common (Grob::unsmob (grob), Y_AXIS);
+ return calc_common (unsmob<Grob> (grob), Y_AXIS);
}
Interval
Axis_group_interface::pure_group_height (Grob *me, int start, int end)
{
- Grob *common = Grob::unsmob (me->get_object ("pure-Y-common"));
+ Grob *common = unsmob<Grob> (me->get_object ("pure-Y-common"));
if (!common)
{
static void
add_interior_skylines (Grob *me, Grob *x_common, Grob *y_common, vector<Skyline_pair> *skylines)
{
- if (Grob_array *elements = Grob_array::unsmob (me->get_object ("elements")))
+ if (Grob_array *elements = unsmob<Grob_array> (me->get_object ("elements")))
{
for (vsize i = 0; i < elements->size (); i++)
add_interior_skylines (elements->grob (i), x_common, y_common, skylines);
else if (!scm_is_number (me->get_property ("outside-staff-priority"))
&& !to_boolean (me->get_property ("cross-staff")))
{
- Skyline_pair *maybe_pair = Skyline_pair::unsmob (me->get_property ("vertical-skylines"));
+ Skyline_pair *maybe_pair = unsmob<Skyline_pair> (me->get_property ("vertical-skylines"));
if (!maybe_pair)
return;
if (maybe_pair->is_empty ())
}
last_end[dir] = x_extent[RIGHT];
- Skyline_pair *v_orig = Skyline_pair::unsmob (elt->get_property ("vertical-skylines"));
+ Skyline_pair *v_orig = unsmob<Skyline_pair> (elt->get_property ("vertical-skylines"));
if (v_orig->is_empty ())
continue;
for (GrobMapIterator j = range.first; j != range.second; j++)
{
Grob *rider = j->second;
- Skyline_pair *v_rider = Skyline_pair::unsmob (rider->get_property ("vertical-skylines"));
+ Skyline_pair *v_rider = unsmob<Skyline_pair> (rider->get_property ("vertical-skylines"));
if (v_rider)
{
Skyline_pair copy (*v_rider);
Skyline_pair
Axis_group_interface::skyline_spacing (Grob *me)
{
- extract_grob_set (me, Grob_array::unsmob (me->get_object ("vertical-skyline-elements")) ? "vertical-skyline-elements" : "elements", fakeelements);
+ extract_grob_set (me, unsmob<Grob_array> (me->get_object ("vertical-skyline-elements")) ? "vertical-skyline-elements" : "elements", fakeelements);
vector<Grob *> elements (fakeelements);
for (vsize i = 0; i < elements.size (); i++)
/*
if (!debug_skylines)
return SCM_BOOL_F;
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Stencil ret;
- if (Skyline_pair *s = Skyline_pair::unsmob (me->get_property ("vertical-skylines")))
+ if (Skyline_pair *s = unsmob<Skyline_pair> (me->get_property ("vertical-skylines")))
{
ret.add_stencil (Lookup::points_to_line_stencil (0.1, (*s)[UP].to_points (X_AXIS))
.in_color (255, 0, 255));
SCM
Axis_group_interface::calc_pure_staff_staff_spacing (SCM smob, SCM start, SCM end)
{
- return calc_maybe_pure_staff_staff_spacing (Grob::unsmob (smob),
+ return calc_maybe_pure_staff_staff_spacing (unsmob<Grob> (smob),
true,
scm_to_int (start),
scm_to_int (end));
SCM
Axis_group_interface::calc_staff_staff_spacing (SCM smob)
{
- return calc_maybe_pure_staff_staff_spacing (Grob::unsmob (smob),
+ return calc_maybe_pure_staff_staff_spacing (unsmob<Grob> (smob),
false,
0,
INT_MAX);
SCM
Axis_group_interface::calc_maybe_pure_staff_staff_spacing (Grob *me, bool pure, int start, int end)
{
- Grob *grouper = Grob::unsmob (me->get_object ("staff-grouper"));
+ Grob *grouper = unsmob<Grob> (me->get_object ("staff-grouper"));
if (grouper)
{
SCM arts = cause ? cause->get_property ("articulations") : SCM_EOL;
for (SCM s = arts; scm_is_pair (s); s = scm_cdr (s))
{
- Stream_event *e = Stream_event::unsmob (scm_car (s));
+ Stream_event *e = unsmob<Stream_event> (scm_car (s));
if (e->in_event_class ("annotate-output-event"))
{
balloonify (info.grob (), e);
SCM
Balloon_interface::print (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
if (Item *item = dynamic_cast<Item *> (me))
if (!Item::break_visible (item))
SCM
Balloon_interface::print_spanner (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
Spanner *orig = dynamic_cast<Spanner *> (me->original ());
if (orig)
SCM chain = Font_interface::text_font_alist_chain (me);
SCM stencil = Text_interface::interpret_markup (me->layout ()->self_scm (),
chain, bt);
- Stencil *text_stil = Stencil::unsmob (stencil);
+ Stencil *text_stil = unsmob<Stencil> (stencil);
Offset z1;
SCM mp = tr->get_property ("measurePosition");
SCM sync = tr->get_property ("barCheckSynchronize");
- Moment *where = Moment::unsmob (mp);
+ Moment *where = unsmob<Moment> (mp);
if (!where)
return;
else
{
SCM lf = tr->get_property ("barCheckLastFail");
- if (Moment::is_smob (lf)
- && *Moment::unsmob (lf) == *where)
+ if (unsmob<Moment> (lf)
+ && *unsmob<Moment> (lf) == *where)
warn = false;
else
tr->set_property ("barCheckLastFail", mp);
{
// Do not consider note heads attached to the beam.
if (Stem::has_interface (covered_grob))
- if (Grob::is_smob (covered_grob->get_object ("beam")))
+ if (unsmob<Grob> (covered_grob->get_object ("beam")))
continue;
- if (Grob *stem = Grob::unsmob (covered_grob->get_object ("stem")))
- if (Grob *beam = Grob::unsmob (stem->get_object ("beam")))
+ if (Grob *stem = unsmob<Grob> (covered_grob->get_object ("stem")))
+ if (Grob *beam = unsmob<Grob> (stem->get_object ("beam")))
if (beam == beam_grob)
continue;
last_stem_added_at_ = now;
- Duration *stem_duration = Duration::unsmob (ev->get_property ("duration"));
+ Duration *stem_duration = unsmob<Duration> (ev->get_property ("duration"));
int durlog = stem_duration->duration_log ();
- //int durlog = Duration::unsmob (ev->get_property ("duration"))->duration_log ();
+ //int durlog = unsmob<Duration> (ev->get_property ("duration"))->duration_log ();
if (durlog <= 2)
{
ev->origin ()->warning (_ ("stem does not fit in beam"));
#include "stencil.hh"
#include "stem.hh"
#include "warn.hh"
+#include "string-convert.hh"
Real
get_detail (SCM alist, SCM sym, Real def)
REGION_SIZE = get_detail (details, ly_symbol2scm ("region-size"), 2);
// forbidden quants
- SECONDARY_BEAM_DEMERIT = get_detail (details, ly_symbol2scm ("secondary-beam-demerit"), 10.0);
+ SECONDARY_BEAM_DEMERIT = get_detail (details, ly_symbol2scm ("secondary-beam-demerit"), 10.0)
+ // For stems that are non-standard, the forbidden beam quanting
+ // doesn't really work, so decrease their importance.
+ * exp(- 8*fabs (1.0 - robust_scm2double(him->get_property ("length-fraction"), 1.0)));
STEM_LENGTH_DEMERIT_FACTOR = get_detail (details, ly_symbol2scm ("stem-length-demerit-factor"), 5);
HORIZONTAL_INTER_QUANT_PENALTY = get_detail (details, ly_symbol2scm ("horizontal-inter-quant"), 500);
// Collisions
COLLISION_PENALTY = get_detail (details, ly_symbol2scm ("collision-penalty"), 500);
- COLLISION_PADDING = get_detail (details, ly_symbol2scm ("collision-padding"), 0.5);
+
+ /* For grace notes, beams get scaled down to 80%, but glyphs go down
+ to 63% (magstep -4 for accidentals). To make the padding
+ commensurate with glyph size for grace notes, we take the square
+ of the length fraction, yielding a 64% decrease.
+ */
+ COLLISION_PADDING = get_detail (details, ly_symbol2scm ("collision-padding"), 0.5)
+ * sqr (robust_scm2double(him->get_property ("length-fraction"), 1.0));
STEM_COLLISION_FACTOR = get_detail (details, ly_symbol2scm ("stem-collision-factor"), 0.1);
}
for (LEFT_and_RIGHT (d))
add_collision (b[X_AXIS][d], b[Y_AXIS], width_factor);
- Grob *stem = Grob::unsmob (collisions[j]->get_object ("stem"));
+ Grob *stem = unsmob<Grob> (collisions[j]->get_object ("stem"));
if (stem && Stem::has_interface (stem) && Stem::is_normal_stem (stem))
{
colliding_stems.insert (stem);
- my_y;
Real factor = parameters_.STEM_COLLISION_FACTOR;
- if (!Grob::is_smob (s->get_object ("beam")))
+ if (!unsmob<Grob> (s->get_object ("beam")))
factor = 1.0;
add_collision (x, y, factor);
}
{
Real dy = config->y.delta ();
- Real extra_demerit = parameters_.SECONDARY_BEAM_DEMERIT
- / max (edge_beam_counts_[LEFT], edge_beam_counts_[RIGHT]);
-
+ Real extra_demerit =
+ parameters_.SECONDARY_BEAM_DEMERIT
+ / max (edge_beam_counts_[LEFT], edge_beam_counts_[RIGHT]);
+
Real dem = 0.0;
Real eps = parameters_.BEAM_EPS;
Direction stem_dir = edge_dirs_[d];
/*
- The 2.2 factor is to provide a little leniency for
+ The fudge_factor is to provide a little leniency for
borderline cases. If we do 2.0, then the upper outer line
will be in the gap of the (2, sit) quant, leading to a
- false demerit.
+ false demerit. By increasing the fudge factor to 2.2, we
+ fix this case.
*/
- Real gap1 = config->y[d] - stem_dir * ((j - 1) * beam_translation_ + beam_thickness_ / 2 - line_thickness_ / 2.2);
- Real gap2 = config->y[d] - stem_dir * (j * beam_translation_ - beam_thickness_ / 2 + line_thickness_ / 2.2);
+ Real fudge_factor = 2.2;
+ Real gap1 = config->y[d] - stem_dir * ((j - 1) * beam_translation_ + beam_thickness_ / 2 - line_thickness_ / fudge_factor);
+ Real gap2 = config->y[d] - stem_dir * (j * beam_translation_ - beam_thickness_ / 2 + line_thickness_ / fudge_factor);
Interval gap;
gap.add_point (gap1);
}
}
+ config->add (dem, "Fl");
+ dem = 0.0;
if (max (edge_beam_counts_[LEFT], edge_beam_counts_[RIGHT]) >= 2)
{
Real straddle = 0.0;
}
}
- config->add (dem, "F");
+ config->add (dem, "Fs");
}
void
Real dist = infinity_f;
if (!intersection (beam_y, collision_y).is_empty ())
dist = 0.0;
- else
+ else
dist = min (beam_y.distance (collision_y[DOWN]),
beam_y.distance (collision_y[UP]));
+
Real scale_free
= max (parameters_.COLLISION_PADDING - dist, 0.0)
/ parameters_.COLLISION_PADDING;
- demerits
- += collisions_[i].base_penalty_ *
+ Real collision_demerit = collisions_[i].base_penalty_ *
pow (scale_free, 3) * parameters_.COLLISION_PENALTY;
+
+ if (collision_demerit > 0) {
+ demerits += collision_demerit;
+ }
}
config->add (demerits, "C");
Real beam_thickness = get_beam_thickness (me);
Real fract = robust_scm2double (me->get_property ("length-fraction"), 1.0);
- Real beam_translation = beam_count < 4
- ? (2 * staff_space + line - beam_thickness) / 2.0
- : (3 * staff_space + line - beam_thickness) / 3.0;
-
- return fract * beam_translation;
+ /*
+ if fract != 1.0, as is the case for grace notes, we want the gap
+ to decrease too. To achieve this, we divide the thickness by
+ fract */
+ return (beam_count < 4
+ ? (2 * staff_space * fract + line * fract - beam_thickness) / 2.0
+ : (3 * staff_space * fract + line * fract - beam_thickness) / 3.0);
}
/* Maximum beam_count. */
SCM
Beam::calc_normal_stems (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "stems", stems);
SCM val = Grob_array::make_array ();
- Grob_array *ga = Grob_array::unsmob (val);
+ Grob_array *ga = unsmob<Grob_array> (val);
for (vsize i = 0; i < stems.size (); i++)
if (Stem::is_normal_stem (stems[i]))
ga->add (stems[i]);
SCM
Beam::calc_direction (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
/* Beams with less than 2 two stems don't make much sense, but could happen
when you do
SCM
Beam::calc_beaming (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "stems", stems);
{
/* ugh, this has a side-effect that we need to ensure that
Stem #'beaming is correct */
- Grob *me_grob = Grob::unsmob (smob);
+ Grob *me_grob = unsmob<Grob> (smob);
(void) me_grob->get_property ("beaming");
Spanner *me = dynamic_cast<Spanner *> (me_grob);
SCM
Beam::calc_x_positions (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
SCM segments = me->get_property ("beam-segments");
Interval x_positions;
x_positions.set_empty ();
SCM
Beam::print (SCM grob)
{
- Spanner *me = Spanner::unsmob (grob);
+ Spanner *me = unsmob<Spanner> (grob);
/*
TODO - mild code dup for all the commonx calls.
Some use just common_refpoint_of_array, some (in print and
Direction stem_dir = stems.size () ? to_dir (stems[0]->get_property ("direction")) : UP;
- Stencil score = *Stencil::unsmob (Text_interface::interpret_markup
+ Stencil score = *unsmob<Stencil> (Text_interface::interpret_markup
(me->layout ()->self_scm (), properties, annotation));
if (!score.is_empty ())
SCM
Beam::calc_stem_shorten (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
/*
shortening looks silly for x staff beams
SCM
Beam::quanting (SCM smob, SCM ys_scm, SCM align_broken_intos)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Drul_array<Real> ys = robust_scm2drul (ys_scm, Drul_array<Real> (infinity_f, -infinity_f));
bool cbs = to_boolean (align_broken_intos);
SCM
Beam::set_stem_lengths (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
/* trigger callbacks. */
(void) me->get_property ("direction");
SCM
Beam::rest_collision_callback (SCM smob, SCM prev_offset)
{
- Grob *rest = Grob::unsmob (smob);
+ Grob *rest = unsmob<Grob> (smob);
if (scm_is_number (rest->get_property ("staff-position")))
return scm_from_int (0);
Real offset = robust_scm2double (prev_offset, 0.0);
- Grob *st = Grob::unsmob (rest->get_object ("stem"));
+ Grob *st = unsmob<Grob> (rest->get_object ("stem"));
Grob *stem = st;
if (!stem)
return scm_from_double (0.0);
- Grob *beam = Grob::unsmob (stem->get_object ("beam"));
+ Grob *beam = unsmob<Grob> (stem->get_object ("beam"));
if (!beam
|| !Beam::has_interface (beam)
|| !Beam::normal_stem_count (beam))
{
Real previous = robust_scm2double (prev_offset, 0.0);
- Grob *me = Grob::unsmob (smob);
- Grob *stem = Grob::unsmob (me->get_object ("stem"));
+ Grob *me = unsmob<Grob> (smob);
+ Grob *stem = unsmob<Grob> (me->get_object ("stem"));
if (!stem)
return scm_from_double (previous);
- Grob *beam = Grob::unsmob (stem->get_object ("beam"));
+ Grob *beam = unsmob<Grob> (stem->get_object ("beam"));
if (!beam
|| !Beam::normal_stem_count (beam)
|| !is_direction (beam->get_property_data ("direction")))
SCM
Beam::calc_cross_staff (SCM smob)
{
- return scm_from_bool (is_cross_staff (Grob::unsmob (smob)));
+ return scm_from_bool (is_cross_staff (unsmob<Grob> (smob)));
}
int
if (infos_.size () <= 1)
return;
+ int subdivide_beam_count = intlog2(options.base_moment_.main_part_.den())-2;
+
unbeam_invisible_stems ();
if (infos_[0].start_moment_.grace_part_)
if (non_flag_dir)
{
int importance = infos_[i + 1].rhythmic_importance_;
- int start_dur = intlog2(infos_[i+1].start_moment_.main_part_.den());
int count = (importance < 0 && options.subdivide_beams_)
- ? max(start_dur,3)-2 // 1/8 note has one beam
+ ? subdivide_beam_count
: min (min (infos_[i].count (non_flag_dir),
infos_[i + non_flag_dir].count (-non_flag_dir)),
infos_[i - non_flag_dir].count (non_flag_dir));
// We shouldn't end a spanner on the last musical column of a piece because then
// it would extend past the last breakable column of the piece.
if (last_fall_)
- last_fall_->set_bound (RIGHT, Grob::unsmob (get_property ("currentCommandColumn")));
+ last_fall_->set_bound (RIGHT, unsmob<Grob> (get_property ("currentCommandColumn")));
}
void
{
bool bar = scm_is_string (get_property ("whichBar"));
- fall_->set_bound (RIGHT, Grob::unsmob (bar
+ fall_->set_bound (RIGHT, unsmob<Grob> (bar
? get_property ("currentCommandColumn")
: get_property ("currentMusicalColumn")));
last_fall_ = fall_;
"Make a @code{\\book} of @var{paper} and @var{header}"
" (which may be @code{#f} as well) containing @code{\\scores}.")
{
- Output_def *odef = Output_def::unsmob (paper);
+ Output_def *odef = unsmob<Output_def> (paper);
LY_ASSERT_SMOB (Output_def, paper, 1);
Book *book = new Book;
" For example, it may be a string (for file based outputs)"
" or a socket (for network based output).")
{
- Book *book = Book::unsmob (book_smob);
+ Book *book = unsmob<Book> (book_smob);
LY_ASSERT_SMOB (Book, book_smob, 1);
LY_ASSERT_SMOB (Output_def, default_paper, 2);
LY_ASSERT_SMOB (Output_def, default_layout, 3);
- Paper_book *pb = book->process (Output_def::unsmob (default_paper),
- Output_def::unsmob (default_layout));
+ Paper_book *pb = book->process (unsmob<Output_def> (default_paper),
+ unsmob<Output_def> (default_layout));
if (pb)
{
pb->output (output);
LY_ASSERT_SMOB (Output_def, default_paper, 2);
LY_ASSERT_SMOB (Output_def, default_layout, 3);
- Book *book = Book::unsmob (book_smob);
+ Book *book = unsmob<Book> (book_smob);
- Paper_book *pb = book->process (Output_def::unsmob (default_paper),
- Output_def::unsmob (default_layout));
+ Paper_book *pb = book->process (unsmob<Output_def> (default_paper),
+ unsmob<Output_def> (default_layout));
if (pb)
{
pb->classic_output (output);
"Add @var{score} to @var{book-smob} score list.")
{
LY_ASSERT_SMOB (Book, book_smob, 1);
- Book *book = Book::unsmob (book_smob);
+ Book *book = unsmob<Book> (book_smob);
book->add_score (score);
return SCM_UNSPECIFIED;
}
"Add @var{book-part} to @var{book-smob} book part list.")
{
LY_ASSERT_SMOB (Book, book_smob, 1);
- Book *book = Book::unsmob (book_smob);
+ Book *book = unsmob<Book> (book_smob);
book->add_bookpart (book_part);
return SCM_UNSPECIFIED;
}
"Return book parts in @var{book}.")
{
LY_ASSERT_SMOB (Book, book, 1);
- Book *b = Book::unsmob (book);
+ Book *b = unsmob<Book> (book);
return b->bookparts_;
}
"Return paper in @var{book}.")
{
LY_ASSERT_SMOB (Book, book, 1);
- Book *b = Book::unsmob (book);
+ Book *b = unsmob<Book> (book);
return b->paper_ ? b->paper_->self_scm () : SCM_BOOL_F;
}
"Return header in @var{book}.")
{
LY_ASSERT_SMOB (Book, book, 1);
- Book *b = Book::unsmob (book);
+ Book *b = unsmob<Book> (book);
return b->header_ ? b->header_ : SCM_BOOL_F;
}
SCM_ASSERT_TYPE (ly_is_module (module), module, SCM_ARG2, __FUNCTION__,
"module");
- Book *b = Book::unsmob (book);
+ Book *b = unsmob<Book> (book);
b->header_ = (module);
return SCM_UNSPECIFIED;
}
"Return scores in @var{book}.")
{
LY_ASSERT_SMOB (Book, book, 1);
- Book *b = Book::unsmob (book);
+ Book *b = unsmob<Book> (book);
return b->scores_;
}
{
SCM entry = scm_car (p);
- if (Score *newscore = Score::unsmob (entry))
+ if (Score *newscore = unsmob<Score> (entry))
* t = scm_cons (newscore->clone ()->unprotect (), SCM_EOL);
- else if (Page_marker *marker = Page_marker::unsmob (entry))
+ else if (Page_marker *marker = unsmob<Page_marker> (entry))
* t = scm_cons (marker->clone ()->unprotect (), SCM_EOL);
else
{
t = &bookparts_;
for (SCM p = s.bookparts_; scm_is_pair (p); p = scm_cdr (p))
{
- Book *newpart = Book::unsmob (scm_car (p))->clone ();
+ Book *newpart = unsmob<Book> (scm_car (p))->clone ();
*t = scm_cons (newpart->self_scm (), SCM_EOL);
t = SCM_CDRLOC (*t);
Input *
Book::origin () const
{
- return Input::unsmob (input_location_);
+ return unsmob<Input> (input_location_);
}
Book::~Book ()
Book::add_bookpart (SCM b)
{
add_scores_to_bookpart ();
- Book *part = Book::unsmob (b);
+ Book *part = unsmob<Book> (b);
part->set_parent (this);
bookparts_ = scm_cons (b, bookparts_);
}
Book::error_found ()
{
for (SCM s = scores_; scm_is_pair (s); s = scm_cdr (s))
- if (Score *score = Score::unsmob (scm_car (s)))
+ if (Score *score = unsmob<Score> (scm_car (s)))
if (score->error_found_)
return true;
for (SCM part = bookparts_; scm_is_pair (part); part = scm_cdr (part))
- if (Book *bookpart = Book::unsmob (scm_car (part)))
+ if (Book *bookpart = unsmob<Book> (scm_car (part)))
if (bookpart->error_found ())
return true;
add_scores_to_bookpart ();
for (SCM p = scm_reverse (bookparts_); scm_is_pair (p); p = scm_cdr (p))
{
- if (Book *book = Book::unsmob (scm_car (p)))
+ if (Book *book = unsmob<Book> (scm_car (p)))
{
Paper_book *paper_book_part = book->process (paper, layout, output_paper_book);
if (paper_book_part)
void
Book::process_score (SCM s, Paper_book *output_paper_book, Output_def *layout)
{
- if (Score *score = Score::unsmob (scm_car (s)))
+ if (Score *score = unsmob<Score> (scm_car (s)))
{
SCM outputs = score
->book_rendering (output_paper_book->paper_, layout);
while (scm_is_pair (outputs))
{
- Music_output *output = Music_output::unsmob (scm_car (outputs));
+ Music_output *output = unsmob<Music_output> (scm_car (outputs));
if (Performance *perf = dynamic_cast<Performance *> (output))
output_paper_book->add_performance (perf->self_scm ());
}
}
else if (Text_interface::is_markup_list (scm_car (s))
- || Page_marker::is_smob (scm_car (s)))
+ || unsmob<Page_marker> (scm_car (s)))
output_paper_book->add_score (scm_car (s));
else
assert (0);
Context *origin = inf.origin_contexts (this)[0];
Translator_group *tg = origin->implementation ();
- Engraver *random_source = Engraver::unsmob (scm_car (tg->get_simple_trans_list ()));
+ Engraver *random_source = unsmob<Engraver> (scm_car (tg->get_simple_trans_list ()));
if (!random_source)
random_source = this;
if (scm_is_true (s))
{
- Grob *e = Grob::unsmob (scm_cdr (s));
+ Grob *e = unsmob<Grob> (scm_cdr (s));
group = dynamic_cast<Item *> (e);
}
else
SCM
Break_alignment_interface::calc_positioning_done (SCM smob)
{
- Grob *grob = Grob::unsmob (smob);
+ Grob *grob = unsmob<Grob> (smob);
Item *me = dynamic_cast<Item *> (grob);
me->set_property ("positioning-done", SCM_BOOL_T);
sym_string = ly_symbol2string (rsym);
string orig_string;
- if (Grob::is_smob (l->get_property ("cause")))
- orig_string = Grob::unsmob (l->get_property ("cause"))->name ();
+ if (unsmob<Grob> (l->get_property ("cause")))
+ orig_string = unsmob<Grob> (l->get_property ("cause"))->name ();
programming_error (to_string ("No spacing entry from %s to `%s'",
orig_string.c_str (),
SCM
Break_alignable_interface::self_align_callback (SCM grob)
{
- Grob *me = Grob::unsmob (grob);
+ Grob *me = unsmob<Grob> (grob);
Item *alignment = dynamic_cast<Item *> (me->get_parent (X_AXIS));
if (!Break_alignment_interface::has_interface (alignment))
return scm_from_int (0);
SCM
Break_aligned_interface::calc_average_anchor (SCM grob)
{
- Grob *me = Grob::unsmob (grob);
+ Grob *me = unsmob<Grob> (grob);
Real avg = 0.0;
int count = 0;
SCM
Break_aligned_interface::calc_extent_aligned_anchor (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real alignment = robust_scm2double (me->get_property ("break-align-anchor-alignment"), 0.0);
Interval iv = me->extent (me, X_AXIS);
Break_aligned_interface::calc_break_visibility (SCM smob)
{
/* a BreakAlignGroup is break-visible if it has one element that is break-visible */
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
SCM ret = scm_c_make_vector (3, SCM_EOL);
extract_grob_set (me, "elements", elts);
for (int dir = 0; dir <= 2; dir++)
else
{
System *line
- = derived_unsmob<System> (break_criterion);
+ = unsmob<System> (break_criterion);
if (sc->get_system () != line)
sc = sc->find_broken_piece (line);
{
again:
- if (Grob::is_smob (src))
+ if (unsmob<Grob> (src))
{
- Grob *new_ptr = substitute_grob (Grob::unsmob (src));
+ Grob *new_ptr = substitute_grob (unsmob<Grob> (src));
return new_ptr ? new_ptr->self_scm () : SCM_UNDEFINED;
}
else if (scm_is_vector (src))
set_break_subsititution (l ? l->self_scm () : SCM_UNDEFINED);
SCM newval = sc->internal_get_object (sym);
- if (!Grob_array::is_smob (newval))
+ if (!unsmob<Grob_array> (newval))
{
newval = Grob_array::make_array ();
sc->set_object (sym, newval);
}
- Grob_array *new_array = Grob_array::unsmob (newval);
+ Grob_array *new_array = unsmob<Grob_array> (newval);
for (int k = 0; k < 2; k++)
for (int j = (*arrs[k])[i][LEFT]; j <= (*arrs[k])[i][RIGHT]; j++)
{
SCM sym = scm_caar (s);
SCM val = scm_cdar (s);
- if (Grob_array *orig = Grob_array::unsmob (val))
+ if (Grob_array *orig = unsmob<Grob_array> (val))
{
SCM handle = scm_assq (sym, dest);
SCM newval
? scm_cdr (handle)
: Grob_array::make_array ();
- Grob_array *new_arr = Grob_array::unsmob (newval);
+ Grob_array *new_arr = unsmob<Grob_array> (newval);
substitute_grob_array (orig, new_arr);
val = newval;
Spanner *s = this;
bool fast_done = false;
- Grob_array *grob_array = Grob_array::unsmob (val);
+ Grob_array *grob_array = unsmob<Grob_array> (val);
if (grob_array)
fast_done = s->fast_substitute_grob_array (sym, grob_array);
if (grob_array)
{
SCM newval = sc->internal_get_object (sym);
- if (!Grob_array::is_smob (newval))
+ if (!unsmob<Grob_array> (newval))
{
newval = Grob_array::make_array ();
sc->set_object (sym, newval);
}
- substitute_grob_array (grob_array, Grob_array::unsmob (newval));
+ substitute_grob_array (grob_array, unsmob<Grob_array> (newval));
}
else
{
SCM
Breathing_sign::divisio_minima (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real staff_space = Staff_symbol_referencer::staff_space (me);
Real thickness = Staff_symbol_referencer::line_thickness (me);
SCM
Breathing_sign::divisio_maior (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real thickness = Staff_symbol_referencer::line_thickness (me);
thickness *= robust_scm2double (me->get_property ("thickness"), 1.0);
SCM
Breathing_sign::divisio_maxima (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real staff_space = Staff_symbol_referencer::staff_space (me);
Real thickness = Staff_symbol_referencer::line_thickness (me);
thickness *= robust_scm2double (me->get_property ("thickness"), 1.0);
SCM
Breathing_sign::finalis (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real staff_space = Staff_symbol_referencer::staff_space (me);
Real thickness = Staff_symbol_referencer::line_thickness (me);
thickness *= robust_scm2double (me->get_property ("thickness"), 1.0);
SCM
Breathing_sign::offset_callback (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Direction d = get_grob_direction (me);
if (!d)
{
Stream_event *n = notes_[i];
SCM p = n->get_property ("pitch");
- if (!Pitch::is_smob (p))
+ if (!unsmob<Pitch> (p))
continue;
if (to_boolean (n->get_property ("bass")))
SCM oct = n->get_property ("octavation");
if (scm_is_number (oct))
{
- Pitch orig = Pitch::unsmob (p)->transposed (Pitch (-scm_to_int (oct), 0));
+ Pitch orig = unsmob<Pitch> (p)->transposed (Pitch (-scm_to_int (oct), 0));
pitches = scm_cons (orig.smobbed_copy (), pitches);
}
else
SCM
Chord_name::after_line_breaking (SCM smob)
{
- Item *me = Item::unsmob (smob);
+ Item *me = unsmob<Item> (smob);
assert (me);
SCM s = me->get_property ("begin-of-line-visible");
scm_call_1 (fun, context->self_scm ());
for (SCM s = context->children_contexts ();
scm_is_pair (s); s = scm_cdr (s))
- apply_on_children (Context::unsmob (scm_car (s)), fun);
+ apply_on_children (unsmob<Context> (scm_car (s)), fun);
}
void
SCM
Clef_modifier::calc_parent_alignment (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Grob *clef = me->get_parent (X_AXIS);
string full_clef_name = ly_scm2string (clef->get_property ("glyph"));
string clef_name = replace_all(&full_clef_name, "clefs.", "");
SCM
Clef::calc_glyph_name (SCM smob)
{
- Item *s = Item::unsmob (smob);
+ Item *s = unsmob<Item> (smob);
SCM glyph = s->get_property ("glyph");
if (scm_is_string (glyph))
SCM
Clef::print (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
SCM glyph_scm = me->get_property ("glyph-name");
if (!scm_is_string (glyph_scm))
return SCM_EOL;
for (vsize i = 0; i < cluster_notes_.size (); i++)
{
- Pitch *pit = Pitch::unsmob (cluster_notes_[i]->get_property ("pitch"));
+ Pitch *pit = unsmob<Pitch> (cluster_notes_[i]->get_property ("pitch"));
int p = (pit ? pit->steps () : 0) + c0;
SCM
Cluster::calc_cross_staff (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "columns", cols);
Grob *commony = common_refpoint_of_array (cols, me, Y_AXIS);
SCM
Cluster::print (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Spanner *spanner = dynamic_cast<Spanner *> (me);
if (!spanner)
SCM
Cluster_beacon::height (SCM g)
{
- Grob *me = Grob::unsmob (g);
+ Grob *me = unsmob<Grob> (g);
Interval v = robust_scm2interval (me->get_property ("positions"),
Interval (0, 0));
return ly_interval2scm (Staff_symbol_referencer::staff_space (me) * 0.5 * v);
primitive = dynamic_cast<Item *> (primitives[i].grob ());
Stream_event *cause = primitives[i].event_cause ();
int pitch
- = Pitch::unsmob (cause->get_property ("pitch"))->steps ();
+ = unsmob<Pitch> (cause->get_property ("pitch"))->steps ();
if (prev_primitive)
{
delta_pitch = pitch - prev_pitch;
Moment
Completion_heads_engraver::next_moment (Rational const ¬e_len)
{
- Moment *e = Moment::unsmob (get_property ("measurePosition"));
- Moment *l = Moment::unsmob (get_property ("measureLength"));
+ Moment *e = unsmob<Moment> (get_property ("measurePosition"));
+ Moment *l = unsmob<Moment> (get_property ("measureLength"));
if (!e || !l || !to_boolean (get_property ("timing")))
{
return Moment (0, 0);
+ e->to_string () + " of " + l->to_string ());
return 0;
}
- Moment const *unit = Moment::unsmob (get_property ("completionUnit"));
+ Moment const *unit = unsmob<Moment> (get_property ("completionUnit"));
if (unit)
{
Completion_heads_engraver::make_note_head (Stream_event *ev)
{
Item *note = make_item ("NoteHead", ev->self_scm ());
- Pitch *pit = Pitch::unsmob (ev->get_property ("pitch"));
+ Pitch *pit = unsmob<Pitch> (ev->get_property ("pitch"));
int pos = pit->steps ();
SCM c0 = get_property ("middleCPosition");
}
else
{
- orig = Duration::unsmob (note_events_[0]->get_property ("duration"));
+ orig = unsmob<Duration> (note_events_[0]->get_property ("duration"));
note_dur = *orig;
SCM factor = get_property ("completionFactor");
if (ly_is_procedure (factor))
Moment
Completion_rest_engraver::next_moment (Rational const ¬e_len)
{
- Moment *e = Moment::unsmob (get_property ("measurePosition"));
- Moment *l = Moment::unsmob (get_property ("measureLength"));
+ Moment *e = unsmob<Moment> (get_property ("measurePosition"));
+ Moment *l = unsmob<Moment> (get_property ("measureLength"));
if (!e || !l || !to_boolean (get_property ("timing")))
{
return Moment (0, 0);
}
Moment result = *l - *e;
- Moment const *unit = Moment::unsmob (get_property ("completionUnit"));
+ Moment const *unit = unsmob<Moment> (get_property ("completionUnit"));
if (unit)
{
Completion_rest_engraver::make_rest (Stream_event *ev)
{
Item *rest = make_item ("Rest", ev->self_scm ());
- if (Pitch *p = Pitch::unsmob (ev->get_property ("pitch")))
+ if (Pitch *p = unsmob<Pitch> (ev->get_property ("pitch")))
{
int pos = p->steps ();
SCM c0 = get_property ("middleCPosition");
}
else
{
- orig = Duration::unsmob (rest_events_[0]->get_property ("duration"));
+ orig = unsmob<Duration> (rest_events_[0]->get_property ("duration"));
rest_dur = *orig;
SCM factor = get_property ("completionFactor");
if (ly_is_procedure (factor))
if (scm_is_pair (footnotes))
for (SCM s = footnotes; scm_is_pair (s); s = scm_cdr (s))
{
- Stencil *sten = Stencil::unsmob (scm_caddar (s));
+ Stencil *sten = unsmob<Stencil> (scm_caddar (s));
if (!sten)
{
programming_error ("expecting stencil, got empty pointer");
last_column_ = 0;
force_ = 0;
- Stencil *st = Stencil::unsmob (pb->get_property ("stencil"));
+ Stencil *st = unsmob<Stencil> (pb->get_property ("stencil"));
Interval stencil_extent = st->is_empty (Y_AXIS) ? Interval (0, 0)
: st->extent (Y_AXIS);
shape_ = Line_shape (stencil_extent, stencil_extent); // pretend it goes all the way across
Input *
Context_def::origin () const
{
- return Input::unsmob (input_location_);
+ return unsmob<Input> (input_location_);
}
Context_def::Context_def (Context_def const &s)
vector<Context_def *> accepteds;
for (SCM s = accepted; scm_is_pair (s); s = scm_cdr (s))
- if (Context_def *t = Context_def::unsmob (find_context_def (odef,
+ if (Context_def *t = unsmob<Context_def> (find_context_def (odef,
scm_car (s))))
accepteds.push_back (t);
" @samp{property-ops}, @samp{context-name}, @samp{group-type}.")
{
LY_ASSERT_SMOB (Context_def, def, 1);
- Context_def *cd = Context_def::unsmob (def);
+ Context_def *cd = unsmob<Context_def> (def);
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
SCM res = cd->lookup (sym);
LY_ASSERT_SMOB (Context_def, def, 1);
LY_ASSERT_SMOB (Context_mod, mod, 2);
- Context_def *cd = Context_def::unsmob (def)->clone ();
+ Context_def *cd = unsmob<Context_def> (def)->clone ();
- for (SCM s = Context_mod::unsmob (mod)->get_mods ();
+ for (SCM s = unsmob<Context_mod> (mod)->get_mods ();
scm_is_pair (s);
s = scm_cdr (s))
cd->add_context_mod (scm_car (s));
"Returns the list of context modifications stored in"
" @var{contextmod}.")
{
- Context_mod *tr = Context_mod::unsmob (contextmod);
+ Context_mod *tr = unsmob<Context_mod> (contextmod);
LY_ASSERT_SMOB (Context_mod, contextmod, 1);
return tr->get_mods ();
}
"Adds the given context @var{modification} to the list"
" @var{contextmods} of context modifications.")
{
- Context_mod *ctxmod = Context_mod::unsmob (contextmods);
+ Context_mod *ctxmod = unsmob<Context_mod> (contextmods);
LY_ASSERT_SMOB (Context_mod, contextmods, 1);
ctxmod->add_context_mod (modification);
return SCM_UNSPECIFIED;
LY_ASSERT_SMOB (Context, context, 1);
LY_ASSERT_SMOB (Context_mod, mod, 2);
- apply_property_operations (Context::unsmob (context),
- Context_mod::unsmob (mod)->get_mods ());
+ apply_property_operations (unsmob<Context> (context),
+ unsmob<Context_mod> (mod)->get_mods ());
scm_remember_upto_here_1 (context);
return SCM_UNSPECIFIED;
}
bool
typecheck_grob (SCM symbol, SCM value)
{
- if (Unpure_pure_container *upc = Unpure_pure_container::unsmob (value))
+ if (Unpure_pure_container *upc = unsmob<Unpure_pure_container> (value))
return typecheck_grob (symbol, upc->unpure_part ())
&& typecheck_grob (symbol, upc->pure_part ());
return ly_is_procedure (value)
- || Simple_closure::is_smob (value)
+ || unsmob<Simple_closure> (value)
|| type_check_assignment (symbol, value, ly_symbol2scm ("backend-type?"));
}
SCM res = SCM_UNDEFINED;
if (Context *c = context_->where_defined (symbol_, &res))
if (c != context_)
- return Grob_property_info (c, symbol_, Grob_properties::unsmob (res));
- props_ = Grob_properties::unsmob (res);
+ return Grob_property_info (c, symbol_, unsmob<Grob_properties> (res));
+ props_ = unsmob<Grob_properties> (res);
return *this;
}
return true;
SCM res = SCM_UNDEFINED;
if (context_->here_defined (symbol_, &res))
- props_ = Grob_properties::unsmob (res);
+ props_ = unsmob<Grob_properties> (res);
return props_;
}
|| !g->here_defined (symbol_, ¤t_context_val))
return false;
- Grob_properties *def = Grob_properties::unsmob (current_context_val);
+ Grob_properties *def = unsmob<Grob_properties> (current_context_val);
if (!def)
{
// any, they will be factored in when `updated' is being called.
SCM props = Grob_properties (def->alist_, def->alist_).smobbed_copy ();
context_->set_property (symbol_, props);
- props_ = Grob_properties::unsmob (props);
+ props_ = unsmob<Grob_properties> (props);
return props_;
}
1, 0, 0, (SCM context),
"Return the current moment of @var{context}.")
{
- Context *tr = Context::unsmob (context);
+ Context *tr = unsmob<Context> (context);
LY_ASSERT_SMOB (Context, context, 1);
" i.e., for @code{\\context Voice = \"one\" @dots{}}"
" return the string @code{one}.")
{
- Context *tr = Context::unsmob (context);
+ Context *tr = unsmob<Context> (context);
LY_ASSERT_SMOB (Context, context, 1);
{
LY_ASSERT_SMOB (Context, context, 1);
- Context *tr = Context::unsmob (context);
+ Context *tr = unsmob<Context> (context);
return ly_symbol2scm (tr->context_name ().c_str ());
}
"Return the definition of @var{name} (a symbol) within"
" @var{context} as an alist.")
{
- Context *tr = Context::unsmob (context);
+ Context *tr = unsmob<Context> (context);
LY_ASSERT_SMOB (Context, context, 1);
LY_ASSERT_TYPE (ly_is_symbol, name, 2);
" with @var{eltprop} (if @var{val} is specified) or reverted"
" (if unspecified).")
{
- Context *tg = Context::unsmob (context);
+ Context *tg = unsmob<Context> (context);
LY_ASSERT_SMOB (Context, context, 1);
LY_ASSERT_TYPE (ly_is_symbol, grob, 2);
LY_ASSERT_SMOB (Context, context, 1);
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
- Context *t = Context::unsmob (context);
+ Context *t = unsmob<Context> (context);
SCM result = t->get_property (sym);
return !SCM_UNBNDP (def) && scm_is_null (result) ? def : result;
}
LY_ASSERT_SMOB (Context, context, 1);
LY_ASSERT_TYPE (ly_is_symbol, name, 2);
- Context *tr = Context::unsmob (context);
+ Context *tr = unsmob<Context> (context);
tr->set_property (name, val);
LY_ASSERT_SMOB (Context, context, 1);
LY_ASSERT_TYPE (ly_is_symbol, name, 2);
- Context *tr = Context::unsmob (context);
+ Context *tr = unsmob<Context> (context);
SCM val;
tr = tr->where_defined (name, &val);
{
LY_ASSERT_SMOB (Context, context, 1);
LY_ASSERT_TYPE (ly_is_symbol, name, 2);
- Context *tr = Context::unsmob (context);
+ Context *tr = unsmob<Context> (context);
tr->unset_property (name);
return SCM_UNSPECIFIED;
"Return the parent of @var{context}, @code{#f} if none.")
{
LY_ASSERT_SMOB (Context, context, 1);
- Context *tr = Context::unsmob (context);
+ Context *tr = unsmob<Context> (context);
tr = tr->get_parent_context ();
if (tr)
{
LY_ASSERT_SMOB (Context, context, 1);
LY_ASSERT_TYPE (ly_is_symbol, name, 2);
- Context *tr = Context::unsmob (context);
+ Context *tr = unsmob<Context> (context);
while (tr)
{
"Return @code{now-moment} of context @var{context}.")
{
LY_ASSERT_SMOB (Context, context, 1);
- Context *ctx = Context::unsmob (context);
+ Context *ctx = unsmob<Context> (context);
return ctx->now_mom ().smobbed_copy ();
}
"Return @code{event-source} of context @var{context}.")
{
LY_ASSERT_SMOB (Context, context, 1);
- Context *ctx = Context::unsmob (context);
+ Context *ctx = unsmob<Context> (context);
return ctx->event_source ()->self_scm ();
}
" from @var{context} and all its subcontexts.")
{
LY_ASSERT_SMOB (Context, context, 1);
- Context *ctx = Context::unsmob (context);
+ Context *ctx = unsmob<Context> (context);
return ctx->events_below ()->self_scm ();
}
{
for (SCM p = context_list_; scm_is_pair (p); p = scm_cdr (p))
{
- Context *ctx = Context::unsmob (scm_car (p));
+ Context *ctx = unsmob<Context> (scm_car (p));
ctx->check_removal ();
if (ctx->is_removable ())
Scheme_hash_table *
Context::properties_dict () const
{
- return Scheme_hash_table::unsmob (properties_scm_);
+ return unsmob<Scheme_hash_table> (properties_scm_);
}
void
SCM score_name = default_child_context_name ();
SCM score_def = find_context_def (get_output_def (), score_name);
- if (Context_def *cd = Context_def::unsmob (score_def))
+ if (Context_def *cd = unsmob<Context_def> (score_def))
{
if (cd->is_alias (n))
return create_context (cd, id, operations);
void
Context::acknowledge_infant (SCM sev)
{
- infant_event_ = Stream_event::unsmob (sev);
+ infant_event_ = unsmob<Stream_event> (sev);
}
void
Context::set_property_from_event (SCM sev)
{
- Stream_event *ev = Stream_event::unsmob (sev);
+ Stream_event *ev = unsmob<Stream_event> (sev);
SCM sym = ev->get_property ("symbol");
if (scm_is_symbol (sym))
void
Context::unset_property_from_event (SCM sev)
{
- Stream_event *ev = Stream_event::unsmob (sev);
+ Stream_event *ev = unsmob<Stream_event> (sev);
SCM sym = ev->get_property ("symbol");
type_check_assignment (sym, SCM_EOL, ly_symbol2scm ("translation-type?"));
void
Context::create_context_from_event (SCM sev)
{
- Stream_event *ev = Stream_event::unsmob (sev);
+ Stream_event *ev = unsmob<Stream_event> (sev);
string id = ly_scm2string (ev->get_property ("id"));
SCM ops = ev->get_property ("ops");
new_context->unprotect ();
- Context_def *td = Context_def::unsmob (new_context->definition_);
+ Context_def *td = unsmob<Context_def> (new_context->definition_);
/* This cannot move before add_context (), because \override
operations require that we are in the hierarchy. */
accepts = scm_cons (elt, accepts);
}
- return Context_def::unsmob (definition_)->path_to_acceptable_context (name,
+ return unsmob<Context_def> (definition_)->path_to_acceptable_context (name,
get_output_def (),
scm_reverse_x (accepts, SCM_EOL));
assert (infant_event_);
SCM infant_scm = infant_event_->get_property ("context");
- Context *infant = Context::unsmob (infant_scm);
+ Context *infant = unsmob<Context> (infant_scm);
if (!infant || infant->get_parent_context () != this)
{
SCM st = find_context_def (get_output_def (), nm);
string name = ly_symbol2string (nm);
- Context_def *t = Context_def::unsmob (st);
+ Context_def *t = unsmob<Context_def> (st);
if (!t)
{
warning (_f ("cannot find or create: `%s'", name.c_str ()));
- t = Context_def::unsmob (this->definition_);
+ t = unsmob<Context_def> (this->definition_);
}
if (scm_is_symbol (t->get_default_child (SCM_EOL)))
{
Context *
Context::where_defined (SCM sym, SCM *value) const
{
-#ifndef NDEBUG
+#ifdef DEBUG
if (profile_property_accesses)
note_property_access (&context_property_lookup_table, sym);
#endif
bool
Context::here_defined (SCM sym, SCM *value) const
{
-#ifndef NDEBUG
+#ifdef DEBUG
if (profile_property_accesses)
note_property_access (&context_property_lookup_table, sym);
#endif
SCM
Context::internal_get_property (SCM sym) const
{
-#ifndef NDEBUG
+#ifdef DEBUG
if (profile_property_accesses)
note_property_access (&context_property_lookup_table, sym);
#endif
void
Context::change_parent (SCM sev)
{
- Stream_event *ev = Stream_event::unsmob (sev);
- Context *to = Context::unsmob (ev->get_property ("context"));
+ Stream_event *ev = unsmob<Stream_event> (sev);
+ Context *to = unsmob<Context> (ev->get_property ("context"));
disconnect_from_parent ();
to->add_context (this);
for (SCM s = where->children_contexts ();
!found && scm_is_pair (s); s = scm_cdr (s))
{
- Context *tr = Context::unsmob (scm_car (s));
+ Context *tr = unsmob<Context> (scm_car (s));
found = find_context_below (tr, type, id);
}
SCM
Context::context_name_symbol () const
{
- Context_def *td = Context_def::unsmob (definition_);
+ Context_def *td = unsmob<Context_def> (definition_);
return td->get_context_name ();
}
{
scm_puts ("#<", port);
scm_puts (class_name (), port);
- if (Context_def *d = Context_def::unsmob (definition_))
+ if (Context_def *d = unsmob<Context_def> (definition_))
{
scm_puts (" ", port);
scm_display (d->get_context_name (), port);
{
SCM l = context->get_property ("measureLength");
Rational length (1);
- if (Moment::is_smob (l))
- length = Moment::unsmob (l)->main_part_;
+ if (unsmob<Moment> (l))
+ length = unsmob<Moment> (l)->main_part_;
return length;
}
SCM sm = context->get_property ("measurePosition");
Moment m = 0;
- if (Moment::is_smob (sm))
+ if (unsmob<Moment> (sm))
{
- m = *Moment::unsmob (sm);
+ m = *unsmob<Moment> (sm);
if (m.main_part_ < Rational (0))
{
trans->set_property (sym, ly_deep_copy (val));
for (SCM p = trans->children_contexts (); scm_is_pair (p); p = scm_cdr (p))
{
- Context *trg = Context::unsmob (scm_car (p));
+ Context *trg = unsmob<Context> (scm_car (p));
set_context_property_on_children (trg, sym, ly_deep_copy (val));
}
}
// to true.
do {
- if (!melisma_busy (Context::unsmob (scm_car (ch))))
+ if (!melisma_busy (unsmob<Context> (scm_car (ch))))
return false;
ch = scm_cdr (ch);
} while (scm_is_pair (ch));
don't look at the staff-position, since we can't be sure
whether Clef_engraver already applied a vertical shift.
*/
- pitches_.push_back (*Pitch::unsmob (ev->get_property ("pitch")));
+ pitches_.push_back (*unsmob<Pitch> (ev->get_property ("pitch")));
}
}
SCM
Custos::print (SCM smob)
{
- Item *me = (Item *)Grob::unsmob (smob);
+ Item *me = (Item *)unsmob<Grob> (smob);
SCM scm_style = me->get_property ("style");
string style;
2, 0, 0, (SCM to, SCM from),
"Make the dispatcher @var{to} listen to events from @var{from}.")
{
- Dispatcher *t = Dispatcher::unsmob (to);
- Dispatcher *f = Dispatcher::unsmob (from);
+ Dispatcher *t = unsmob<Dispatcher> (to);
+ Dispatcher *f = unsmob<Dispatcher> (from);
LY_ASSERT_SMOB (Dispatcher, to, 1);
LY_ASSERT_SMOB (Dispatcher, from, 2);
return SCM_UNSPECIFIED;
}
+LY_DEFINE (ly_disconnect_dispatchers, "ly:disconnect-dispatchers",
+ 2, 0, 0, (SCM to, SCM from),
+ "Stop the dispatcher @var{to} listening to events from @var{from}.")
+{
+ Dispatcher *t = unsmob<Dispatcher> (to);
+ Dispatcher *f = unsmob<Dispatcher> (from);
+
+ LY_ASSERT_SMOB (Dispatcher, to, 1);
+ LY_ASSERT_SMOB (Dispatcher, from, 2);
+
+ t->unregister_as_listener (f);
+
+ return SCM_UNSPECIFIED;
+}
+
LY_DEFINE (ly_add_listener, "ly:add-listener",
2, 0, 1, (SCM callback, SCM disp, SCM cl),
"Add the single-argument procedure @var{callback} as listener"
" to the dispatcher @var{disp}. Whenever @var{disp} hears"
" an event of class @var{cl}, it calls @var{callback} with it.")
{
- Dispatcher *d = Dispatcher::unsmob (disp);
+ Dispatcher *d = unsmob<Dispatcher> (disp);
LY_ASSERT_TYPE (ly_is_procedure, callback, 1);
LY_ASSERT_SMOB (Dispatcher, disp, 2);
{
LY_ASSERT_SMOB (Dispatcher, disp, 1);
- SCM result = Dispatcher::unsmob (disp)->listened_types ();
+ SCM result = unsmob<Dispatcher> (disp)->listened_types ();
scm_remember_upto_here_1 (disp);
LY_ASSERT_SMOB (Dispatcher, disp, 1);
LY_ASSERT_TYPE (scm_is_pair, cl, 2);
- bool result = Dispatcher::unsmob (disp)->is_listened_class (cl);
+ bool result = unsmob<Dispatcher> (disp)->is_listened_class (cl);
scm_remember_upto_here_1 (disp);
2, 0, 0, (SCM disp, SCM ev),
"Send the stream event @var{ev} to the dispatcher @var{disp}.")
{
- Dispatcher *d = Dispatcher::unsmob (disp);
- Stream_event *e = Stream_event::unsmob (ev);
+ Dispatcher *d = unsmob<Dispatcher> (disp);
+ Stream_event *e = unsmob<Stream_event> (ev);
LY_ASSERT_SMOB (Dispatcher, disp, 1);
void
Dispatcher::dispatch (SCM sev)
{
- Stream_event *ev = Stream_event::unsmob (sev);
+ Stream_event *ev = unsmob<Stream_event> (sev);
SCM class_list = ev->get_property ("class");
if (!scm_is_pair (class_list))
{
for (SCM disp = dispatchers_; scm_is_pair (disp); disp = scm_cdr (disp))
{
int priority = scm_to_int (scm_cdar (disp));
- Dispatcher *d = Dispatcher::unsmob (scm_caar (disp));
+ Dispatcher *d = unsmob<Dispatcher> (scm_caar (disp));
d->internal_add_listener (GET_LISTENER (Dispatcher, dispatch).smobbed_copy (),
ev_class, priority);
}
SCM dummy = scm_cons (SCM_EOL, list);
SCM e = dummy;
while (scm_is_pair (scm_cdr (e)))
- if (*Listener::unsmob (scm_cdadr (e)) == l && first)
+ if (*unsmob<Listener> (scm_cdadr (e)) == l && first)
{
scm_set_cdr_x (e, scm_cddr (e));
first = false;
/* Unregister with all dispatchers. */
for (SCM disp = dispatchers_; scm_is_pair (disp); disp = scm_cdr (disp))
{
- Dispatcher *d = Dispatcher::unsmob (scm_caar (disp));
+ Dispatcher *d = unsmob<Dispatcher> (scm_caar (disp));
d->remove_listener (GET_LISTENER (Dispatcher, dispatch), ev_class);
}
listen_classes_ = scm_delq_x (ev_class, listen_classes_);
void
Dot_column_engraver::acknowledge_rhythmic_head (Grob_info info)
{
- Grob *d = Grob::unsmob (info.grob ()->get_object ("dot"));
+ Grob *d = unsmob<Grob> (info.grob ()->get_object ("dot"));
if (d)
{
if (!dotcol_)
SCM
Dot_column::calc_positioning_done (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
/*
Trigger note collision resolution first, since that may kill off
dots when merging.
*/
- if (Grob *collision = Grob::unsmob (me->get_object ("note-collision")))
+ if (Grob *collision = unsmob<Grob> (me->get_object ("note-collision")))
(void) collision->get_property ("positioning-done");
me->set_property ("positioning-done", SCM_BOOL_T);
Grob *n = dots[i]->get_parent (Y_AXIS);
commonx = n->common_refpoint (commonx, X_AXIS);
- if (Grob *stem = Grob::unsmob (n->get_object ("stem")))
+ if (Grob *stem = unsmob<Grob> (n->get_object ("stem")))
{
commonx = stem->common_refpoint (commonx, X_AXIS);
Box b (s->extent (commonx, X_AXIS), y);
boxes.push_back (b);
- if (Grob *stem = Grob::unsmob (s->get_object ("stem")))
+ if (Grob *stem = unsmob<Grob> (s->get_object ("stem")))
stems.insert (stem);
}
// Sort dots by stem, then check for dots above the limit for each stem
vector <vector <Grob *> > dots_each_stem (parent_stems.size ());
for (vsize i = 0; i < dots.size (); i++)
- if (Grob *stem = Grob::unsmob (dots[i]->get_parent (Y_AXIS)
+ if (Grob *stem = unsmob<Grob> (dots[i]->get_parent (Y_AXIS)
-> get_object ("stem")))
for (vsize j = 0; j < parent_stems.size (); j++)
if (stem == parent_stems[j])
void
Dot_column::add_head (Grob *me, Grob *head)
{
- Grob *d = Grob::unsmob (head->get_object ("dot"));
+ Grob *d = unsmob<Grob> (head->get_object ("dot"));
if (d)
{
Side_position_interface::add_support (me, head);
return;
Grob *note = gi.grob ();
- if (Grob::is_smob (note->get_object ("dot")))
+ if (unsmob<Grob> (note->get_object ("dot")))
return;
- Duration *dur = Duration::unsmob (cause->get_property ("duration"));
+ Duration *dur = unsmob<Duration> (cause->get_property ("duration"));
if (dur && dur->dot_count ())
{
Item *d = make_item ("Dots", note->self_scm ());
SCM
Dots::print (SCM d)
{
- Grob *sc = Grob::unsmob (d);
+ Grob *sc = unsmob<Grob> (d);
Stencil mol;
SCM c = sc->get_property ("dot-count");
&& to_boolean (scm_hash_table_p (tab)))
defn = scm_hashq_ref (tab, sym, SCM_EOL);
- if (Pitch *pit = Pitch::unsmob (defn))
+ if (Pitch *pit = unsmob<Pitch> (defn))
{
SCM articulations = n->get_property ("articulations");
Stream_event *tie_event = 0;
int velocity = 0;
for (SCM s = articulations; scm_is_pair (s); s = scm_cdr (s))
{
- Stream_event *ev = Stream_event::unsmob (scm_car (s));
+ Stream_event *ev = unsmob<Stream_event> (scm_car (s));
if (!ev)
continue;
SCM
Duration::less_p (SCM p1, SCM p2)
{
- Duration *a = Duration::unsmob (p1);
- Duration *b = Duration::unsmob (p2);
+ Duration *a = unsmob<Duration> (p1);
+ Duration *b = unsmob<Duration> (p2);
if (compare (*a, *b) < 0)
return SCM_BOOL_T;
LY_ASSERT_SMOB (Duration, p1, 1);
LY_ASSERT_SMOB (Duration, p2, 2);
- Duration *a = Duration::unsmob (p1);
- Duration *b = Duration::unsmob (p2);
+ Duration *a = unsmob<Duration> (p1);
+ Duration *b = unsmob<Duration> (p2);
if (Duration::compare (*a, *b) < 0)
return SCM_BOOL_T;
"Extract the duration log from @var{dur}.")
{
LY_ASSERT_SMOB (Duration, dur, 1);
- return scm_from_int (Duration::unsmob (dur)->duration_log ());
+ return scm_from_int (unsmob<Duration> (dur)->duration_log ());
}
LY_DEFINE (ly_duration_dot_count, "ly:duration-dot-count",
"Extract the dot count from @var{dur}.")
{
LY_ASSERT_SMOB (Duration, dur, 1);
- return scm_from_int (Duration::unsmob (dur)->dot_count ());
+ return scm_from_int (unsmob<Duration> (dur)->dot_count ());
}
LY_DEFINE (ly_intlog2, "ly:intlog2",
"The length of the duration as a @code{moment}.")
{
LY_ASSERT_SMOB (Duration, dur, 1);
- return Moment (Duration::unsmob (dur)->get_length ()).smobbed_copy ();
+ return Moment (unsmob<Duration> (dur)->get_length ()).smobbed_copy ();
}
LY_DEFINE (ly_duration_2_string, "ly:duration->string",
"Convert @var{dur} to a string.")
{
LY_ASSERT_SMOB (Duration, dur, 1);
- return ly_string2scm (Duration::unsmob (dur)->to_string ());
+ return ly_string2scm (unsmob<Duration> (dur)->to_string ());
}
LY_DEFINE (ly_duration_factor, "ly:duration-factor",
" Return it as a pair.")
{
LY_ASSERT_SMOB (Duration, dur, 1);
- Rational r = Duration::unsmob (dur)->factor ();
+ Rational r = unsmob<Duration> (dur)->factor ();
return scm_cons (scm_from_int64 (r.num ()), scm_from_int64 (r.den ()));
}
" Return it as a rational.")
{
LY_ASSERT_SMOB (Duration, dur, 1);
- Rational r = Duration::unsmob (dur)->factor ();
+ Rational r = unsmob<Duration> (dur)->factor ();
return ly_rational2scm (r);
}
bound = spanners[0]->get_bound (d);
else
{
- bound = Grob::unsmob (get_property ("currentMusicalColumn"));
+ bound = unsmob<Grob> (get_property ("currentMusicalColumn"));
programming_error ("started DynamicLineSpanner but have no left bound");
}
if (finished_spanner_ && !finished_spanner_->get_bound (RIGHT))
finished_spanner_
->set_bound (RIGHT,
- Grob::unsmob (get_property ("currentMusicalColumn")));
+ unsmob<Grob> (get_property ("currentMusicalColumn")));
if (current_spanner_ && !current_spanner_->get_bound (LEFT))
current_spanner_
->set_bound (LEFT,
- Grob::unsmob (get_property ("currentMusicalColumn")));
+ unsmob<Grob> (get_property ("currentMusicalColumn")));
script_ = 0;
script_event_ = 0;
accepted_spanevents_drul_.set (0, 0);
*/
Grob *x_parent = (heads.size ()
? info.grob ()
- : Grob::unsmob (info.grob ()->get_object ("rest")));
+ : unsmob<Grob> (info.grob ()->get_object ("rest")));
if (x_parent)
script_->set_parent (x_parent, X_AXIS);
}
/*
UGH. cut & paste code.
*/
- Grob *me = Grob::unsmob (grob);
+ Grob *me = unsmob<Grob> (grob);
extract_grob_set (me, "elements", elements);
if (elements.empty ())
{
SCM
Enclosing_bracket::print (SCM grob)
{
- Grob *me = Grob::unsmob (grob);
+ Grob *me = unsmob<Grob> (grob);
extract_grob_set (me, "elements", elements);
if (elements.empty ())
{
void
Engraver_group::override (SCM sev)
{
- Stream_event *ev = Stream_event::unsmob (sev);
+ Stream_event *ev = unsmob<Stream_event> (sev);
Grob_property_info (context (), ev->get_property ("symbol"))
.push (ev->get_property ("property-path"),
void
Engraver_group::revert (SCM sev)
{
- Stream_event *ev = Stream_event::unsmob (sev);
+ Stream_event *ev = unsmob<Stream_event> (sev);
Grob_property_info (context (), ev->get_property ("symbol"))
.pop (ev->get_property ("property-path"));
}
Engraver_dispatch_list *dispatch
- = Engraver_dispatch_list::unsmob (acklist);
+ = unsmob<Engraver_dispatch_list> (acklist);
if (dispatch)
dispatch->apply (info);
for (SCM s = context_->children_contexts ();
scm_is_pair (s); s = scm_cdr (s))
{
- Context *c = Context::unsmob (scm_car (s));
+ Context *c = unsmob<Context> (scm_car (s));
Engraver_group *group
= dynamic_cast<Engraver_group *> (c->implementation ());
for (SCM s = context ()->children_contexts ();
scm_is_pair (s); s = scm_cdr (s))
{
- Context *c = Context::unsmob (scm_car (s));
+ Context *c = unsmob<Context> (scm_car (s));
Engraver_group *group
= dynamic_cast<Engraver_group *> (c->implementation ());
if (group)
LY_ASSERT_TYPE (ly_is_symbol, grob_name, 2);
LY_ASSERT_TYPE (ly_is_grob_cause, cause, 3);
- Grob *g = Engraver::unsmob (engraver)->
+ Grob *g = unsmob<Engraver> (engraver)->
internal_make_grob (grob_name, cause,
ly_symbol2string (grob_name).c_str (),
"scheme", 0, "scheme");
LY_ASSERT_SMOB (Grob, grob, 2);
LY_ASSERT_TYPE (ly_is_grob_cause, cause, 3);
- Engraver::unsmob (engraver)->
- announce_end_grob (Grob::unsmob (grob), cause);
+ unsmob<Engraver> (engraver)->
+ announce_end_grob (unsmob<Grob> (grob), cause);
return SCM_UNSPECIFIED;
}
Engraver::make_grob_info (Grob *e, SCM cause)
{
/* TODO: Remove Music code when it's no longer needed */
- if (Music *m = Music::unsmob (cause))
+ if (Music *m = unsmob<Music> (cause))
{
cause = m->to_event ()->unprotect ();
}
if (scm_is_null (e->get_property ("cause"))
- && (Stream_event::is_smob (cause) || Grob::is_smob (cause)))
+ && (unsmob<Stream_event> (cause) || unsmob<Grob> (cause)))
e->set_property ("cause", cause);
return Grob_info (this, e);
{
}
-#ifndef NDEBUG
+#ifdef DEBUG
static SCM creation_callback = SCM_EOL;
LY_DEFINE (ly_set_grob_creation_callback, "ly:set-grob-creation-callback",
1, 0, 0, (SCM cb),
int line,
char const *fun)
{
-#ifdef NDEBUG
+#ifndef DEBUG
(void)file;
(void)line;
(void)fun;
assert (grob);
announce_grob (grob, cause);
-#ifndef NDEBUG
+#ifdef DEBUG
if (ly_is_procedure (creation_callback))
scm_apply_0 (creation_callback,
scm_list_n (grob->self_scm (), scm_from_utf8_string (file),
bool
ly_is_grob_cause (SCM obj)
{
- return Grob::is_smob (obj) || Stream_event::is_smob (obj) || scm_is_null (obj);
+ return unsmob<Grob> (obj) || unsmob<Stream_event> (obj) || scm_is_null (obj);
}
#include "translator.icc"
{
Grob *col = (note_columns_.size ()
? note_columns_.back ()
- : Grob::unsmob (get_property ("currentMusicalColumn")));
+ : unsmob<Grob> (get_property ("currentMusicalColumn")));
finished_->set_bound (RIGHT, col);
}
finished_ = 0;
{
Grob *col = (note_columns_.size ()
? note_columns_.front ()
- : Grob::unsmob (get_property ("currentMusicalColumn")));
+ : unsmob<Grob> (get_property ("currentMusicalColumn")));
span_->set_bound (LEFT, col);
}
for (SCM s = get_music ()->get_property ("elements");
scm_is_pair (s); s = scm_cdr (s))
{
- Music *mus = Music::unsmob (scm_car (s));
+ Music *mus = unsmob<Music> (scm_car (s));
report_event (mus);
}
for (SCM s = get_music ()->get_property ("articulations");
scm_is_pair (s); s = scm_cdr (s))
{
- Music *mus = Music::unsmob (scm_car (s));
+ Music *mus = unsmob<Music> (scm_car (s));
report_event (mus);
}
}
SCM
Figured_bass_continuation::center_on_figures (SCM grob)
{
- Spanner *me = Spanner::unsmob (grob);
+ Spanner *me = unsmob<Spanner> (grob);
extract_grob_set (me, "figures", figures);
if (figures.empty ())
return scm_from_double (0.0);
SCM
Figured_bass_continuation::print (SCM grob)
{
- Spanner *me = Spanner::unsmob (grob);
+ Spanner *me = unsmob<Spanner> (grob);
Real thick
= me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"))
left_figs.push_back (consecutive_lines[j]->get_bound (LEFT));
SCM ga = Grob_array::make_array ();
- Grob_array::unsmob (ga)->set_array (left_figs);
+ unsmob<Grob_array> (ga)->set_array (left_figs);
for (vsize j = consecutive_lines.size (); j--;)
consecutive_lines[j]->set_object ("figures",
- Grob_array::unsmob (ga)->smobbed_copy ());
+ unsmob<Grob_array> (ga)->smobbed_copy ());
}
void
Figured_bass_engraver::create_grobs ()
{
Grob *muscol
- = Item::unsmob (get_property ("currentMusicalColumn"));
+ = unsmob<Item> (get_property ("currentMusicalColumn"));
if (!alignment_)
{
alignment_ = make_spanner ("BassFigureAlignment", SCM_EOL);
SCM
Fingering_column::calc_positioning_done (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
if (!me->is_live ())
return SCM_BOOL_T;
junkme.
*/
SCM pitch = r->get_property ("pitch");
- if (Pitch::is_smob (pitch))
+ if (unsmob<Pitch> (pitch))
fingering->set_property ("pitch", pitch);
/*
SCM
Flag::width (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
- Stencil *sten = Stencil::unsmob (me->get_property ("stencil"));
+ Grob *me = unsmob<Grob> (smob);
+ Stencil *sten = unsmob<Stencil> (me->get_property ("stencil"));
if (!sten)
return ly_interval2scm (Interval (0.0, 0.0));
SCM
Flag::glyph_name (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Grob *stem = me->get_parent (X_AXIS);
Direction d = get_grob_direction (stem);
SCM
Flag::print (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Grob *stem = me->get_parent (X_AXIS);
Direction d = get_grob_direction (stem);
SCM
Flag::internal_calc_y_offset (SCM smob, bool pure)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Grob *stem = me->get_parent (X_AXIS);
Direction d = get_grob_direction (stem);
SCM
Flag::calc_x_offset (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Grob *stem = me->get_parent (X_AXIS);
return scm_from_double (stem->extent (stem, X_AXIS)[RIGHT]);
}
Font_metric *
Font_interface::get_default_font (Grob *me)
{
- Font_metric *fm = Font_metric::unsmob (me->get_property ("font"));
+ Font_metric *fm = unsmob<Font_metric> (me->get_property ("font"));
if (!fm)
{
SCM chain = music_font_alist_chain (me);
" to the font encodings @code{fetaMusic} and @code{fetaBraces},"
" respectively.")
{
- Font_metric *fm = Font_metric::unsmob (font);
+ Font_metric *fm = unsmob<Font_metric> (font);
LY_ASSERT_SMOB (Font_metric, font, 1);
LY_ASSERT_TYPE (scm_is_string, name, 2);
" to the font encodings @code{fetaMusic} and @code{fetaBraces},"
" respectively.")
{
- Font_metric *fm = Font_metric::unsmob (font);
+ Font_metric *fm = unsmob<Font_metric> (font);
LY_ASSERT_SMOB (Font_metric, font, 1);
LY_ASSERT_TYPE (scm_is_string, name, 2);
" to the font encodings @code{fetaMusic} and @code{fetaBraces},"
" respectively.")
{
- Font_metric *fm = Font_metric::unsmob (font);
+ Font_metric *fm = unsmob<Font_metric> (font);
LY_ASSERT_SMOB (Font_metric, font, 1);
LY_ASSERT_TYPE (scm_is_integer, index, 2);
" to the font encodings @code{fetaMusic} and @code{fetaBraces},"
" respectively.")
{
- Font_metric *fm = Font_metric::unsmob (font);
+ Font_metric *fm = unsmob<Font_metric> (font);
LY_ASSERT_SMOB (Font_metric, font, 1);
LY_ASSERT_TYPE (scm_is_string, name, 2);
{
LY_ASSERT_SMOB (Font_metric, font, 1);
- Font_metric *fm = Font_metric::unsmob (font);
+ Font_metric *fm = unsmob<Font_metric> (font);
SCM name = fm->font_file_name ();
return name;
" return the corresponding name.")
{
LY_ASSERT_SMOB (Font_metric, font, 1);
- Font_metric *fm = Font_metric::unsmob (font);
+ Font_metric *fm = unsmob<Font_metric> (font);
return ly_string2scm (fm->font_name ());
}
{
LY_ASSERT_SMOB (Font_metric, font, 1);
- Font_metric *fm = Font_metric::unsmob (font);
+ Font_metric *fm = unsmob<Font_metric> (font);
return scm_cdr (fm->description_);
}
{
LY_ASSERT_SMOB (Font_metric, font, 1);
- Font_metric *fm = Font_metric::unsmob (font);
+ Font_metric *fm = unsmob<Font_metric> (font);
return scm_from_double (fm->design_size ());
}
if (to_boolean (scm_promise_p (entry)))
{
- Font_metric *fm = Font_metric::unsmob (scm_force (entry));
+ Font_metric *fm = unsmob<Font_metric> (scm_force (entry));
size = fm->design_size ();
}
#if HAVE_PANGO_FT2
#endif
}
else
- fm = Font_metric::unsmob (scm_force (scm_c_vector_ref (font_vector, i)));
+ fm = unsmob<Font_metric> (scm_force (scm_c_vector_ref (font_vector, i)));
return find_scaled_font (layout, fm, requested / size);
}
Spanner *b = make_spanner ("FootnoteSpanner", cause);
b->set_parent (s, Y_AXIS);
b->set_parent (s, X_AXIS);
- Grob *bound = Grob::unsmob (get_property ("currentMusicalColumn"));
+ Grob *bound = unsmob<Grob> (get_property ("currentMusicalColumn"));
b->set_bound (LEFT, bound);
annotated_spanners_.push_back (Drul_array<Spanner *> (s, b));
}
void
Footnote_engraver::acknowledge_grob (Grob_info info)
{
- Music *mus = Music::unsmob (info.grob ()->get_property ("footnote-music"));
+ Music *mus = unsmob<Music> (info.grob ()->get_property ("footnote-music"));
if (mus)
{
{
if (annotated_spanners_[i][LEFT] == s)
{
- Grob *bound = Grob::unsmob (get_property ("currentMusicalColumn"));
+ Grob *bound = unsmob<Grob> (get_property ("currentMusicalColumn"));
annotated_spanners_[i][RIGHT]->set_bound (RIGHT, bound);
break;
}
SCM busy = get_property ("busyGrobs");
Moment now = now_mom ();
- while (scm_is_pair (busy) && Moment::unsmob (scm_caar (busy))->main_part_ == now.main_part_)
+ while (scm_is_pair (busy) && unsmob<Moment> (scm_caar (busy))->main_part_ == now.main_part_)
busy = scm_cdr (busy);
while (scm_is_pair (busy))
{
- Grob *g = Grob::unsmob (scm_cdar (busy));
+ Grob *g = unsmob<Grob> (scm_cdar (busy));
if (g->internal_has_interface (ly_symbol2scm ("rhythmic-grob-interface")))
context ()->get_score_context ()->set_property ("forbidBreak", SCM_BOOL_T);
busy = scm_cdr (busy);
ly_add_type_predicate ((void *) &is_direction, "direction");
ly_add_type_predicate ((void *) &ly_is_port, "port");
ly_add_type_predicate ((void *) &ly_cheap_is_list, "list");
- ly_add_type_predicate ((void *) &Global_context::is_smob, "Global_context");
- ly_add_type_predicate ((void *) &Paper_score::is_smob, "Paper_score");
- ly_add_type_predicate ((void *) &Performance::is_smob, "Performance");
+ ly_add_type_predicate ((void *) &unsmob<Global_context>, "Global_context");
+ ly_add_type_predicate ((void *) &unsmob<Paper_score>, "Paper_score");
+ ly_add_type_predicate ((void *) &unsmob<Performance>, "Performance");
ly_add_type_predicate ((void *) &is_axis, "axis");
ly_add_type_predicate ((void *) &is_number_pair, "number pair");
ly_add_type_predicate ((void *) &ly_is_list, "list");
ly_add_type_predicate ((void *) &scm_is_rational, "rational");
ly_add_type_predicate ((void *) &scm_is_string, "string");
ly_add_type_predicate ((void *) &scm_is_vector, "vector");
- ly_add_type_predicate ((void *) &Item::is_smob, "Item");
- ly_add_type_predicate ((void *) &Music::is_smob, "Music");
- ly_add_type_predicate ((void *) &Spanner::is_smob, "Spanner");
- ly_add_type_predicate ((void *) &Stream_event::is_smob, "Stream_event");
+ ly_add_type_predicate ((void *) &unsmob<Item>, "Item");
+ ly_add_type_predicate ((void *) &unsmob<Music>, "Music");
+ ly_add_type_predicate ((void *) &unsmob<Spanner>, "Spanner");
+ ly_add_type_predicate ((void *) &unsmob<Stream_event>, "Stream_event");
}
ADD_SCM_INIT_FUNC (func_doc, init_func_doc);
" process it and return the @code{Music_output} object"
" in its final state.")
{
- Global_context *g = Global_context::unsmob (context);
+ Global_context *g = unsmob<Global_context> (context);
LY_ASSERT_SMOB (Global_context, context, 1);
SCM output = g->get_output ();
progress_indication ("\n");
- if (Music_output *od = Music_output::unsmob (output))
+ if (Music_output *od = unsmob<Music_output> (output))
od->process ();
return output;
"Create a translator group and connect it to the global context"
" @var{global}. The translator group is returned.")
{
- Global_context *g = Global_context::unsmob (global);
+ Global_context *g = unsmob<Global_context> (global);
LY_ASSERT_SMOB (Global_context, global, 1);
Translator_group *tg = new Translator_group ();
" block @var{output-def}. The context is returned.")
{
LY_ASSERT_SMOB (Output_def, output_def, 1);
- Output_def *odef = Output_def::unsmob (output_def);
+ Output_def *odef = unsmob<Output_def> (output_def);
Global_context *glob = new Global_context (odef);
LY_ASSERT_SMOB (Music, mus, 1);
LY_ASSERT_SMOB (Global_context, ctx, 2);
- Music *music = Music::unsmob (mus);
+ Music *music = unsmob<Music> (mus);
if (!music)
{
warning (_ ("no music found in score"));
return SCM_BOOL_F;
}
- Global_context *g = Global_context::unsmob (ctx);
+ Global_context *g = unsmob<Global_context> (ctx);
Cpu_timer timer;
message (_ ("Interpreting music..."));
SCM protected_iter = Music_iterator::get_static_get_iterator (music);
- Music_iterator *iter = Music_iterator::unsmob (protected_iter);
+ Music_iterator *iter = unsmob<Music_iterator> (protected_iter);
iter->init_context (music, g);
iter->construct_children ();
ly_symbol2scm ("Prepare"));
events_below ()->register_as_listener (event_source_);
- Context_def *globaldef = Context_def::unsmob (definition_);
+ Context_def *globaldef = unsmob<Context_def> (definition_);
if (!globaldef)
programming_error ("no `Global' context found");
else
void
Global_context::prepare (SCM sev)
{
- Stream_event *ev = Stream_event::unsmob (sev);
- Moment *mom = Moment::unsmob (ev->get_property ("moment"));
+ Stream_event *ev = unsmob<Stream_event> (sev);
+ Moment *mom = unsmob<Moment> (ev->get_property ("moment"));
assert (mom);
Global_context::get_score_context () const
{
return (scm_is_pair (context_list_))
- ? Context::unsmob (scm_car (context_list_))
+ ? unsmob<Context> (scm_car (context_list_))
: 0;
}
SCM grob = scm_cadr (elt);
SCM cell = scm_cddr (elt);
- Grob_property_info (Context::unsmob (context), grob).matched_pop (cell);
+ Grob_property_info (unsmob<Context> (context), grob).matched_pop (cell);
}
grace_settings_ = SCM_EOL;
}
SCM
Grace_music::start_callback (SCM m)
{
- Moment *l = Moment::unsmob (Music_wrapper::length_callback (m));
+ Moment *l = unsmob<Moment> (Music_wrapper::length_callback (m));
Moment gl;
gl.grace_part_ = -(l->main_part_ + l->grace_part_);
return gl.smobbed_copy ();
if (grace_spacing_ && (now.grace_part_ || last_moment_.grace_part_))
{
- Grob *column = Grob::unsmob (get_property ("currentMusicalColumn"));
+ Grob *column = unsmob<Grob> (get_property ("currentMusicalColumn"));
Pointer_group_interface::add_grob (grace_spacing_,
ly_symbol2scm ("columns"),
column);
Grob *primitive = primitives[i].grob ();
Stream_event *event_cause = primitives[i].event_cause ();
int context_info = 0;
- int pitch = Pitch::unsmob (event_cause->get_property ("pitch"))->steps ();
+ int pitch = unsmob<Pitch> (event_cause->get_property ("pitch"))->steps ();
int prefix_set = scm_to_int (primitive->get_property ("prefix-set"));
if (prefix_set & PES_OR_FLEXA)
SCM
Grid_line_interface::print (SCM smobbed_me)
{
- Grob *me = Grob::unsmob (smobbed_me);
+ Grob *me = unsmob<Grob> (smobbed_me);
extract_grob_set (me, "elements", elts);
/* compute common refpoint of elements */
SCM
Grid_line_interface::width (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real staffline = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
Real thick = robust_scm2double (me->get_property ("thickness"), 1.0)
Grid_point_engraver::process_music ()
{
SCM grid_interval = get_property ("gridInterval");
- if (Moment *mom = Moment::unsmob (grid_interval))
+ if (Moment *mom = unsmob<Moment> (grid_interval))
{
Moment now = now_mom ();
{
LY_ASSERT_SMOB (Grob_array, grob_arr, 1);
- Grob_array *me = Grob_array::unsmob (grob_arr);
+ Grob_array *me = unsmob<Grob_array> (grob_arr);
return scm_from_int (me->size ());
}
(SCM grob_arr, SCM index),
"Retrieve the @var{index}th element of @var{grob-arr}.")
{
- Grob_array *me = Grob_array::unsmob (grob_arr);
+ Grob_array *me = unsmob<Grob_array> (grob_arr);
LY_ASSERT_SMOB (Grob_array, grob_arr, 1);
LY_ASSERT_TYPE (scm_is_integer, index, 2);
(SCM grob_arr),
"Return the elements of @var{grob-arr} as a Scheme list.")
{
- Grob_array *me = Grob_array::unsmob (grob_arr);
+ Grob_array *me = unsmob<Grob_array> (grob_arr);
LY_ASSERT_SMOB (Grob_array, grob_arr, 1);
return grob_array_to_list (me);
grob_list_to_grob_array (SCM lst)
{
SCM arr_scm = Grob_array::make_array ();
- Grob_array *ga = Grob_array::unsmob (arr_scm);
+ Grob_array *ga = unsmob<Grob_array> (arr_scm);
for (SCM s = lst; scm_is_pair (s); s = scm_cdr (s))
- ga->add (Grob::unsmob (scm_car (s)));
+ ga->add (unsmob<Grob> (scm_car (s)));
return arr_scm;
}
SCM data = g->get_property_data (axis_offset_symbol (a));
if (!scm_is_number (data)
&& !ly_is_procedure (data)
- && !Simple_closure::is_smob (data))
+ && !unsmob<Simple_closure> (data))
{
g->set_property (axis_offset_symbol (a), proc);
return;
}
- if (ly_is_procedure (data) || Unpure_pure_container::is_smob (data))
+ if (ly_is_procedure (data) || unsmob<Unpure_pure_container> (data))
data = Simple_closure::make_smob (scm_list_1 (data));
- else if (Simple_closure *sc = Simple_closure::unsmob (data))
+ else if (Simple_closure *sc = unsmob<Simple_closure> (data))
data = sc->expression ();
SCM plus = ly_lily_module_constant ("+");
{
SCM data = g->get_property_data (sym);
- if (ly_is_procedure (data) || Unpure_pure_container::is_smob (data))
+ if (ly_is_procedure (data) || unsmob<Unpure_pure_container> (data))
data = Simple_closure::make_smob (scm_list_1 (data));
- else if (Simple_closure *sc = Simple_closure::unsmob (data))
+ else if (Simple_closure *sc = unsmob<Simple_closure> (data))
data = sc->expression ();
else
/*
Grob_info::event_cause () const
{
SCM cause = grob_->get_property ("cause");
- return Stream_event::unsmob (cause);
+ return unsmob<Stream_event> (cause);
}
vector<Context *>
Grob_info::ultimate_event_cause () const
{
SCM cause = grob_->self_scm ();
- while (Grob::is_smob (cause))
+ while (unsmob<Grob> (cause))
{
- cause = Grob::unsmob (cause)->get_property ("cause");
+ cause = unsmob<Grob> (cause)->get_property ("cause");
}
- return Stream_event::unsmob (cause);
+ return unsmob<Stream_event> (cause);
}
bool
"Compare two grob priority queue entries."
" This is an internal function.")
{
- if (Moment::compare (*Moment::unsmob (scm_car (a)),
- *Moment::unsmob (scm_car (b))) < 0)
+ if (Moment::compare (*unsmob<Moment> (scm_car (a)),
+ *unsmob<Moment> (scm_car (b))) < 0)
return SCM_BOOL_T;
else
return SCM_BOOL_F;
Moment now = now_mom ();
SCM start_busy = get_property ("busyGrobs");
SCM busy = start_busy;
- while (scm_is_pair (busy) && *Moment::unsmob (scm_caar (busy)) == now)
+ while (scm_is_pair (busy) && *unsmob<Moment> (scm_caar (busy)) == now)
busy = scm_cdr (busy);
}
SCM start_busy = get_property ("busyGrobs");
SCM busy = start_busy;
- while (scm_is_pair (busy) && *Moment::unsmob (scm_caar (busy)) < now)
+ while (scm_is_pair (busy) && *unsmob<Moment> (scm_caar (busy)) < now)
{
/*
The grob-pq-engraver is not water tight, and stuff like
extern bool debug_property_callbacks;
-#ifndef NDEBUG
+#ifdef DEBUG
static void
print_property_callback_stack ()
{
int line,
char const *fun)
{
-#ifndef NDEBUG
+#ifdef DEBUG
if (ly_is_procedure (modification_callback))
scm_apply_0 (modification_callback,
scm_list_n (self_scm (),
if (do_internal_type_checking_global)
{
if (!ly_is_procedure (v)
- && !Simple_closure::is_smob (v)
- && !Unpure_pure_container::is_smob (v)
+ && !unsmob<Simple_closure> (v)
+ && !unsmob<Unpure_pure_container> (v)
&& !scm_is_eq (v, ly_symbol2scm ("calculation-in-progress")))
type_check_assignment (sym, v, ly_symbol2scm ("backend-type?"));
SCM
Grob::internal_get_property_data (SCM sym) const
{
-#ifndef NDEBUG
+#ifdef DEBUG
if (profile_property_accesses)
note_property_access (&grob_property_lookup_table, sym);
#endif
if (do_internal_type_checking_global && scm_is_pair (handle))
{
SCM val = scm_cdr (handle);
- if (!ly_is_procedure (val) && !Simple_closure::is_smob (val)
- && !Unpure_pure_container::is_smob (val))
+ if (!ly_is_procedure (val) && !unsmob<Simple_closure> (val)
+ && !unsmob<Unpure_pure_container> (val))
type_check_assignment (sym, val, ly_symbol2scm ("backend-type?"));
check_interfaces_for_property (this, sym);
{
SCM val = get_property_data (sym);
-#ifndef NDEBUG
+#ifdef DEBUG
if (scm_is_eq (val, ly_symbol2scm ("calculation-in-progress")))
{
programming_error (to_string ("cyclic dependency: calculation-in-progress encountered for #'%s (%s)",
}
#endif
- if (Unpure_pure_container *upc = Unpure_pure_container::unsmob (val))
+ if (Unpure_pure_container *upc = unsmob<Unpure_pure_container> (val))
val = upc->unpure_part ();
if (ly_is_procedure (val)
- || Simple_closure::is_smob (val))
+ || unsmob<Simple_closure> (val))
{
Grob *me = ((Grob *)this);
val = me->try_callback_on_alist (&me->mutable_property_alist_, sym, val);
if (ly_is_procedure (val))
return call_pure_function (val, scm_list_1 (self_scm ()), start, end);
- if (Unpure_pure_container *upc = Unpure_pure_container::unsmob (val)) {
+ if (Unpure_pure_container *upc = unsmob<Unpure_pure_container> (val)) {
// Do cache, if the function ignores 'start' and 'end'
if (upc->is_unchanging ())
return internal_get_property (sym);
return call_pure_function (val, scm_list_1 (self_scm ()), start, end);
}
- if (Simple_closure *sc = Simple_closure::unsmob (val))
+ if (Simple_closure *sc = unsmob<Simple_closure> (val))
return evaluate_with_simple_closure (self_scm (),
sc->expression (),
true, start, end);
*/
*alist = scm_assq_set_x (*alist, sym, marker);
-#ifndef NDEBUG
+#ifdef DEBUG
if (debug_property_callbacks)
grob_property_callback_stack = scm_cons (scm_list_3 (self_scm (), sym, proc), grob_property_callback_stack);
#endif
SCM value = SCM_EOL;
if (ly_is_procedure (proc))
value = scm_call_1 (proc, self_scm ());
- else if (Simple_closure *sc = Simple_closure::unsmob (proc))
+ else if (Simple_closure *sc = unsmob<Simple_closure> (proc))
{
value = evaluate_with_simple_closure (self_scm (),
sc->expression (),
false, 0, 0);
}
-#ifndef NDEBUG
+#ifdef DEBUG
if (debug_property_callbacks)
grob_property_callback_stack = scm_cdr (grob_property_callback_stack);
#endif
}
else
{
-#ifndef NDEBUG
+#ifdef DEBUG
if (ly_is_procedure (cache_callback))
scm_apply_0 (cache_callback,
scm_list_n (self_scm (),
{
SCM val = scm_cdr (s);
if (ly_is_procedure (val)
- || Simple_closure::is_smob (val)
- || Unpure_pure_container::is_smob (val))
+ || unsmob<Simple_closure> (val)
+ || unsmob<Unpure_pure_container> (val))
{
Grob *me = ((Grob *)this);
val = me->try_callback_on_alist (&me->object_alist_, sym, val);
SCM
call_pure_function (SCM unpure, SCM args, int start, int end)
{
- if (Unpure_pure_container *upc = Unpure_pure_container::unsmob (unpure))
+ if (Unpure_pure_container *upc = unsmob<Unpure_pure_container> (unpure))
{
SCM pure = upc->pure_part ();
- if (Simple_closure *sc = Simple_closure::unsmob (pure))
+ if (Simple_closure *sc = unsmob<Simple_closure> (pure))
{
SCM expr = sc->expression ();
return evaluate_with_simple_closure (scm_car (args), expr, true, start, end);
return pure;
}
- if (Simple_closure *sc = Simple_closure::unsmob (unpure))
+ if (Simple_closure *sc = unsmob<Simple_closure> (unpure))
{
SCM expr = sc->expression ();
return evaluate_with_simple_closure (scm_car (args), expr, true, start, end);
"Return the value for property @var{sym} of @var{grob},"
" but do not process callbacks.")
{
- Grob *sc = Grob::unsmob (grob);
+ Grob *sc = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
3, 0, 0, (SCM grob, SCM sym, SCM val),
"Set @var{sym} in grob @var{grob} to value @var{val}.")
{
- Grob *sc = Grob::unsmob (grob);
+ Grob *sc = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
if (!ly_is_procedure (val)
- && !Simple_closure::is_smob (val)
+ && !unsmob<Simple_closure> (val)
&& !type_check_assignment (sym, val, ly_symbol2scm ("backend-type?")))
error ("typecheck failed");
3, 0, 0, (SCM grob, SCM symlist, SCM val),
"Set nested property @var{symlist} in grob @var{grob} to value @var{val}.")
{
- Grob *sc = Grob::unsmob (grob);
+ Grob *sc = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
" If no value is found, return @var{val} or @code{'()}"
" if @var{val} is not specified.")
{
- Grob *sc = Grob::unsmob (grob);
+ Grob *sc = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
" If no value is found, return @var{val} or @code{'()}"
" if @var{val} is not specified.")
{
- Grob *sc = Grob::unsmob (grob);
- Grob *ref = Grob::unsmob (refp);
+ Grob *sc = unsmob<Grob> (grob);
+ Grob *ref = unsmob<Grob> (refp);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_SMOB (Grob, refp, 2);
" If no value is found, return @var{val} or @code{'()}"
" if @var{val} is not specified.")
{
- Grob *sc = Grob::unsmob (grob);
+ Grob *sc = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
1, 0, 0, (SCM grob),
"Return the interfaces list of grob @var{grob}.")
{
- Grob *sc = Grob::unsmob (grob);
+ Grob *sc = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
" @var{sym}. It returns @code{'()} (end-of-list) if @var{sym}"
" is undefined in @var{grob}.")
{
- Grob *sc = Grob::unsmob (grob);
+ Grob *sc = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
3, 0, 0, (SCM grob, SCM sym, SCM val),
"Set @var{sym} in grob @var{grob} to value @var{val}.")
{
- Grob *sc = Grob::unsmob (grob);
+ Grob *sc = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
1, 0, 0, (SCM grob),
"Get @code{\\layout} definition from grob @var{grob}.")
{
- Grob *sc = Grob::unsmob (grob);
+ Grob *sc = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
" the global default. If unspecified, @code{font-defaults}"
" from the layout block is taken.")
{
- Grob *sc = Grob::unsmob (grob);
+ Grob *sc = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
"Get the extent in @var{axis} direction of @var{grob} relative to"
" the grob @var{refp}.")
{
- Grob *sc = Grob::unsmob (grob);
- Grob *ref = Grob::unsmob (refp);
+ Grob *sc = unsmob<Grob> (grob);
+ Grob *ref = unsmob<Grob> (refp);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_SMOB (Grob, refp, 2);
"Get the extent in @var{axis} direction of @var{grob} relative to"
" the grob @var{refp}, or @code{(0,0)} if empty.")
{
- Grob *sc = Grob::unsmob (grob);
- Grob *ref = Grob::unsmob (refp);
+ Grob *sc = unsmob<Grob> (grob);
+ Grob *ref = unsmob<Grob> (refp);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_SMOB (Grob, refp, 2);
"Get the coordinate in @var{axis} direction of @var{grob} relative"
" to the grob @var{refp}.")
{
- Grob *sc = Grob::unsmob (grob);
- Grob *ref = Grob::unsmob (refp);
+ Grob *sc = unsmob<Grob> (grob);
+ Grob *ref = unsmob<Grob> (refp);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_SMOB (Grob, refp, 2);
"Get the parent of @var{grob}. @var{axis} is 0 for the X-axis,"
" 1@tie{}for the Y-axis.")
{
- Grob *sc = Grob::unsmob (grob);
+ Grob *sc = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_TYPE (is_axis, axis, 2);
3, 0, 0, (SCM grob, SCM axis, SCM parent_grob),
"Set @var{parent-grob} the parent of grob @var{grob} in axis @var{axis}.")
{
- Grob *gr = Grob::unsmob (grob);
- Grob *parent = Grob::unsmob (parent_grob);
+ Grob *gr = unsmob<Grob> (grob);
+ Grob *parent = unsmob<Grob> (parent_grob);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_TYPE (is_axis, axis, 2);
1, 0, 0, (SCM grob),
"Get the mutable properties of @var{grob}.")
{
- Grob *g = Grob::unsmob (grob);
+ Grob *g = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
1, 0, 0, (SCM grob),
"Get the immutable properties of @var{grob}.")
{
- Grob *g = Grob::unsmob (grob);
+ Grob *g = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
1, 0, 0, (SCM grob),
"Return the system grob of @var{grob}.")
{
- Grob *me = Grob::unsmob (grob);
+ Grob *me = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
1, 0, 0, (SCM grob),
"Return the unbroken original grob of @var{grob}.")
{
- Grob *me = Grob::unsmob (grob);
+ Grob *me = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
return me->original () ? me->original ()->self_scm () : me->self_scm ();
1, 0, 0, (SCM grob),
"Kill @var{grob}.")
{
- Grob *me = Grob::unsmob (grob);
+ Grob *me = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
"Translate @var{grob} on axis@tie{}@var{a} over"
" distance@tie{}@var{d}.")
{
- Grob *me = Grob::unsmob (grob);
+ Grob *me = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_TYPE (scm_is_number, d, 2);
1, 0, 0, (SCM grob),
"Return the default font for grob @var{grob}.")
{
- Grob *gr = Grob::unsmob (grob);
+ Grob *gr = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
" for @var{axis}.")
{
- Grob *gr = Grob::unsmob (grob);
+ Grob *gr = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_SMOB (Grob, other, 2);
- Grob *o = Grob::unsmob (other);
+ Grob *o = unsmob<Grob> (other);
LY_ASSERT_TYPE (is_axis, axis, 3);
"Find the common refpoint of @var{grob} and @var{others}"
" (a grob-array) for @var{axis}.")
{
- Grob *gr = Grob::unsmob (grob);
+ Grob *gr = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
LY_ASSERT_SMOB (Grob_array, others, 2);
- Grob_array *ga = Grob_array::unsmob (others);
+ Grob_array *ga = unsmob<Grob_array> (others);
LY_ASSERT_TYPE (is_axis, axis, 3);
Grob *refp = common_refpoint_of_array (ga->array (), gr, Axis (scm_to_int (axis)));
" to the head of this, meaning that it is called"
" using @var{grob} and the previous callback's result.")
{
- Grob *gr = Grob::unsmob (grob);
+ Grob *gr = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
- SCM_ASSERT_TYPE (ly_is_procedure (proc) || Unpure_pure_container::is_smob (proc), proc, SCM_ARG2, __FUNCTION__, "procedure or unpure pure container");
+ SCM_ASSERT_TYPE (ly_is_procedure (proc) || unsmob<Unpure_pure_container> (proc), proc, SCM_ARG2, __FUNCTION__, "procedure or unpure pure container");
LY_ASSERT_TYPE (ly_is_symbol, sym, 3);
chain_callback (gr, proc, sym);
LY_ASSERT_SMOB (Grob, a, 1);
LY_ASSERT_SMOB (Grob, b, 2);
- Grob *ga = Grob::unsmob (a);
- Grob *gb = Grob::unsmob (b);
+ Grob *ga = unsmob<Grob> (a);
+ Grob *gb = unsmob<Grob> (b);
return ly_bool2scm (Grob::vertical_less (ga, gb));
}
"Get the index of the vertical axis group the grob @var{grob} belongs to;"
" return @code{-1} if none is found.")
{
- Grob *gr = Grob::unsmob (grob);
+ Grob *gr = unsmob<Grob> (grob);
LY_ASSERT_SMOB (Grob, grob, 1);
return 0;
SCM stil = get_property ("stencil");
- return Stencil::unsmob (stil);
+ return unsmob<Stencil> (stil);
}
Stencil
SCM stil = get_property ("stencil");
Stencil retval;
- if (Stencil *m = Stencil::unsmob (stil))
+ if (Stencil *m = unsmob<Stencil> (stil))
{
retval = *m;
bool transparent = to_boolean (get_property ("transparent"));
/* Call the scheme procedure stencil-whiteout in scm/stencils.scm */
/* to add a round-filled-box stencil to the stencil list */
retval
- = *Stencil::unsmob (scm_call_1 (ly_lily_module_constant ("stencil-whiteout"),
+ = *unsmob<Stencil> (scm_call_1 (ly_lily_module_constant ("stencil-whiteout"),
retval.smobbed_copy ()));
}
Grob::programming_error (const string &s) const
{
SCM cause = self_scm ();
- while (Grob *g = Grob::unsmob (cause))
+ while (Grob *g = unsmob<Grob> (cause))
cause = g->get_property ("cause");
/* ES TODO: cause can't be Music*/
- if (Music *m = Music::unsmob (cause))
+ if (Music *m = unsmob<Music> (cause))
m->origin ()->programming_error (s);
- else if (Stream_event *ev = Stream_event::unsmob (cause))
+ else if (Stream_event *ev = unsmob<Stream_event> (cause))
ev->origin ()->programming_error (s);
else
::programming_error (s);
Grob::warning (const string &s) const
{
SCM cause = self_scm ();
- while (Grob *g = Grob::unsmob (cause))
+ while (Grob *g = unsmob<Grob> (cause))
cause = g->get_property ("cause");
/* ES TODO: cause can't be Music*/
- if (Music *m = Music::unsmob (cause))
+ if (Music *m = unsmob<Music> (cause))
m->origin ()->warning (s);
- else if (Stream_event *ev = Stream_event::unsmob (cause))
+ else if (Stream_event *ev = unsmob<Stream_event> (cause))
ev->origin ()->warning (s);
else
::warning (s);
SCM
Grob::stencil_height (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return grob_stencil_extent (me, Y_AXIS);
}
SCM
Grob::pure_stencil_height (SCM smob, SCM /* beg */, SCM /* end */)
{
- Grob *me = Grob::unsmob (smob);
- if (Stencil::is_smob (me->get_property_data ("stencil")))
+ Grob *me = unsmob<Grob> (smob);
+ if (unsmob<Stencil> (me->get_property_data ("stencil")))
return grob_stencil_extent (me, Y_AXIS);
return ly_interval2scm (Interval ());
SCM
Grob::y_parent_positioning (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Grob *par = me->get_parent (Y_AXIS);
if (par)
(void) par->get_property ("positioning-done");
SCM
Grob::x_parent_positioning (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Grob *par = me->get_parent (X_AXIS);
if (par)
SCM
Grob::stencil_width (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return grob_stencil_extent (me, X_AXIS);
}
common_refpoint_of_list (SCM elist, Grob *common, Axis a)
{
for (; scm_is_pair (elist); elist = scm_cdr (elist))
- if (Grob *s = Grob::unsmob (scm_car (elist)))
+ if (Grob *s = unsmob<Grob> (scm_car (elist)))
{
if (common)
common = common->common_refpoint (s, a);
SCM
Hairpin::pure_height (SCM smob, SCM, SCM)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real height = robust_scm2double (me->get_property ("height"), 0.0)
* Staff_symbol_referencer::staff_space (me);
SCM
Hairpin::broken_bound_padding (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
Item *r_bound = me->get_bound (RIGHT);
if (r_bound->break_status_dir () != -1)
{
if (!scm_is_pair (hsb))
break;
- span_bars[d] = Grob::unsmob ((d == UP ? scm_car : scm_cdr) (hsb));
+ span_bars[d] = unsmob<Grob> ((d == UP ? scm_car : scm_cdr) (hsb));
break;
}
SCM
Hairpin::print (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
SCM s = me->get_property ("grow-direction");
if (!is_direction (s))
SCM
Hara_kiri_group_spanner::y_extent (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
consider_suicide (me);
return Axis_group_interface::generic_group_extent (me, Y_AXIS);
}
SCM
Hara_kiri_group_spanner::calc_skylines (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
consider_suicide (me);
return Axis_group_interface::calc_skylines (smob);
}
SCM
Hara_kiri_group_spanner::pure_height (SCM smob, SCM start_scm, SCM end_scm)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
int start = robust_scm2int (start_scm, 0);
int end = robust_scm2int (end_scm, INT_MAX);
SCM
Hara_kiri_group_spanner::force_hara_kiri_callback (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
consider_suicide (me);
return scm_from_double (0.0);
}
SCM
Hara_kiri_group_spanner::force_hara_kiri_in_y_parent_callback (SCM smob)
{
- Grob *daughter = Grob::unsmob (smob);
+ Grob *daughter = unsmob<Grob> (smob);
force_hara_kiri_callback (daughter->get_parent (Y_AXIS)->self_scm ());
return scm_from_double (0.0);
}
SCM
Horizontal_bracket::print (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
extract_grob_set (me, "columns", gs);
vector<Grob *> enclosed = gs;
Interface to all fonts (both system fonts and fonts loaded
via Pango).
*/
-class All_font_metrics
+class All_font_metrics : public Smob<All_font_metrics>
{
Scheme_hash_table *otf_dict_;
File_path search_path_;
All_font_metrics (All_font_metrics const &);
public:
+ SCM mark_smob ();
Index_to_charcode_map const *get_index_to_charcode_map (const string &filename,
int face_index,
override other ctor
*/
TRANSLATOR_DECLARATIONS (Engraver);
- static Engraver *unsmob (SCM eng) {
- return dynamic_cast<Engraver *> (Translator::unsmob (eng));
- }
- static bool is_smob (SCM eng) {
- return Translator::is_smob (eng) && unsmob (eng);
- }
};
#define make_item(x, cause) internal_make_item (ly_symbol2scm (x), cause, x, __FILE__, __LINE__, __FUNCTION__)
virtual Moment now_mom () const;
virtual Context *get_default_interpreter (const string &context_id = "");
- static Global_context *unsmob (SCM x) {
- return dynamic_cast<Global_context *> (Context::unsmob (x));
- }
- static bool is_smob (SCM x) {
- return Context::is_smob (x) && unsmob (x);
- }
-
Moment previous_moment () const;
protected:
Moment prev_mom_;
+++ /dev/null
-/*
- This file is part of LilyPond, the GNU music typesetter.
-
- Copyright (C) 1999--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
- LilyPond is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- LilyPond is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef GROUP_INTERFACE_HH
-#define GROUP_INTERFACE_HH
-
-#include "grob.hh"
-#include "std-string.hh"
-/**
- Look at Score element ELT as thing which has a list property called
- NAME_. Normally the list would contain Grobs, but
- sometimes it can be different things.
-
- todo: reename as list_interface?
-*/
-
-struct Group_interface
-{
-public:
- static int count (Grob *, SCM);
- static void add_thing (Grob *, SCM, SCM);
-};
-
-#endif /* GROUP_INTERFACE_HH */
-
Item (SCM);
Item (Item const &);
- static Item *unsmob (SCM g) {
- return dynamic_cast <Item *> (Grob::unsmob (g));
- }
- static bool is_smob (SCM g) {
- return Grob::is_smob (g) && unsmob (g);
- }
-
virtual Grob *clone () const;
static bool is_non_musical (Grob *);
#define set_object(x, y) internal_set_object (ly_symbol2scm (x), y)
#define del_property(x) internal_del_property (ly_symbol2scm (x))
-#ifndef NDEBUG
+#ifdef DEBUG
/*
TODO: include modification callback support here, perhaps
through intermediate Grob::instrumented_set_property( .. __LINE__ ).
} \
}
+template <class T>
+T *unsmob (SCM var);
+
void ly_wrong_smob_arg (bool pred (SCM), SCM var, int number, const char *fun);
+// Do not call this directly.
+// Use LY_ASSERT_SMOB() which supplies the function name automatically.
+template <class T>
+inline T *ly_assert_smob (SCM var, int number, const char *fun)
+{
+ T *smob = unsmob<T> (var);
+ if (smob)
+ return smob;
+
+ ly_wrong_smob_arg (T::is_smob, var, number, fun);
+ return 0;
+}
+
// Could be just implemented using LY_ASSERT_TYPE, but this variant
// saves a slight amount of code
#define LY_ASSERT_SMOB(klass, var, number) \
- { \
- if (!klass::is_smob (var)) \
- ly_wrong_smob_arg (klass::is_smob, var, number, __FUNCTION__); \
- }
-
-// This variant is for the case where klass::unsmob might actually be
-// situated in a base class of klass
-#define LY_ASSERT_DERIVED_SMOB(klass, var, number) \
- { \
- if (!derived_unsmob<klass> (var)) \
- ly_wrong_smob_arg (klass::is_smob, var, number, __FUNCTION__); \
- }
+ ly_assert_smob<klass> (var, number, __FUNCTION__)
#endif /* LILY_GUILE_MACROS_HH */
Listener (SCM callback, SCM target)
: callback_ (callback), target_ (target) { }
- void listen (SCM ev) const { scm_call_2 (callback_, target_, ev); }
-
- LY_DECLARE_SMOB_PROC (1, 0, 0, (SCM self, SCM ev))
+ LY_DECLARE_SMOB_PROC (&Listener::listen, 1, 0, 0)
+ SCM listen (SCM ev)
{
- Listener::unsmob (self)->listen (ev);
+ scm_call_2 (callback_, target_, ev);
return SCM_UNSPECIFIED;
}
static SCM equal_p (SCM a, SCM b)
{
- return *Listener::unsmob (a) == *Listener::unsmob (b)
+ return *unchecked_unsmob (a) == *unchecked_unsmob (b)
? SCM_BOOL_T : SCM_BOOL_F;
}
};
template <class T, void (T::*callback)(SCM)>
static void trampoline (SCM target, SCM ev)
{
- T *t = derived_unsmob<T> (target);
- LY_ASSERT_DERIVED_SMOB (T, target, 1);
+ T *t = unsmob<T> (target);
+ LY_ASSERT_SMOB (T, target, 1);
(t->*callback) (ev);
}
// The same, but for callbacks for translator listeners which get
// the unpacked event which, in turn, gets protected previously
- T *t = derived_unsmob<T> (target);
- LY_ASSERT_DERIVED_SMOB (T, target, 1);
+ T *t = unsmob<T> (target);
+ LY_ASSERT_SMOB (T, target, 1);
LY_ASSERT_SMOB (Stream_event, event, 2);
t->protect_event (event);
- (t->*callback) (Stream_event::unsmob (event));
+ (t->*callback) (unsmob<Stream_event> (event));
}
Callback_wrapper (void (*trampoline) (SCM, SCM)) : trampoline_ (trampoline)
{ } // Private constructor, use only in make_smob
public:
- LY_DECLARE_SMOB_PROC (2, 0, 0, (SCM self, SCM target, SCM ev))
+ LY_DECLARE_SMOB_PROC (&Callback_wrapper::call, 2, 0, 0)
+ SCM call (SCM target, SCM ev)
{
- unsmob (self)->trampoline_ (target, ev);
+ trampoline_ (target, ev);
return SCM_UNSPECIFIED;
}
// Callback wrappers are for an unchanging entity, so we do the Lisp
Moment get_length () const;
Moment start_mom () const;
void print () const;
- static Music *unsmob (SCM m) {
- return dynamic_cast <Music *> (Prob::unsmob (m));
- }
- static bool is_smob (SCM m) {
- return Prob::is_smob (m) && unsmob (m);
- }
/// Transpose, with the interval central C to #p#
void transpose (Pitch p);
DECLARE_CLASSNAME (Paper_score);
- static Paper_score *unsmob (SCM ps) {
- return dynamic_cast <Paper_score *> (Music_output::unsmob (ps));
- }
- static bool is_smob (SCM ps) {
- return Music_output::is_smob (ps) && unsmob (ps);
- }
-
Output_def *layout () const;
System *root_system () const;
~Performance ();
DECLARE_CLASSNAME (Performance);
- static Performance *unsmob (SCM p) {
- return dynamic_cast <Performance *> (Music_output::unsmob (p));
- }
- static bool is_smob (SCM p) {
- return Music_output::is_smob (p) && unsmob (p);
- }
-
void add_element (Audio_element *p);
virtual void process ();
void remap_grace_durations ();
VIRTUAL_COPY_CONSTRUCTOR (Translator, Performer);
friend class Performer_group;
Performer_group *get_daddy_performer () const;
- static Performer *unsmob (SCM perf) {
- return dynamic_cast <Performer *> (Translator::unsmob (perf));
- }
- static bool is_smob (SCM perf) {
- return Translator::is_smob (perf) && unsmob (perf);
- }
protected:
virtual void announce_element (Audio_element_info);
class Protected_scm
{
SCM object_;
+ static SCM list_;
+ static SCM last_;
Protected_scm (Protected_scm const &);
public:
Protected_scm ();
CALLING INTERFACE
- Common public methods to C++ smob objects:
+ Common global functions for accessing C++ smob objects:
- - unsmob (SCM x) - unpacks X and returns pointer to the C++ object,
- or 0 if it has the wrong type. This can be used as a boolean
- condition at C++ level.
- - smob_p (SCM x) returns #t or #f at Scheme level.
+ - unsmob<T> (SCM x) - unpack X and return a pointer to the C++ object,
+ or 0 if it has the wrong type.
IMPLEMENTATION
static Scm_init scm_init_;
static void init (void);
static string smob_name_;
+protected:
static Super *unchecked_unsmob (SCM s)
{
return reinterpret_cast<Super *> (SCM_SMOB_DATA (s));
}
-protected:
// reference scm_init_ in smob_tag which is sure to be called. The
// constructor, in contrast, may not be called at all in classes
// like Smob1.
static SCM equal_p (SCM, SCM);
int print_smob (SCM, scm_print_state *);
static int print_trampoline (SCM, SCM, scm_print_state *);
+ static void smob_proc_init (scm_t_bits) { };
// type_p_name_ can be overriden in the Super class with a static
// const char [] string. This requires both a declaration in the
static const int type_p_name_ = 0;
// LY_DECLARE_SMOB_PROC is used in the Super class definition for
- // making a smob callable like a function. Declaration has to be
- // public. It may be either be completed with a semicolon in which
- // case a definition of the member function smob_proc has to be done
- // outside of the class body, or the semicolon is left off and an
- // inline function body is added immediately below. It would be
- // nice if this were a non-static member function but it would seem
- // tricky to do the required trampolining for unsmobbing the first
- // argument of the callback and using it as a this pointer.
-#define LY_DECLARE_SMOB_PROC(REQ, OPT, VAR, ARGLIST) \
- static const int smob_proc_signature_ = ((REQ)<<8)|((OPT)<<4)|(VAR); \
- static SCM smob_proc ARGLIST
-
- // a separate LY_DEFINE_SMOB_PROC seems sort of pointless as it
- // would just result in SCM CLASS::smob_proc ARGLIST
- //
- // The default case without function functionality is recognized by
- // smob_proc_signature being -1.
- static const int smob_proc = 0;
- static const int smob_proc_signature_ = -1;
+ // making a smob callable like a function. Its first argument is a
+ // function member pointer constant, to a function taking the
+ // correct number of SCM arguments and returning SCM. The function
+ // itself has to be defined separately.
+
+#define LY_DECLARE_SMOB_PROC(PMF, REQ, OPT, VAR) \
+ static void smob_proc_init (scm_t_bits smob_tag) \
+ { \
+ scm_set_smob_apply (smob_tag, \
+ (scm_t_subr)smob_trampoline<PMF>, \
+ REQ, OPT, VAR); \
+ }
+
+ // Well, function template argument packs are a C++11 feature. So
+ // we just define a bunch of trampolines manually.
+ template <SCM (Super::*pmf)(void)>
+ static SCM smob_trampoline (SCM self)
+ {
+ return (Super::unchecked_unsmob (self)->*pmf)();
+ }
+ template <SCM (Super::*pmf)(SCM)>
+ static SCM smob_trampoline (SCM self, SCM arg1)
+ {
+ return (Super::unchecked_unsmob (self)->*pmf)(arg1);
+ }
+ template <SCM (Super::*pmf)(SCM, SCM)>
+ static SCM smob_trampoline (SCM self, SCM arg1, SCM arg2)
+ {
+ return (Super::unchecked_unsmob (self)->*pmf)(arg1, arg2);
+ }
+ template <SCM (Super::*pmf)(SCM, SCM, SCM)>
+ static SCM smob_trampoline (SCM self, SCM arg1, SCM arg2, SCM arg3)
+ {
+ return (Super::unchecked_unsmob (self)->*pmf)(arg1, arg2, arg3);
+ }
-public:
static bool is_smob (SCM s)
{
return SCM_SMOB_PREDICATE (smob_tag (), s);
{
return is_smob (s) ? SCM_BOOL_T : SCM_BOOL_F;
}
- static Super *unsmob (SCM s)
- {
- return is_smob (s) ? Super::unchecked_unsmob (s) : 0;
- }
-};
-// derived_unsmob includes a dynamic_cast:
+ template <class T>
+ friend T *unsmob (SCM s);
+
+ template <class T>
+ friend T *ly_assert_smob (SCM s, int number, const char *fun);
+};
template <class T>
-inline T *derived_unsmob (SCM arg)
+inline T *unsmob (SCM s)
{
- return dynamic_cast<T *> (T::unsmob (arg));
+ return T::is_smob (s) ? dynamic_cast<T *> (T::unchecked_unsmob (s)) : 0;
}
// Simple smobs
// least some, so they are apparently not protected in spite of being
// included in the GC scans. So it would appear that scanning smobs
// is not equivalent to marking them. Ugh.
-#if !defined(NDEBUG) && !GUILEV2
+#if defined(DEBUG) && !GUILEV2
#define ASSERT_LIVE_IS_ALLOWED(arg) \
do { \
static parsed_dead pass_here; \
SCM
Smob_base<Super>::mark_trampoline (SCM arg)
{
- Super *ptr = Super::unsmob (arg);
+ Super *ptr = unsmob<Super> (arg);
if (ptr)
return ptr->mark_smob ();
return SCM_UNDEFINED;
int
Smob_base<Super>::print_trampoline (SCM arg, SCM port, scm_print_state *p)
{
- Super *ptr = Super::unsmob (arg);
+ Super *ptr = unsmob<Super> (arg);
if (ptr)
return ptr->print_smob (port, p);
return 0;
if (&Super::free_smob != &Smob_base<Super>::free_smob)
scm_set_smob_free (smob_tag_, Super::free_smob);
- // Old GCC versions get their type lattice for pointers-to-members
- // tangled up to a degree where we need to typecast _both_ covariant
- // types in order to be able to compare them. The other comparisons
- // are for static member functions and thus are ordinary function
- // pointers which work without those contortions.
- if (static_cast<SCM (Super::*)()>(&Super::mark_smob) !=
- static_cast<SCM (Super::*)()>(&Smob_base<Super>::mark_smob))
+ if (&Super::mark_smob != &Smob_base<Super>::mark_smob)
scm_set_smob_mark (smob_tag_, Super::mark_trampoline);
scm_set_smob_print (smob_tag_, Super::print_trampoline);
if (&Super::equal_p != &Smob_base<Super>::equal_p)
scm_c_export (Super::type_p_name_, NULL);
}
ly_add_type_predicate ((void *) is_smob, smob_name_.c_str ());
- if (Super::smob_proc_signature_ >= 0)
- scm_set_smob_apply (smob_tag_,
- (scm_t_subr)Super::smob_proc,
- Super::smob_proc_signature_ >> 8,
- (Super::smob_proc_signature_ >> 4)&0xf,
- Super::smob_proc_signature_ & 0xf);
+ Super::smob_proc_init (smob_tag_);
}
#endif
DECLARE_SCHEME_CALLBACK (bounds_width, (SCM));
DECLARE_SCHEME_CALLBACK (kill_zero_spanned_time, (SCM));
- static Spanner *unsmob (SCM s) {
- return dynamic_cast <Spanner *> (Grob::unsmob (s));
- }
- static bool is_smob (SCM s) {
- return Grob::is_smob (s) && unsmob (s);
- }
-
vector<Spanner *> broken_intos_;
vsize get_break_index () const;
efficient to add "fresh" stencils to what you're going to build.
* Do not create Stencil objects on the heap. That includes passing
- around Stencil* which are produced by Stencil::unsmob(). Either
+ around Stencil* which are produced by unsmob<Stencil>(). Either
copy Stencil objects, or use SCM references.
* Empty stencils have empty dimensions. If add_at_edge is used to
Stream_event ();
VIRTUAL_COPY_CONSTRUCTOR (Stream_event, Stream_event);
- static Stream_event *unsmob (SCM s) {
- return dynamic_cast <Stream_event *> (Prob::unsmob (s));
- }
- static bool is_smob (SCM s) {
- return Prob::is_smob (s) && unsmob (s);
- }
-
Stream_event (SCM event_class, SCM immutable_props = SCM_EOL);
Stream_event (SCM class_name, Input *);
+++ /dev/null
-/*
- This file is part of LilyPond, the GNU music typesetter.
-
- Copyright (C) 1998--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>,
- Erik Sandberg <mandolaerik@gmail.com>
-
- LilyPond is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- LilyPond is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef TIME_SCALED_MUSIC_ITERATOR_HH
-#define TIME_SCALED_MUSIC_ITERATOR_HH
-
-#include "sequential-iterator.hh"
-
-class Time_scaled_music_iterator : public Sequential_iterator
-{
-public:
- DECLARE_SCHEME_CALLBACK (constructor, ());
- /* construction */
- DECLARE_CLASSNAME (Time_scaled_music_iterator);
- Time_scaled_music_iterator ();
-protected:
- virtual SCM get_music_list () const;
-private:
-};
-
-#endif /* TIME_SCALED_MUSIC_ITERATOR_HH */
" to the location in @var{sip}. @var{msg} is interpreted"
" similar to @code{format}'s argument, using @var{rest}.")
{
- Input *ip = Input::unsmob (sip);
+ Input *ip = unsmob<Input> (sip);
LY_ASSERT_SMOB (Input, sip, 1);
LY_ASSERT_TYPE (scm_is_string, msg, 2);
" to the location in @var{sip}. @var{msg} is interpreted"
" similar to @code{format}'s argument, using @var{rest}.")
{
- Input *ip = Input::unsmob (sip);
+ Input *ip = unsmob<Input> (sip);
LY_ASSERT_SMOB (Input, sip, 1);
LY_ASSERT_TYPE (scm_is_string, msg, 2);
" @code{(file-name line char column)}.")
{
LY_ASSERT_SMOB (Input, sip, 1);
- Input *ip = Input::unsmob (sip);
+ Input *ip = unsmob<Input> (sip);
int l, ch, col, offset = 0;
ip->get_counts (&l, &ch, &col, &offset);
{
LY_ASSERT_SMOB (Input, sip, 1);
- Input *ip = Input::unsmob (sip);
+ Input *ip = unsmob<Input> (sip);
return scm_list_5 (ly_string2scm (ip->file_string ()),
scm_from_int (ip->line_number ()),
SCM
Input::equal_p (SCM sa, SCM sb)
{
- Input *a = unsmob (sa);
- Input *b = unsmob (sb);
+ Input *a = unsmob<Input> (sa);
+ Input *b = unsmob<Input> (sb);
if (a->get_source_file () == b->get_source_file ()
&& a->start () == b->start ()
&& a->end () == b->end ())
{
text_spanner_ = make_spanner ("InstrumentName", SCM_EOL);
- Grob *col = Grob::unsmob (get_property ("currentCommandColumn"));
+ Grob *col = unsmob<Grob> (get_property ("currentCommandColumn"));
text_spanner_->set_bound (LEFT, col);
text_spanner_->set_property ("text", short_text_);
text_spanner_->set_property ("long-text", long_text_);
/*
UGH, should handle this in Score_engraver.
*/
- Grob *system = Grob::unsmob (get_property ("rootSystem"));
+ Grob *system = unsmob<Grob> (get_property ("rootSystem"));
if (system)
Axis_group_interface::add_element (system, text_spanner_);
else
axis_groups_[i]);
text_spanner_->set_bound (RIGHT,
- Grob::unsmob (get_property ("currentCommandColumn")));
+ unsmob<Grob> (get_property ("currentCommandColumn")));
Pointer_group_interface::set_ordered (text_spanner_,
ly_symbol2scm ("elements"),
1, 0, 0, (SCM g),
"Is @var{g} an @code{Item} object?")
{
- Grob *me = Grob::unsmob (g);
+ Grob *me = unsmob<Grob> (g);
bool b = dynamic_cast<Item *> (me);
return ly_bool2scm (b);
}
" @code{1}@tie{}beginning of line.")
{
LY_ASSERT_SMOB (Item, it, 1);
- Item *me = Item::unsmob (it);
+ Item *me = unsmob<Item> (it);
return scm_from_int (me->break_status_dir ());
}
" associated with this @code{Item}.")
{
LY_ASSERT_SMOB (Item, it, 1);
- Item *me = Item::unsmob (it);
+ Item *me = unsmob<Item> (it);
if (Paper_column *col = me->get_column ())
return col->self_scm ();
continue;
SCM live_scm = Grob_array::make_array ();
- Grob_array *live = Grob_array::unsmob (live_scm);
+ Grob_array *live = unsmob<Grob_array> (live_scm);
SCM dead_scm = Grob_array::make_array ();
- Grob_array *dead = Grob_array::unsmob (dead_scm);
+ Grob_array *dead = unsmob<Grob_array> (dead_scm);
for (vsize j = 0; j < group_spanners_.size (); ++j)
{
SCM
Key_signature_interface::print (SCM smob)
{
- Item *me = Item::unsmob (smob);
+ Item *me = unsmob<Item> (smob);
Real inter = Staff_symbol_referencer::staff_space (me) / 2.0;
first = current;
// must keep track of accidentals in spacing problem
- Grob *acc_gr = Grob::unsmob (current->get_object ("accidental-grob"));
+ Grob *acc_gr = unsmob<Grob> (current->get_object ("accidental-grob"));
if (acc_gr && i > 0)
{
Interval acc_ext = acc_gr->extent (acc_gr, X_AXIS);
if (i < primitives.size () - 1)
{
Item *next = dynamic_cast<Item *> (primitives[i + 1].grob ());
- Grob *acc_gr = Grob::unsmob (next->get_object ("accidental-grob"));
+ Grob *acc_gr = unsmob<Grob> (next->get_object ("accidental-grob"));
if (acc_gr)
{
Interval acc_ext = acc_gr->extent (acc_gr, X_AXIS);
* a single note head (attached as an articulation inside a chord) */
Stream_event *tie_ev = event_;
Grob *head = inf.grob ();
- Stream_event *note_ev = Stream_event::unsmob (head->get_property ("cause"));
+ Stream_event *note_ev = unsmob<Stream_event> (head->get_property ("cause"));
if (!tie_ev && note_ev && note_ev->in_event_class ("note-event"))
{
SCM articulations = note_ev->get_property ("articulations");
for (SCM s = articulations; !tie_ev && scm_is_pair (s); s = scm_cdr (s))
{
- Stream_event *ev = Stream_event::unsmob (scm_car (s));
+ Stream_event *ev = unsmob<Stream_event> (scm_car (s));
if (ev && ev->in_event_class ("laissez-vibrer-event"))
tie_ev = ev;
}
Pointer_group_interface::add_grob (lv_column_, ly_symbol2scm ("ties"),
lv_tie);
- if (is_direction (Stream_event::unsmob (cause)->get_property ("direction")))
+ if (is_direction (unsmob<Stream_event> (cause)->get_property ("direction")))
{
- Direction d = to_dir (Stream_event::unsmob (cause)->get_property ("direction"));
+ Direction d = to_dir (unsmob<Stream_event> (cause)->get_property ("direction"));
lv_tie->set_property ("direction", scm_from_int (d));
}
assert (!span_);
span_ = make_spanner ("LedgerLineSpanner", SCM_EOL);
- span_->set_bound (LEFT, Grob::unsmob (get_property ("currentCommandColumn")));
+ span_->set_bound (LEFT, unsmob<Grob> (get_property ("currentCommandColumn")));
}
void
{
if (span_)
{
- span_->set_bound (RIGHT, Grob::unsmob (get_property ("currentCommandColumn")));
+ span_->set_bound (RIGHT, unsmob<Grob> (get_property ("currentCommandColumn")));
span_ = 0;
}
}
SCM
Ledger_line_spanner::set_spacing_rods (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
// find size of note heads.
Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
SCM
Ledger_line_spanner::print (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
extract_grob_set (me, "note-heads", heads);
Axis a = Axis (i);
common[a] = common_refpoint_of_array (heads, me, a);
for (vsize i = heads.size (); i--;)
- if (Grob *g = Grob::unsmob (me->get_object ("accidental-grob")))
+ if (Grob *g = unsmob<Grob> (me->get_object ("accidental-grob")))
common[a] = common[a]->common_refpoint (g, a);
}
Interval x_extent = ledger_size;
if (i == 0)
- if (Grob *g = Grob::unsmob (h->get_object ("accidental-grob")))
+ if (Grob *g = unsmob<Grob> (h->get_object ("accidental-grob")))
{
Interval accidental_size = g->extent (common[X_AXIS], X_AXIS);
Real d
return -1;
/* produce requested token */
- yylloc = *Input::unsmob (scm_caar (extra_tokens_));
+ yylloc = *unsmob<Input> (scm_caar (extra_tokens_));
int type = scm_to_int (scm_cadar (extra_tokens_));
yylval = scm_cddar (extra_tokens_);
extra_tokens_ = scm_cdr (extra_tokens_);
return i;
SCM sid = lookup_identifier (str);
- if (Music *m = Music::unsmob (sid))
+ if (Music *m = unsmob<Music> (sid))
{
m->set_spot (override_input (here_input ()));
}
Lily_lexer::scan_shorthand (const string &str)
{
SCM sid = lookup_identifier (str);
- if (Music *m = Music::unsmob (sid))
+ if (Music *m = unsmob<Music> (sid))
{
m->set_spot (override_input (here_input ()));
}
int
Lily_lexer::scan_scm_id (SCM sid)
{
- if (Music_function *fun = Music_function::unsmob (sid))
+ if (Music_function *fun = unsmob<Music_function> (sid))
{
int funtype = SCM_FUNCTION;
if (scm_is_pair (handle)) {
yylval = scm_cdr (handle);
- if (Pitch::is_smob (yylval))
+ if (unsmob<Pitch> (yylval))
return (YYSTATE == notes) ? NOTENAME_PITCH : TONICNAME_PITCH;
else if (scm_is_symbol (yylval))
return DRUM_PITCH;
p = scm_cdr (p))
{
SCM v = scm_car (p);
- if (Music *m = Music::unsmob (v))
+ if (Music *m = unsmob<Music> (v))
{
- if (!Input::is_smob (m->get_property ("origin")))
+ if (!unsmob<Input> (m->get_property ("origin")))
m->set_spot (override_input (here_input ()));
}
sval = SCM_UNSPECIFIED;
}
- if (Music *m = Music::unsmob (sval))
+ if (Music *m = unsmob<Music> (sval))
{
- if (!Input::is_smob (m->get_property ("origin")))
+ if (!unsmob<Input> (m->get_property ("origin")))
m->set_spot (override_input (here_input ()));
}
primitives_.clear ();
ligature_ = 0;
}
- last_bound_ = Grob::unsmob (get_property ("currentMusicalColumn"));
+ last_bound_ = unsmob<Grob> (get_property ("currentMusicalColumn"));
if (ligature_)
{
prev_start_event_ = events_drul_[START];
ligature_ = create_ligature_spanner ();
- Grob *bound = Grob::unsmob (get_property ("currentMusicalColumn"));
+ Grob *bound = unsmob<Grob> (get_property ("currentMusicalColumn"));
if (!bound)
events_drul_[START]->origin ()->warning (_ ("no left bound"));
else
string type = predicate_to_typename ((void *) pred);
if (pred (var))
{
- // Uh oh. derived_unsmob <T> delivered 0, yet
- // T::is_smob delivers true. This means that T::is_smob is a
+ // Uh oh. unsmob<T> delivered 0, yet
+ // unsmob<T> delivers true. This means that unsmob<T> is a
// matching check from a base class of T, but var is of an
// incompatible derived type.
type = string (_ ("Wrong kind of ")).append (type);
{
LY_ASSERT_SMOB (Lily_lexer, lexer, 1);
- Lily_lexer *lex = Lily_lexer::unsmob (lexer);
+ Lily_lexer *lex = unsmob<Lily_lexer> (lexer);
return lex->keyword_list ();
}
main_input_level_ = 0;
extra_tokens_ = SCM_EOL;
- if (Input::is_smob (override_input))
- override_input_ = *Input::unsmob (override_input);
+ if (unsmob<Input> (override_input))
+ override_input_ = *unsmob<Input> (override_input);
smobify_self ();
1, 0, 0, (SCM parser_smob),
"Return the lexer for @var{parser-smob}.")
{
- Lily_parser *parser = Lily_parser::unsmob (parser_smob);
+ Lily_parser *parser = unsmob<Lily_parser> (parser_smob);
return parser->lexer_->self_scm ();
}
" it becomes the source of all music expressions inside.")
{
LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
- Lily_parser *parser = Lily_parser::unsmob (parser_smob);
+ Lily_parser *parser = unsmob<Lily_parser> (parser_smob);
if (SCM_UNBNDP (closures))
closures = SCM_EOL;
else
{
LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
- Lily_parser *parser = Lily_parser::unsmob (parser_smob);
+ Lily_parser *parser = unsmob<Lily_parser> (parser_smob);
LY_ASSERT_TYPE (ly_is_symbol, symbol, 2);
{
LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
- Lily_parser *parser = Lily_parser::unsmob (parser_smob);
+ Lily_parser *parser = unsmob<Lily_parser> (parser_smob);
LY_ASSERT_TYPE (ly_is_symbol, symbol, 2);
" Upon failure, throw @code{ly-file-failed} key.")
{
LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
- Lily_parser *parser = Lily_parser::unsmob (parser_smob);
+ Lily_parser *parser = unsmob<Lily_parser> (parser_smob);
LY_ASSERT_TYPE (scm_is_string, ly_code, 2);
if (!parser->lexer_->is_clean ())
" @var{filename} and @var{line} are optional source indicators.")
{
LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
- Lily_parser *parser = Lily_parser::unsmob (parser_smob);
+ Lily_parser *parser = unsmob<Lily_parser> (parser_smob);
LY_ASSERT_TYPE (scm_is_string, ly_code, 2);
string fn;
if (SCM_UNBNDP (filename) || !scm_is_string (filename))
" Scheme expressions (@code{$} instead of @code{#}).")
{
LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
- Lily_parser *parser = Lily_parser::unsmob (parser_smob);
+ Lily_parser *parser = unsmob<Lily_parser> (parser_smob);
LY_ASSERT_TYPE (scm_is_string, ly_code, 2);
parser->include_string (ly_scm2string (ly_code));
" if the current mode is notes.")
{
LY_ASSERT_SMOB (Lily_parser, parser, 1);
- Lily_parser *p = Lily_parser::unsmob (parser);
+ Lily_parser *p = unsmob<Lily_parser> (parser);
if (p->lexer_->is_note_state ())
{
"Return the base name of the output file.")
{
LY_ASSERT_SMOB (Lily_parser, parser, 1);
- Lily_parser *p = Lily_parser::unsmob (parser);
+ Lily_parser *p = unsmob<Lily_parser> (parser);
return ly_string2scm (p->output_basename_);
}
"Display an error message and make the parser fail.")
{
LY_ASSERT_SMOB (Lily_parser, parser, 1);
- Lily_parser *p = Lily_parser::unsmob (parser);
+ Lily_parser *p = unsmob<Lily_parser> (parser);
LY_ASSERT_TYPE (scm_is_string, msg, 2);
string s = ly_scm2string (msg);
- Input *i = Input::unsmob (input);
+ Input *i = unsmob<Input> (input);
if (i)
p->parser_error (*i, s);
else
"Clear the error flag for the parser.")
{
LY_ASSERT_SMOB (Lily_parser, parser, 1);
- Lily_parser *p = Lily_parser::unsmob (parser);
+ Lily_parser *p = unsmob<Lily_parser> (parser);
p->error_level_ = 0;
p->lexer_->error_level_ = 0;
"Does @var{parser} have an error flag?")
{
LY_ASSERT_SMOB (Lily_parser, parser, 1);
- Lily_parser *p = Lily_parser::unsmob (parser);
+ Lily_parser *p = unsmob<Lily_parser> (parser);
return scm_from_bool (p->error_level_ || p->lexer_->error_level_);
}
get_layout (Lily_parser *parser)
{
SCM id = parser->lexer_->lookup_identifier ("$defaultlayout");
- Output_def *layout = Output_def::unsmob (id);
+ Output_def *layout = unsmob<Output_def> (id);
layout = layout ? layout->clone () : new Output_def;
layout->set_variable (ly_symbol2scm ("is-layout"), SCM_BOOL_T);
get_midi (Lily_parser *parser)
{
SCM id = parser->lexer_->lookup_identifier ("$defaultmidi");
- Output_def *layout = Output_def::unsmob (id);
+ Output_def *layout = unsmob<Output_def> (id);
layout = layout ? layout->clone () : new Output_def;
layout->set_variable (ly_symbol2scm ("is-midi"), SCM_BOOL_T);
return layout;
{
SCM papers = parser->lexer_->lookup_identifier ("$papers");
Output_def *layout = (SCM_UNBNDP (papers) || scm_is_null (papers))
- ? 0 : Output_def::unsmob (scm_car (papers));
+ ? 0 : unsmob<Output_def> (scm_car (papers));
SCM default_paper = parser->lexer_->lookup_identifier ("$defaultpaper");
- layout = layout ? layout : Output_def::unsmob (default_paper);
+ layout = layout ? layout : unsmob<Output_def> (default_paper);
layout = layout ? dynamic_cast<Output_def *> (layout->clone ()) : new Output_def;
layout->set_variable (ly_symbol2scm ("is-paper"), SCM_BOOL_T);
SCM
Line_spanner::calc_bound_info (SCM smob, Direction dir)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
Grob *commonx = me->get_bound (LEFT)->common_refpoint (me->get_bound (RIGHT), X_AXIS);
commonx = me->common_refpoint (commonx, X_AXIS);
? Axis_group_interface::generic_bound_extent (bound_grob, commonx, X_AXIS)
: robust_relative_extent (bound_grob, commonx, X_AXIS)).linear_combination (attach);
- Grob *acc = Grob::unsmob (bound_grob->get_object ("accidental-grob"));
+ Grob *acc = unsmob<Grob> (bound_grob->get_object ("accidental-grob"));
if (acc && to_boolean (ly_assoc_get (ly_symbol2scm ("end-on-accidental"), details, SCM_BOOL_F)))
x_coord = robust_relative_extent (acc, commonx, X_AXIS).linear_combination (attach);
- Grob *dot = Grob::unsmob (bound_grob->get_object ("dot"));
+ Grob *dot = unsmob<Grob> (bound_grob->get_object ("dot"));
if (dot && to_boolean (ly_assoc_get (ly_symbol2scm ("start-at-dot"), details, SCM_BOOL_F)))
x_coord = robust_relative_extent (dot, commonx, X_AXIS).linear_combination (attach);
SCM
Line_spanner::calc_cross_staff (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
if (!me)
return SCM_BOOL_F;
Line_spanner::calc_left_bound_info_and_text (SCM smob)
{
SCM alist = Line_spanner::calc_bound_info (smob, LEFT);
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
SCM text = me->get_property ("text");
if (Text_interface::is_markup (text)
SCM
Line_spanner::print (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
// Triggers simple-Y calculations
bool simple_y = to_boolean (me->get_property ("simple-Y")) && !to_boolean (me->get_property ("cross-staff"));
bounds[d], SCM_BOOL_F), 0.0);
arrows[d] = to_boolean (ly_assoc_get (ly_symbol2scm ("arrow"),
bounds[d], SCM_BOOL_F));
- stencils[d] = Stencil::unsmob (ly_assoc_get (ly_symbol2scm ("stencil"),
+ stencils[d] = unsmob<Stencil> (ly_assoc_get (ly_symbol2scm ("stencil"),
bounds[d], SCM_BOOL_F));
- common_y[d] = Grob::unsmob (ly_assoc_get (ly_symbol2scm ("common-Y"),
+ common_y[d] = unsmob<Grob> (ly_assoc_get (ly_symbol2scm ("common-Y"),
bounds[d], SCM_BOOL_F));
if (!common_y[d])
common_y[d] = me;
const Real epsilon = 0.01;
-#ifndef NDEBUG
+#ifdef DEBUG
/* remove consecutive duplicate points */
for (vsize i = 0; i < points.size (); i++)
{
void
Lyric_combine_music_iterator::set_busy (SCM se)
{
- Stream_event *e = Stream_event::unsmob (se);
+ Stream_event *e = unsmob<Stream_event> (se);
if ((e->in_event_class ("note-event") || e->in_event_class ("cluster-note-event"))
&& music_context_)
void
Lyric_combine_music_iterator::construct_children ()
{
- Music *m = Music::unsmob (get_music ()->get_property ("element"));
- lyric_iter_ = Music_iterator::unsmob (get_iterator (m));
+ Music *m = unsmob<Music> (get_music ()->get_property ("element"));
+ lyric_iter_ = unsmob<Music_iterator> (get_iterator (m));
if (!lyric_iter_)
return;
lyrics_context_ = find_context_below (lyric_iter_->get_outlet (),
SCM
Lyric_combine_music::length_callback (SCM m)
{
- Music *me = Music::unsmob (m);
- Music *melody = Music::unsmob (scm_car (me->get_property ("elements")));
+ Music *me = unsmob<Music> (m);
+ Music *melody = unsmob<Music> (scm_car (me->get_property ("elements")));
return melody->get_length ().smobbed_copy ();
}
bool searchForVoice = to_boolean (lyrics->get_property ("searchForVoice"));
SCM avc = lyrics->get_property ("associatedVoiceContext");
- if (Context *c = Context::unsmob (avc))
+ if (Context *c = unsmob<Context> (avc))
return c;
SCM voice_name = lyrics->get_property ("associatedVoice");
for (SCM s = voice->get_property ("busyGrobs");
scm_is_pair (s); s = scm_cdr (s))
{
- Grob *g = Grob::unsmob (scm_cdar (s));;
- Moment *end_mom = Moment::unsmob (scm_caar (s));
+ Grob *g = unsmob<Grob> (scm_cdar (s));;
+ Moment *end_mom = unsmob<Moment> (scm_caar (s));
if (!end_mom || !g)
{
programming_error ("busyGrobs invalid");
// It's a bit irritating that we just have the length and
// duration of the Grob.
Moment end_from_now =
- get_event_length (Stream_event::unsmob (g->get_property ("cause")), now)
+ get_event_length (unsmob<Stream_event> (g->get_property ("cause")), now)
+ now;
// We cannot actually include more than a single grace note
// using busyGrobs on ungraced lyrics since a grob ending on
SCM
Lyric_extender::print (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
Item *left_edge = me->get_bound (LEFT);
- Item *right_text = Item::unsmob (me->get_object ("next"));
+ Item *right_text = unsmob<Item> (me->get_object ("next"));
Grob *common = left_edge;
SCM
Lyric_hyphen::print (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
Drul_array<Item *> bounds (me->get_bound (LEFT),
me->get_bound (RIGHT));
SCM
Lyric_hyphen::set_spacing_rods (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Rod r;
Spanner *sp = dynamic_cast<Spanner *> (me);
{
if (grouping_)
{
- grouping_->set_bound (RIGHT, Grob::unsmob (get_property ("currentCommandColumn")));
+ grouping_->set_bound (RIGHT, unsmob<Grob> (get_property ("currentCommandColumn")));
grouping_->suicide ();
grouping_ = 0;
}
if (grouping_ && now.main_part_ >= stop_grouping_mom_ && !now.grace_part_)
{
grouping_->set_bound (RIGHT,
- Grob::unsmob (get_property ("currentMusicalColumn")));
+ unsmob<Grob> (get_property ("currentMusicalColumn")));
grouping_ = 0;
}
SCM grouping = get_property ("beatStructure");
if (scm_is_pair (grouping))
{
- Moment *measpos = Moment::unsmob (get_property ("measurePosition"));
+ Moment *measpos = unsmob<Moment> (get_property ("measurePosition"));
Rational mp = measpos->main_part_;
- Moment *base_mom = Moment::unsmob (get_property ("baseMoment"));
+ Moment *base_mom = unsmob<Moment> (get_property ("baseMoment"));
Rational base_moment = base_mom->main_part_;
Rational where (0);
if (grouplen > 1)
{
grouping_ = make_spanner ("MeasureGrouping", SCM_EOL);
- grouping_->set_bound (LEFT, Grob::unsmob (get_property ("currentMusicalColumn")));
+ grouping_->set_bound (LEFT, unsmob<Grob> (get_property ("currentMusicalColumn")));
stop_grouping_mom_ = now.main_part_ + Rational (grouplen - 1) * base_moment;
get_global_context ()->add_moment_to_process (Moment (stop_grouping_mom_));
SCM
Measure_grouping::print (SCM grob)
{
- Spanner *me = Spanner::unsmob (grob);
+ Spanner *me = unsmob<Spanner> (grob);
SCM which = me->get_property ("style");
Real height = robust_scm2double (me->get_property ("height"), 1);
SCM
Melody_spanner::calc_neutral_stem_direction (SCM smob)
{
- Grob *stem = Grob::unsmob (smob);
- Grob *me = Grob::unsmob (stem->get_object ("melody-spanner"));
+ Grob *stem = unsmob<Grob> (smob);
+ Grob *me = unsmob<Grob> (stem->get_object ("melody-spanner"));
if (!me || !me->is_live ())
return scm_from_int (DOWN);
continue;
}
- int pitch = Pitch::unsmob (nr->get_property ("pitch"))->steps ();
+ int pitch = unsmob<Pitch> (nr->get_property ("pitch"))->steps ();
int prim = 0;
if (at_beginning)
}
// b. descendens longa or brevis
else if (i < s - 1
- && (Pitch::unsmob (primitives[i + 1].event_cause ()
+ && (unsmob<Pitch> (primitives[i + 1].event_cause ()
->get_property ("pitch"))->steps () < pitch)
&& duration_log > -3)
{
/*
breve: check whether descending
*/
- int const next_pitch = Pitch::unsmob
+ int const next_pitch = unsmob<Pitch>
(next_info.event_cause ()->get_property ("pitch"))->steps ();
if (next_pitch < pitch)
/*
SCM
Mensural_ligature::brew_ligature_primitive (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return internal_brew_primitive (me).smobbed_copy ();
}
first notational element of the measure if no time
signature is present in that measure).
*/
- if (Grob *mc = Grob::unsmob (get_property ("currentMusicalColumn")))
+ if (Grob *mc = unsmob<Grob> (get_property ("currentMusicalColumn")))
text_->set_parent (mc, X_AXIS);
- else if (Grob *cc = Grob::unsmob (get_property ("currentCommandColumn")))
+ else if (Grob *cc = unsmob<Grob> (get_property ("currentCommandColumn")))
text_->set_parent (cc, X_AXIS);
}
text_->set_object ("side-support-elements",
void
Midi_control_function_performer::announce_function_value_change (SCM sev)
{
- Stream_event *ev = Stream_event::unsmob (sev);
+ Stream_event *ev = unsmob<Stream_event> (sev);
SCM sym = ev->get_property ("symbol");
if (!scm_is_symbol (sym))
return;
LY_ASSERT_SMOB (Moment, a, 1);
LY_ASSERT_SMOB (Moment, b, 2);
- Moment *ma = Moment::unsmob (a);
- Moment *mb = Moment::unsmob (b);
+ Moment *ma = unsmob<Moment> (a);
+ Moment *mb = unsmob<Moment> (b);
return (*ma - *mb).smobbed_copy ();
}
LY_ASSERT_SMOB (Moment, a, 1);
LY_ASSERT_SMOB (Moment, b, 2);
- Moment *ma = Moment::unsmob (a);
- Moment *mb = Moment::unsmob (b);
+ Moment *ma = unsmob<Moment> (a);
+ Moment *mb = unsmob<Moment> (b);
return (*ma + *mb).smobbed_copy ();
}
LY_ASSERT_SMOB (Moment, a, 1);
LY_ASSERT_SMOB (Moment, b, 2);
- Moment *ma = Moment::unsmob (a);
- Moment *mb = Moment::unsmob (b);
+ Moment *ma = unsmob<Moment> (a);
+ Moment *mb = unsmob<Moment> (b);
return (*ma * * mb).smobbed_copy ();
}
LY_ASSERT_SMOB (Moment, a, 1);
LY_ASSERT_SMOB (Moment, b, 2);
- Moment *ma = Moment::unsmob (a);
- Moment *mb = Moment::unsmob (b);
+ Moment *ma = unsmob<Moment> (a);
+ Moment *mb = unsmob<Moment> (b);
return (*ma / * mb).smobbed_copy ();
}
LY_ASSERT_SMOB (Moment, a, 1);
LY_ASSERT_SMOB (Moment, b, 2);
- Moment *ma = Moment::unsmob (a);
- Moment *mb = Moment::unsmob (b);
+ Moment *ma = unsmob<Moment> (a);
+ Moment *mb = unsmob<Moment> (b);
return (*ma % * mb).smobbed_copy ();
}
{
LY_ASSERT_SMOB (Moment, mom, 1);
- return ly_rational2scm (Moment::unsmob (mom)->grace_part_);
+ return ly_rational2scm (unsmob<Moment> (mom)->grace_part_);
}
LY_DEFINE (ly_moment_grace_numerator, "ly:moment-grace-numerator",
{
LY_ASSERT_SMOB (Moment, mom, 1);
- Moment *ma = Moment::unsmob (mom);
+ Moment *ma = unsmob<Moment> (mom);
return scm_from_int64 (ma->grace_part_.numerator ());
}
"Extract denominator from grace timing.")
{
LY_ASSERT_SMOB (Moment, mom, 1);
- Moment *ma = Moment::unsmob (mom);
+ Moment *ma = unsmob<Moment> (mom);
return scm_from_int64 (ma->grace_part_.denominator ());
}
{
LY_ASSERT_SMOB (Moment, mom, 1);
- return ly_rational2scm (Moment::unsmob (mom)->main_part_);
+ return ly_rational2scm (unsmob<Moment> (mom)->main_part_);
}
LY_DEFINE (ly_moment_main_numerator, "ly:moment-main-numerator",
"Extract numerator from main timing.")
{
LY_ASSERT_SMOB (Moment, mom, 1);
- Moment *ma = Moment::unsmob (mom);
+ Moment *ma = unsmob<Moment> (mom);
return scm_from_int64 (ma->main_part_.numerator ());
}
"Extract denominator from main timing.")
{
LY_ASSERT_SMOB (Moment, mom, 1);
- Moment *ma = Moment::unsmob (mom);
+ Moment *ma = unsmob<Moment> (mom);
return scm_from_int64 (ma->main_part_.denominator ());
}
LY_ASSERT_SMOB (Moment, a, 1);
LY_ASSERT_SMOB (Moment, b, 2);
- Moment *ma = Moment::unsmob (a);
- Moment *mb = Moment::unsmob (b);
+ Moment *ma = unsmob<Moment> (a);
+ Moment *mb = unsmob<Moment> (b);
return ly_bool2scm (*ma < *mb);
}
SCM
Moment::equal_p (SCM a, SCM b)
{
- Moment *m1 = Moment::unsmob (a);
- Moment *m2 = Moment::unsmob (b);
+ Moment *m1 = unsmob<Moment> (a);
+ Moment *m2 = unsmob<Moment> (b);
return (*m1 == *m2) ? SCM_BOOL_T : SCM_BOOL_F;
}
Moment
robust_scm2moment (SCM m, Moment d)
{
- Moment *p = Moment::unsmob (m);
+ Moment *p = unsmob<Moment> (m);
if (!p)
return d;
else
bool
moment_less (SCM a, SCM b)
{
- return *Moment::unsmob (a) < *Moment::unsmob (b);
+ return *unsmob<Moment> (a) < *unsmob<Moment> (b);
}
-- jneem */
if (bar_seen_)
{
- Grob *cmc = Grob::unsmob (get_property ("currentCommandColumn"));
+ Grob *cmc = unsmob<Grob> (get_property ("currentCommandColumn"));
/* Ugh, this is a kludge - need this for multi-measure-rest-grace.ly */
last_command_item_ = dynamic_cast<Item *> (cmc);
SCM
Multi_measure_rest::percent (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Spanner *sp = dynamic_cast<Spanner *> (me);
Stencil r = Percent_repeat_item_interface::x_percent (me, 1);
SCM
Multi_measure_rest::print (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Spanner *sp = dynamic_cast<Spanner *> (me);
Interval sp_iv = bar_width (sp);
SCM
Multi_measure_rest::height (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real space = 1000000; // something very large...
{
SCM sml = dynamic_cast<Spanner *> (me)->get_bound (LEFT)
->get_property ("measure-length");
- Rational ml = (Moment::is_smob (sml)) ? Moment::unsmob (sml)->main_part_
+ Rational ml = (unsmob<Moment> (sml)) ? unsmob<Moment> (sml)->main_part_
: Rational (1);
double measure_duration = ml.Rational::to_double ();
bool force_round_up = to_boolean (scm_list_p (scm_member (scm_cons (scm_from_int64 (ml.numerator ()),
Stencil mol;
for (SCM s = mols; scm_is_pair (s); s = scm_cdr (s))
- mol.add_at_edge (X_AXIS, LEFT, *Stencil::unsmob (scm_car (s)),
+ mol.add_at_edge (X_AXIS, LEFT, *unsmob<Stencil> (scm_car (s)),
inner_padding);
mol.align_to (X_AXIS, LEFT);
mol.translate_axis (outer_padding_factor * inner_padding, X_AXIS);
Item *lb = li->find_prebroken_piece (RIGHT);
Item *rb = ri->find_prebroken_piece (LEFT);
- Grob *spacing = Grob::unsmob (li->get_object ("spacing"));
+ Grob *spacing = unsmob<Grob> (li->get_object ("spacing"));
if (!spacing)
- spacing = Grob::unsmob (ri->get_object ("spacing"));
+ spacing = unsmob<Grob> (ri->get_object ("spacing"));
if (spacing)
{
Spacing_options options;
SCM
Multi_measure_rest::set_spacing_rods (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real sym_width = symbol_stencil (me, 0.0).extent (X_AXIS).length ();
calculate_spacing_rods (me, sym_width);
SCM
Multi_measure_rest::set_text_rods (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Stencil *stil = me->get_stencil ();
/* FIXME uncached */
{
LY_ASSERT_SMOB (Music_function, x, 1);
- return Music_function::unsmob (x)->get_function ();
+ return unsmob<Music_function> (x)->get_function ();
}
LY_DEFINE (ly_music_function_signature, "ly:music-function-signature", 1, 0, 0,
{
LY_ASSERT_SMOB (Music_function, x, 1);
- return Music_function::unsmob (x)->get_signature ();
+ return unsmob<Music_function> (x)->get_signature ();
}
LY_DEFINE (ly_make_music_function, "ly:make-music-function", 2, 0, 0,
if (ly_is_procedure (ctor))
{
iter = scm_call_0 (ctor);
- p = Music_iterator::unsmob (iter);
+ p = unsmob<Music_iterator> (iter);
}
else
{
Music_iterator::get_iterator (Music *m) const
{
SCM ip = get_static_get_iterator (m);
- Music_iterator *p = Music_iterator::unsmob (ip);
+ Music_iterator *p = unsmob<Music_iterator> (ip);
p->init_context (m, get_outlet ());
" it as a @code{Moment} object.")
{
LY_ASSERT_SMOB (Music, mus, 1);
- Music *sc = Music::unsmob (mus);
+ Music *sc = unsmob<Music> (mus);
return sc->get_length ().smobbed_copy ();
}
1, 0, 0, (SCM obj),
"Is @var{obj} a music object?")
{
- return ly_bool2scm (Music::is_smob (obj));
+ return ly_bool2scm (unsmob<Music> (obj));
}
LY_DEFINE (ly_event_p, "ly:event?",
1, 0, 0, (SCM obj),
"Is @var{obj} a proper (non-rhythmic) event object?")
{
- if (Music *m = Music::unsmob (obj))
+ if (Music *m = unsmob<Music> (obj))
{
return scm_from_bool (m->is_mus_type ("post-event"));
}
" constant and initialized by the @code{make-music} function.")
{
LY_ASSERT_SMOB (Music, mus, 1);
- Music *m = Music::unsmob (mus);
+ Music *m = unsmob<Music> (mus);
return m->get_property_alist (true);
}
while (scm_is_pair (lst))
{
- if (!Music::is_smob (scm_car (lst)))
+ if (!unsmob<Music> (scm_car (lst)))
return SCM_BOOL_F;
lst = scm_cdr (lst);
}
" @var{m} may be an arbitrary type; cons cells and music"
" are copied recursively.")
{
- if (Music::is_smob (m))
- return Music::unsmob (m)->clone ()->unprotect ();
+ if (unsmob<Music> (m))
+ return unsmob<Music> (m)->clone ()->unprotect ();
if (scm_is_pair (m))
{
SCM copy = SCM_EOL;
LY_ASSERT_SMOB (Music, m, 1);
LY_ASSERT_SMOB (Pitch, p, 2);
- Music *sc = Music::unsmob (m);
- Pitch *sp = Pitch::unsmob (p);
+ Music *sc = unsmob<Music> (m);
+ Pitch *sp = unsmob<Pitch> (p);
sc->transpose (*sp);
// SCM_UNDEFINED ?
LY_ASSERT_SMOB (Music, m, 1);
LY_ASSERT_SMOB (Moment, factor, 2);
- Music *sc = Music::unsmob (m);
- sc->compress (*Moment::unsmob (factor));
+ Music *sc = unsmob<Music> (m);
+ sc->compress (*unsmob<Moment> (factor));
return sc->self_scm ();
}
LY_ASSERT_SMOB (Music, music, 1);
LY_ASSERT_SMOB (Pitch, pitch, 2);
- Pitch start = *Pitch::unsmob (pitch);
- Music *m = Music::unsmob (music);
+ Pitch start = *unsmob<Pitch> (pitch);
+ Music *m = unsmob<Music> (music);
Pitch last = m->to_relative_octave (start);
return last.smobbed_copy ();
" length.")
{
LY_ASSERT_SMOB (Music, mus, 1);
- Music *m = Music::unsmob (mus);
+ Music *m = unsmob<Music> (mus);
- Duration *d = Duration::unsmob (m->get_property ("duration"));
+ Duration *d = unsmob<Duration> (m->get_property ("duration"));
Moment len;
if (d)
LY_ASSERT_SMOB (Music, mus, 1);
LY_ASSERT_SMOB (Moment, fact, 2);
- Music *m = Music::unsmob (mus);
- Moment *f = Moment::unsmob (fact);
+ Music *m = unsmob<Music> (mus);
+ Moment *f = unsmob<Moment> (fact);
- Duration *d = Duration::unsmob (m->get_property ("duration"));
+ Duration *d = unsmob<Duration> (m->get_property ("duration"));
if (d)
m->set_property ("duration", d->compressed (f->main_part_).smobbed_copy ());
return SCM_UNSPECIFIED;
" pitch @var{pit}.")
{
SCM newlist = SCM_EOL;
- Pitch *p = Pitch::unsmob (pit);
+ Pitch *p = unsmob<Pitch> (pit);
for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
{
transpose_music_list (SCM lst, Pitch rq)
{
for (SCM s = lst; scm_is_pair (s); s = scm_cdr (s))
- Music::unsmob (scm_car (s))->transpose (rq);
+ unsmob<Music> (scm_car (s))->transpose (rq);
}
Moment
for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
{
- Moment l = Music::unsmob (scm_car (s))->get_length ();
+ Moment l = unsmob<Music> (scm_car (s))->get_length ();
if (last_len.grace_part_ && l.main_part_)
last_len.grace_part_ = Rational (0);
cumulative += last_len;
Moment dur = 0;
for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
{
- Music *m = Music::unsmob (scm_car (s));
+ Music *m = unsmob<Music> (scm_car (s));
if (!m)
programming_error ("Music sequence should have music elements");
else
SCM
Music_sequence::maximum_length_callback (SCM m)
{
- Music *me = Music::unsmob (m);
+ Music *me = unsmob<Music> (m);
return maximum_length (me->get_property ("elements")).smobbed_copy ();
}
SCM
Music_sequence::event_chord_length_callback (SCM m)
{
- Music *me = Music::unsmob (m);
- Duration *d = Duration::unsmob (me->get_property ("duration"));
+ Music *me = unsmob<Music> (m);
+ Duration *d = unsmob<Duration> (me->get_property ("duration"));
// Preset duration is used in chord repetitions.
if (d)
{
SCM
Music_sequence::cumulative_length_callback (SCM m)
{
- Music *me = Music::unsmob (m);
+ Music *me = unsmob<Music> (m);
return cumulative_length (me->get_property ("elements")).smobbed_copy ();
}
SCM
Music_sequence::minimum_start_callback (SCM m)
{
- Music *me = Music::unsmob (m);
+ Music *me = unsmob<Music> (m);
return minimum_start (me->get_property ("elements")).smobbed_copy ();
}
SCM
Music_sequence::first_start_callback (SCM m)
{
- Music *me = Music::unsmob (m);
+ Music *me = unsmob<Music> (m);
return first_start (me->get_property ("elements")).smobbed_copy ();
}
Pitch last = p;
for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
{
- if (Music *m = Music::unsmob (scm_car (s)))
+ if (Music *m = unsmob<Music> (scm_car (s)))
{
last = m->to_relative_octave (last);
if (!count++)
compress_music_list (SCM l, Moment m)
{
for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
- Music::unsmob (scm_car (s))->compress (m);
+ unsmob<Music> (scm_car (s))->compress (m);
}
Moment
Moment m;
for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
- m = min (m, Music::unsmob (scm_car (s))->start_mom ());
+ m = min (m, unsmob<Music> (scm_car (s))->start_mom ());
return m;
}
for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
{
- Music *mus = Music::unsmob (scm_car (s));
+ Music *mus = unsmob<Music> (scm_car (s));
Moment start = mus->start_mom ();
if (mus->get_length ().to_bool () || start.to_bool ())
return start;
SCM
Music_sequence::simultaneous_relative_callback (SCM music, SCM pitch)
{
- Music *me = Music::unsmob (music);
- Pitch p = *Pitch::unsmob (pitch);
+ Music *me = unsmob<Music> (music);
+ Pitch p = *unsmob<Pitch> (pitch);
return music_list_to_relative (me->get_property ("elements"),
p, false).smobbed_copy ();
}
SCM
Music_sequence::event_chord_relative_callback (SCM music, SCM pitch)
{
- Music *me = Music::unsmob (music);
- Pitch p = *Pitch::unsmob (pitch);
+ Music *me = unsmob<Music> (music);
+ Pitch p = *unsmob<Pitch> (pitch);
return music_list_to_relative (me->get_property ("elements"),
p, true).smobbed_copy ();
}
Music_wrapper_iterator::construct_children ()
{
Music *my_music = get_music ();
- Music *child = Music::unsmob (my_music->get_property ("element"));
+ Music *child = unsmob<Music> (my_music->get_property ("element"));
child_iter_ = (child)
- ? Music_iterator::unsmob (get_iterator (child))
+ ? unsmob<Music_iterator> (get_iterator (child))
: 0;
}
SCM
Music_wrapper::start_callback (SCM m)
{
- Music *me = Music::unsmob (m);
- Music *elt = Music::unsmob (me->get_property ("element"));
+ Music *me = unsmob<Music> (m);
+ Music *elt = unsmob<Music> (me->get_property ("element"));
if (elt)
return elt->start_mom ().smobbed_copy ();
else
SCM
Music_wrapper::length_callback (SCM m)
{
- Music *me = Music::unsmob (m);
- Music *elt = Music::unsmob (me->get_property ("element"));
+ Music *me = unsmob<Music> (m);
+ Music *elt = unsmob<Music> (me->get_property ("element"));
if (elt)
return elt->get_length ().smobbed_copy ();
else
Music::get_length () const
{
SCM lst = get_property ("length");
- if (Moment::is_smob (lst))
- return *Moment::unsmob (lst);
+ if (unsmob<Moment> (lst))
+ return *unsmob<Moment> (lst);
if (ly_is_procedure (length_callback_))
{
SCM res = scm_call_1 (length_callback_, self_scm ());
- return *Moment::unsmob (res);
+ return *unsmob<Moment> (res);
}
return Moment (0);
if (ly_is_procedure (lst))
{
SCM res = scm_call_1 (lst, self_scm ());
- return *Moment::unsmob (res);
+ return *unsmob<Moment> (res);
}
Moment m;
Music::generic_to_relative_octave (Pitch last)
{
SCM elt = get_property ("element");
- Pitch *old_pit = Pitch::unsmob (get_property ("pitch"));
+ Pitch *old_pit = unsmob<Pitch> (get_property ("pitch"));
if (old_pit)
{
Pitch new_pit = *old_pit;
last = new_pit;
}
- if (Music *m = Music::unsmob (elt))
+ if (Music *m = unsmob<Music> (elt))
last = m->to_relative_octave (last);
(void) music_list_to_relative (get_property ("articulations"), last, true);
SCM callback = get_property ("to-relative-callback");
if (ly_is_procedure (callback))
{
- Pitch *p = Pitch::unsmob (scm_call_2 (callback, self_scm (),
+ Pitch *p = unsmob<Pitch> (scm_call_2 (callback, self_scm (),
last.smobbed_copy ()));
return *p;
}
{
SCM elt = get_property ("element");
- if (Music *m = Music::unsmob (elt))
+ if (Music *m = unsmob<Music> (elt))
m->compress (factor);
compress_music_list (get_property ("elements"), factor);
- Duration *d = Duration::unsmob (get_property ("duration"));
+ Duration *d = unsmob<Duration> (get_property ("duration"));
if (d)
set_property ("duration",
d->compressed (factor.main_part_).smobbed_copy ());
SCM val = scm_cdr (entry);
SCM new_val = val;
- if (Pitch *p = Pitch::unsmob (val))
+ if (Pitch *p = unsmob<Pitch> (val))
{
Pitch transposed = p->transposed (delta);
}
else if (scm_is_eq (prop, ly_symbol2scm ("element")))
{
- if (Music *m = Music::unsmob (val))
+ if (Music *m = unsmob<Music> (val))
m->transpose (delta);
}
else if (scm_is_eq (prop, ly_symbol2scm ("elements"))
Input *
Music::origin () const
{
- Input *ip = Input::unsmob (get_property ("origin"));
+ Input *ip = unsmob<Input> (get_property ("origin"));
return ip ? ip : &dummy_input_global;
}
SCM art_ev = SCM_EOL;
for (; scm_is_pair (art_mus); art_mus = scm_cdr (art_mus))
{
- Music *m = Music::unsmob (scm_car (art_mus));
+ Music *m = unsmob<Music> (scm_car (art_mus));
art_ev = scm_cons (m->to_event ()->unprotect (), art_ev);
}
e->set_property ("articulations", scm_reverse_x (art_ev, SCM_EOL));
SCM rv = scm_call_1 (make_music_proc, sym);
/* UGH. */
- Music *m = Music::unsmob (rv);
+ Music *m = unsmob<Music> (rv);
m->protect ();
return m;
}
SCM
Music::duration_length_callback (SCM m)
{
- Music *me = Music::unsmob (m);
- Duration *d = Duration::unsmob (me->get_property ("duration"));
+ Music *me = unsmob<Music> (m);
+ Duration *d = unsmob<Duration> (me->get_property ("duration"));
Moment mom;
if (d)
for (SCM s = arts; scm_is_pair (s); s = scm_cdr (s))
{
- Stream_event *ev = Stream_event::unsmob (scm_car (s));
+ Stream_event *ev = unsmob<Stream_event> (scm_car (s));
if (!ev)
continue;
else if (ev->in_event_class ("harmonic-event"))
{
inf.grob ()->set_property ("style", ly_symbol2scm ("harmonic"));
- Grob *d = Grob::unsmob (inf.grob ()->get_object ("dot"));
+ Grob *d = unsmob<Grob> (inf.grob ()->get_object ("dot"));
if (d && !to_boolean (get_property ("harmonicDots")))
d->suicide ();
}
if (stem_)
{
Side_position_interface::add_support (scripts->at (i).script_, stem_);
- if (Grob *flag = Grob::unsmob (stem_->get_object ("flag")))
+ if (Grob *flag = unsmob<Grob> (stem_->get_object ("flag")))
Side_position_interface::add_support (scripts->at (i).script_, flag);
}
f->set_parent (ft.head_, Y_AXIS);
f->set_property ("avoid-slur", ly_symbol2scm ("inside"));
if (hordir == LEFT
- && Grob::is_smob (ft.head_->get_object ("accidental-grob")))
+ && unsmob<Grob> (ft.head_->get_object ("accidental-grob")))
Side_position_interface::add_support (f,
- Grob::unsmob (ft.head_->get_object ("accidental-grob")));
- else if (Grob::is_smob (ft.head_->get_object ("dot")))
+ unsmob<Grob> (ft.head_->get_object ("accidental-grob")));
+ else if (unsmob<Grob> (ft.head_->get_object ("dot")))
Side_position_interface::add_support (f,
- Grob::unsmob (ft.head_->get_object ("dot")));
+ unsmob<Grob> (ft.head_->get_object ("dot")));
Self_alignment_interface::set_aligned_on_parent (f, Y_AXIS);
Side_position_interface::set_axis (f, X_AXIS);
if (dot_wipe_head)
{
- if (Grob *d = Grob::unsmob (dot_wipe_head->get_object ("dot")))
+ if (Grob *d = unsmob<Grob> (dot_wipe_head->get_object ("dot")))
d->suicide ();
}
if (shift_amount < -1e-6
&& Rhythmic_head::dot_count (head_up))
{
- Grob *d = Grob::unsmob (head_up->get_object ("dot"));
+ Grob *d = unsmob<Grob> (head_up->get_object ("dot"));
Grob *parent = d->get_parent (X_AXIS);
if (Dot_column::has_interface (parent))
Side_position_interface::add_support (parent, head_down);
}
else if (Rhythmic_head::dot_count (head_down))
{
- Grob *d = Grob::unsmob (head_down->get_object ("dot"));
+ Grob *d = unsmob<Grob> (head_down->get_object ("dot"));
Grob *parent = d->get_parent (X_AXIS);
if (Dot_column::has_interface (parent))
{
- Grob *stem = Grob::unsmob (head_up->get_object ("stem"));
+ Grob *stem = unsmob<Grob> (head_up->get_object ("stem"));
// Loop over all heads on an up-pointing-stem to see if dots
// need to clear any heads suspended on its right side.
extract_grob_set (stem, "note-heads", heads);
if (shift_amount > 1e-6
&& Rhythmic_head::dot_count (head_down))
{
- Grob *dot_down = Grob::unsmob (head_down->get_object ("dot"));
+ Grob *dot_down = unsmob<Grob> (head_down->get_object ("dot"));
Grob *col_down = dot_down->get_parent (X_AXIS);
Direction dir = UP;
if (Rhythmic_head::dot_count (head_up))
{
- Grob *dot_up = Grob::unsmob (head_up->get_object ("dot"));
+ Grob *dot_up = unsmob<Grob> (head_up->get_object ("dot"));
Grob *col_up = dot_up->get_parent (X_AXIS);
if (col_up == col_down) // let the common DotColumn arrange dots
dir = CENTER;
}
if (dir != CENTER)
{
- Grob *stem = Grob::unsmob (head_down->get_object ("stem"));
+ Grob *stem = unsmob<Grob> (head_down->get_object ("stem"));
extract_grob_set (stem, "note-heads", heads);
for (vsize i = 0; i < heads.size (); i++)
- if (Grob *dot = Grob::unsmob (heads[i]->get_object ("dot")))
+ if (Grob *dot = unsmob<Grob> (heads[i]->get_object ("dot")))
dot->set_property ("direction", scm_from_int (dir));
}
}
SCM
Note_collision_interface::calc_positioning_done (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
me->set_property ("positioning-done", SCM_BOOL_T);
Drul_array<vector<Grob *> > clash_groups = get_clash_groups (me);
vector<Real> amounts;
for (; scm_is_pair (hand); hand = scm_cdr (hand))
{
- Grob *s = Grob::unsmob (scm_caar (hand));
+ Grob *s = unsmob<Grob> (scm_caar (hand));
Real amount = scm_to_double (scm_cdar (hand)) * wid;
done.push_back (s);
}
for (; scm_is_pair (autos); autos = scm_cdr (autos))
{
- Grob *s = Grob::unsmob (scm_caar (autos));
+ Grob *s = unsmob<Grob> (scm_caar (autos));
Real amount = scm_to_double (scm_cdar (autos)) * wid;
vsize x = find (done, s) - done.begin ();
vector<int> out;
extract_grob_set (me, "elements", elts);
for (vsize i = 0; i < elts.size (); i++)
- if (Grob *stem = Grob::unsmob (elts[i]->get_object ("stem")))
+ if (Grob *stem = unsmob<Grob> (elts[i]->get_object ("stem")))
{
vector<int> nhp = Stem::note_head_positions (stem);
out.insert (out.end (), nhp.begin (), nhp.end ());
"Return the @code{AccidentalPlacement} grob from @var{note-column}"
" if any, or @code{SCM_EOL} otherwise.")
{
- Grob *grob = Grob::unsmob (note_column);
+ Grob *grob = unsmob<Grob> (note_column);
LY_ASSERT_SMOB (Grob, note_column, 1);
Grob *acc = Note_column::accidentals (grob);
if (acc)
"Return the @code{DotColumn} grob from @var{note-column}"
" if any, or @code{SCM_EOL} otherwise.")
{
- Grob *grob = Grob::unsmob (note_column);
+ Grob *grob = unsmob<Grob> (note_column);
LY_ASSERT_SMOB (Grob, note_column, 1);
Grob *dot_column = Note_column::dot_column (grob);
if (dot_column)
bool
Note_column::has_rests (Grob *me)
{
- return Grob::is_smob (me->get_object ("rest"));
+ return unsmob<Grob> (me->get_object ("rest"));
}
bool
Note_column::get_stem (Grob *me)
{
SCM s = me->get_object ("stem");
- return Item::unsmob (s);
+ return unsmob<Item> (s);
}
Item *
if (stem)
{
SCM s = stem->get_object ("flag");
- return Item::unsmob (s);
+ return unsmob<Item> (s);
}
return 0;
}
Direction
Note_column::dir (Grob *me)
{
- Grob *stem = Grob::unsmob (me->get_object ("stem"));
+ Grob *stem = unsmob<Grob> (me->get_object ("stem"));
if (stem && Stem::has_interface (stem))
return get_grob_direction (stem);
else
Grob *
Note_column::get_rest (Grob *me)
{
- return Grob::unsmob (me->get_object ("rest"));
+ return unsmob<Grob> (me->get_object ("rest"));
}
void
}
else if (Note_head::has_interface (h))
{
- if (Grob::is_smob (me->get_object ("rest")))
+ if (unsmob<Grob> (me->get_object ("rest")))
both = true;
Pointer_group_interface::add_grob (me, ly_symbol2scm ("note-heads"), h);
}
}
Grob *main_item = main_head
? main_head
- : Grob::unsmob (me->get_object ("rest"));
+ : unsmob<Grob> (me->get_object ("rest"));
return main_item
? main_item->extent (me, X_AXIS)
for (vsize i = 0; i < heads.size (); i++)
{
Grob *h = heads[i];
- acc = h ? Grob::unsmob (h->get_object ("accidental-grob")) : 0;
+ acc = h ? unsmob<Grob> (h->get_object ("accidental-grob")) : 0;
if (acc)
break;
}
extract_grob_set (me, "note-heads", heads);
for (vsize i = 0; i < heads.size (); i++)
{
- Grob *dots = Grob::unsmob (heads[i]->get_object ("dot"));
+ Grob *dots = unsmob<Grob> (heads[i]->get_object ("dot"));
if (dots)
return dots->get_parent (X_AXIS);
}
" notehead @var{glyph-name}.")
{
LY_ASSERT_SMOB (Font_metric, font_metric, 1);
- Font_metric *fm = Font_metric::unsmob (font_metric);
+ Font_metric *fm = unsmob<Font_metric> (font_metric);
LY_ASSERT_TYPE (scm_is_string, glyph_name, 2);
return ly_offset2scm (Note_head::get_stem_attachment (fm, ly_scm2string (glyph_name)));
Stencil out = fm->find_by_name (idx_either + suffix);
if (out.is_empty ())
{
- Grob *stem = Grob::unsmob (me->get_object ("stem"));
+ Grob *stem = unsmob<Grob> (me->get_object ("stem"));
Direction stem_dir = stem ? get_grob_direction (stem) : CENTER;
if (stem_dir == CENTER)
if (style == "kievan"
&& 3 == robust_scm2int (me->get_property ("duration-log"), 2))
{
- Grob *stem = Grob::unsmob (me->get_object ("stem"));
- Grob *beam = Grob::unsmob (stem->get_object ("beam"));
+ Grob *stem = unsmob<Grob> (me->get_object ("stem"));
+ Grob *beam = unsmob<Grob> (stem->get_object ("beam"));
if (beam)
out = fm->find_by_name (idx_either + "2kievan");
}
SCM
Note_head::stem_x_shift (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
- Grob *stem = Grob::unsmob (me->get_object ("stem"));
+ Grob *me = unsmob<Grob> (smob);
+ Grob *stem = unsmob<Grob> (me->get_object ("stem"));
if (stem)
(void) stem->get_property ("positioning-done");
SCM
Note_head::print (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
string idx;
return internal_print (me, &idx).smobbed_copy ();
SCM
Note_head::include_ledger_line_height (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
if (staff)
SCM
Note_head::calc_stem_attachment (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Font_metric *fm = Font_interface::get_default_font (me);
string key;
internal_print (me, &key);
Stream_event *ev = note_evs_[i];
Item *note = make_item ("NoteHead", ev->self_scm ());
- Pitch *pit = Pitch::unsmob (ev->get_property ("pitch"));
+ Pitch *pit = unsmob<Pitch> (ev->get_property ("pitch"));
#if 0 /* TODO: should have a mechanism to switch off these warnings. */
{
SCM scm_tonic = get_property ("tonic");
Pitch tonic;
- if (Pitch::is_smob (scm_tonic))
- tonic = *Pitch::unsmob (scm_tonic);
+ if (unsmob<Pitch> (scm_tonic))
+ tonic = *unsmob<Pitch> (scm_tonic);
unsigned int delta = (pit->get_notename () - tonic.get_notename () + 7) % 7;
{
if (i)
s += " ";
- Pitch p = *Pitch::unsmob (events_[i]->get_property ("pitch"));
+ Pitch p = *unsmob<Pitch> (events_[i]->get_property ("pitch"));
if (!to_boolean (get_property ("printOctaveNames")))
p = Pitch (-1, p.get_notename (), p.get_alteration ());
Pitch transposing;
SCM prop = get_property ("instrumentTransposition");
- if (Pitch::is_smob (prop))
- transposing = *Pitch::unsmob (prop);
+ if (unsmob<Pitch> (prop))
+ transposing = *unsmob<Pitch> (prop);
for (vsize i = 0; i < note_evs_.size (); i++)
{
Stream_event *n = note_evs_[i];
SCM pit = n->get_property ("pitch");
- if (Pitch *pitp = Pitch::unsmob (pit))
+ if (Pitch *pitp = unsmob<Pitch> (pit))
{
SCM articulations = n->get_property ("articulations");
Stream_event *tie_event = 0;
int velocity = 0;
for (SCM s = articulations; scm_is_pair (s); s = scm_cdr (s))
{
- Stream_event *ev = Stream_event::unsmob (scm_car (s));
+ Stream_event *ev = unsmob<Stream_event> (scm_car (s));
if (!ev)
continue;
Grob *last_spacing = last_spacings_[parent];
if (last_spacing
- && !Grob_array::is_smob (last_spacing->get_object ("right-items")))
+ && !unsmob<Grob_array> (last_spacing->get_object ("right-items")))
{
- Grob *col = Grob::unsmob (get_property ("currentCommandColumn"));
+ Grob *col = unsmob<Grob> (get_property ("currentCommandColumn"));
Pointer_group_interface::add_grob (last_spacing,
ly_symbol2scm ("right-items"),
if (last_spacing
&& to_boolean (get_property ("hasStaffSpacing")))
{
- Grob *col = Grob::unsmob (get_property ("currentCommandColumn"));
+ Grob *col = unsmob<Grob> (get_property ("currentCommandColumn"));
Pointer_group_interface::add_grob (last_spacing,
ly_symbol2scm ("right-items"),
col);
for (vsize i = 0; i < note_columns.size (); i++)
{
SCM r = note_columns[i]->get_object ("rest");
- Grob *g = Grob::unsmob (r);
+ Grob *g = unsmob<Grob> (r);
Grob *col = note_columns[i]->get_column ();
if (!g)
{
LY_ASSERT_SMOB (Font_metric, font, 1);
- Font_metric *fm = Font_metric::unsmob (font);
+ Font_metric *fm = unsmob<Font_metric> (font);
return fm->sub_fonts ();
}
" information about named glyph @var{glyph} (a string).")
{
Modified_font_metric *fm
- = derived_unsmob<Modified_font_metric> (font);
+ = unsmob<Modified_font_metric> (font);
Open_type_font *otf = fm
? dynamic_cast<Open_type_font *> (fm->original_font ())
- : derived_unsmob<Open_type_font> (font);
+ : unsmob<Open_type_font> (font);
SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font");
LY_ASSERT_TYPE (scm_is_string, glyph, 2);
" for non-existent @var{tag}.")
{
Modified_font_metric *fm
- = derived_unsmob<Modified_font_metric> (font);
+ = unsmob<Modified_font_metric> (font);
Open_type_font *otf = fm
? dynamic_cast<Open_type_font *> (fm->original_font ())
- : derived_unsmob<Open_type_font> (font);
+ : unsmob<Open_type_font> (font);
SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font");
LY_ASSERT_TYPE (scm_is_string, tag, 2);
"Is @var{font} an OpenType font?")
{
Modified_font_metric *fm
- = derived_unsmob<Modified_font_metric> (font);
+ = unsmob<Modified_font_metric> (font);
Open_type_font *otf = fm
? dynamic_cast<Open_type_font *> (fm->original_font ())
- : derived_unsmob<Open_type_font> (font);
+ : unsmob<Open_type_font> (font);
return scm_from_bool (otf);
}
"Return the number of glyphs in @var{font}.")
{
Modified_font_metric *fm
- = derived_unsmob<Modified_font_metric> (font);
+ = unsmob<Modified_font_metric> (font);
Open_type_font *otf = fm
? dynamic_cast<Open_type_font *> (fm->original_font ())
- : derived_unsmob<Open_type_font> (font);
+ : unsmob<Open_type_font> (font);
SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font");
"Return a list of glyph names for @var{font}.")
{
Modified_font_metric *fm
- = derived_unsmob<Modified_font_metric> (font);
+ = unsmob<Modified_font_metric> (font);
Open_type_font *otf = fm
? dynamic_cast<Open_type_font *> (fm->original_font ())
- : derived_unsmob<Open_type_font> (font);
+ : unsmob<Open_type_font> (font);
SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font");
{
SCM box = scm_hashq_ref (lily_index_to_bbox_table_,
scm_from_unsigned_integer (signed_idx), SCM_BOOL_F);
- Box *box_ptr = Box::unsmob (box);
+ Box *box_ptr = unsmob<Box> (box);
if (box_ptr)
return *box_ptr;
}
SCM
Ottava_bracket::print (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
Interval span_points;
Grob *common = me->get_bound (LEFT)->common_refpoint (me->get_bound (RIGHT), X_AXIS);
SCM markup = me->get_property ("text");
Stencil text;
if (Text_interface::is_markup (markup))
- text = *Stencil::unsmob (Text_interface::interpret_markup (layout->self_scm (),
+ text = *unsmob<Stencil> (Text_interface::interpret_markup (layout->self_scm (),
properties, markup));
Drul_array<Real> shorten = robust_scm2interval (me->get_property ("shorten-pair"),
{
if (!finished_->get_bound (RIGHT))
{
- Grob *e = Grob::unsmob (get_property ("currentMusicalColumn"));
+ Grob *e = unsmob<Grob> (get_property ("currentMusicalColumn"));
finished_->set_bound (d, e);
}
}
{
if (span_ && !span_->get_bound (LEFT))
{
- Grob *e = Grob::unsmob (get_property ("currentMusicalColumn"));
+ Grob *e = unsmob<Grob> (get_property ("currentMusicalColumn"));
span_->set_bound (LEFT, e);
}
" @var{val} or @code{'()} if @var{val} is undefined.")
{
LY_ASSERT_SMOB (Output_def, def, 1);
- Output_def *op = Output_def::unsmob (def);
+ Output_def *op = unsmob<Output_def> (def);
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
SCM answer = op->lookup_variable (sym);
"Return the variable scope inside @var{def}.")
{
LY_ASSERT_SMOB (Output_def, def, 1);
- Output_def *op = Output_def::unsmob (def);
+ Output_def *op = unsmob<Output_def> (def);
return op->scope_;
}
"Return the parent output definition of @var{def}.")
{
LY_ASSERT_SMOB (Output_def, def, 1);
- Output_def *op = Output_def::unsmob (def);
+ Output_def *op = unsmob<Output_def> (def);
return op->parent_ ? op->parent_->self_scm () : SCM_EOL;
}
"Set an output definition @var{def} variable @var{sym} to @var{val}.")
{
LY_ASSERT_SMOB (Output_def, def, 1);
- Output_def *output_def = Output_def::unsmob (def);
+ Output_def *output_def = unsmob<Output_def> (def);
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
output_def->set_variable (sym, val);
return SCM_UNSPECIFIED;
"Clone output definition @var{def}.")
{
LY_ASSERT_SMOB (Output_def, def, 1);
- Output_def *op = Output_def::unsmob (def);
+ Output_def *op = unsmob<Output_def> (def);
Output_def *clone = op->clone ();
return clone->unprotect ();
{
LY_ASSERT_SMOB (Output_def, output_def, 1);
- Output_def *id = Output_def::unsmob (output_def);
+ Output_def *id = unsmob<Output_def> (output_def);
SCM al = ly_module_2_alist (id->scope_);
SCM ell = SCM_EOL;
for (SCM s = al; scm_is_pair (s); s = scm_cdr (s))
{
- Context_def *td = Context_def::unsmob (scm_cdar (s));
+ Context_def *td = unsmob<Context_def> (scm_cdar (s));
SCM key = scm_caar (s);
if (td && key == td->get_context_name ())
ell = scm_cons (scm_cons (key, td->to_alist ()), ell);
if (!SCM_UNBNDP (context_name))
LY_ASSERT_TYPE (ly_is_symbol, context_name, 2);
- Output_def *id = Output_def::unsmob (output_def);
+ Output_def *id = unsmob<Output_def> (output_def);
SCM al = ly_module_2_alist (id->scope_);
SCM ell = SCM_EOL;
for (SCM s = al; scm_is_pair (s); s = scm_cdr (s))
{
SCM p = scm_car (s);
- Context_def *td = Context_def::unsmob (scm_cdr (p));
+ Context_def *td = unsmob<Context_def> (scm_cdr (p));
if (td && scm_is_eq (scm_car (p), td->get_context_name ())
&& (SCM_UNBNDP (context_name) || td->is_alias (context_name)))
ell = scm_cons (p, ell);
"Return the output-scale for output definition @var{def}.")
{
LY_ASSERT_SMOB (Output_def, def, 1);
- Output_def *b = Output_def::unsmob (def);
+ Output_def *b = unsmob<Output_def> (def);
return scm_from_double (output_scale (b));
}
{
LY_ASSERT_SMOB (Output_def, def, 1);
- Output_def *paper = Output_def::unsmob (def);
+ Output_def *paper = unsmob<Output_def> (def);
Font_metric *fm = select_font (paper, chain);
return fm->self_scm ();
}
" @var{def} as a double.")
{
LY_ASSERT_SMOB (Output_def, def, 1);
- Output_def *layout = Output_def::unsmob (def);
+ Output_def *layout = unsmob<Output_def> (def);
return scm_from_double (layout->get_dimension (sym));
}
" @var{def} (e.g., @code{\\paper}).")
{
LY_ASSERT_SMOB (Output_def, def, 1);
- Output_def *b = Output_def::unsmob (def);
+ Output_def *b = unsmob<Output_def> (def);
SCM tab1 = b->lookup_variable (ly_symbol2scm ("scaled-fonts"));
SCM tab2 = b->lookup_variable (ly_symbol2scm ("pango-fonts"));
{
SCM entry = scm_car (s);
- Font_metric *fm = Font_metric::unsmob (entry);
+ Font_metric *fm = unsmob<Font_metric> (entry);
if (dynamic_cast<Modified_font_metric *> (fm)
|| dynamic_cast<Pango_font *> (fm))
void
assign_context_def (Output_def * m, SCM transdef)
{
- Context_def *tp = Context_def::unsmob (transdef);
+ Context_def *tp = unsmob<Context_def> (transdef);
assert (tp);
if (tp)
SCM
find_context_def (Output_def const *m, SCM name)
{
- Context_def *cd = Context_def::unsmob (m->lookup_variable (name));
+ Context_def *cd = unsmob<Context_def> (m->lookup_variable (name));
return cd ? cd->self_scm () : SCM_EOL;
}
" @var{pb} such that page turns only happen in specified places,"
" returning its pages.")
{
- Page_turn_page_breaking b (Paper_book::unsmob (pb));
+ Page_turn_page_breaking b (unsmob<Paper_book> (pb));
return b.solve ();
}
" @var{pb} to minimize badness in bother vertical and horizontal"
" spacing.")
{
- Optimal_page_breaking b (Paper_book::unsmob (pb));
+ Optimal_page_breaking b (unsmob<Paper_book> (pb));
return b.solve ();
}
" without looking for optimal spacing: stack as many lines on"
" a page before moving to the next one.")
{
- Minimal_page_breaking b (Paper_book::unsmob (pb));
+ Minimal_page_breaking b (unsmob<Paper_book> (pb));
return b.solve ();
}
" page. The paper-width setting will be modified so that"
" every page will be wider than the widest line.")
{
- One_line_page_breaking b (Paper_book::unsmob (pb));
+ One_line_page_breaking b (unsmob<Paper_book> (pb));
return b.solve ();
}
for (SCM s = systems; scm_is_pair (s); s = scm_cdr (s))
{
SCM paper_system = scm_car (s);
- if (Grob *g = Grob::unsmob (scm_car (s)))
+ if (Grob *g = unsmob<Grob> (scm_car (s)))
{
System *sys = dynamic_cast<System *> (g);
paper_system = sys->get_paper_system ();
// Create the page and draw it.
SCM page = make_page (page_num, last);
- Prob *p = Prob::unsmob (page);
+ Prob *p = unsmob<Prob> (page);
p->set_property ("lines", paper_systems);
p->set_property ("configuration", configuration);
- Stencil *foot_p = Stencil::unsmob (p->get_property ("foot-stencil"));
+ Stencil *foot_p = unsmob<Stencil> (p->get_property ("foot-stencil"));
Stencil foot = foot_p ? *foot_p : Stencil ();
SCM footnotes = Page_layout_problem::get_footnotes_from_lines (systems);
for (SCM l = lines; scm_is_pair (l); l = scm_cdr (l))
{
SCM labels = SCM_EOL;
- if (Grob *line = Grob::unsmob (scm_car (l)))
+ if (Grob *line = unsmob<Grob> (scm_car (l)))
{
System *system = dynamic_cast<System *> (line);
labels = system->get_property ("labels");
}
- else if (Prob *prob = Prob::unsmob (scm_car (l)))
+ else if (Prob *prob = unsmob<Prob> (scm_car (l)))
labels = prob->get_property ("labels");
for (SCM lbls = labels; scm_is_pair (lbls); lbls = scm_cdr (lbls))
SCM specs = book_->get_system_specs ();
for (SCM s = specs; scm_is_pair (s); s = scm_cdr (s))
{
- if (Paper_score *ps = Paper_score::unsmob (scm_car (s)))
+ if (Paper_score *ps = unsmob<Paper_score> (scm_car (s)))
{
system_specs_.push_back (System_spec (ps));
}
else
{
- Prob *pb = Prob::unsmob (scm_car (s));
+ Prob *pb = unsmob<Prob> (scm_car (s));
assert (pb);
pb->protect ();
LY_ASSERT_SMOB (Grob, from_scm, 1);
LY_ASSERT_SMOB (Grob, to_scm, 2);
- Grob *from = Grob::unsmob (from_scm);
- Grob *to = Grob::unsmob (to_scm);
+ Grob *from = unsmob<Grob> (from_scm);
+ Grob *to = unsmob<Grob> (to_scm);
return Page_layout_problem::get_spacing_spec (from, to, false, 0, 0);
}
vector<Grob *> footnotes;
for (SCM s = lines; scm_is_pair (s); s = scm_cdr (s))
{
- if (Grob *g = Grob::unsmob (scm_car (s)))
+ if (Grob *g = unsmob<Grob> (scm_car (s)))
{
System *sys = dynamic_cast<System *> (g);
if (!sys)
extract_grob_set (sys, "footnotes-after-line-breaking", footnote_grobs);
footnotes.insert (footnotes.end (), footnote_grobs.begin (), footnote_grobs.end ());
}
- else if (Prob *p = Prob::unsmob (scm_car (s)))
+ else if (Prob *p = unsmob<Prob> (scm_car (s)))
{
SCM stencils = p->get_property ("footnotes");
if (scm_is_null (stencils))
return SCM_EOL;
bool footnotes_added;
- if (Grob *g = Grob::unsmob (scm_car (lines)))
+ if (Grob *g = unsmob<Grob> (scm_car (lines)))
footnotes_added = !scm_is_null (g->get_property ("footnote-stencil"));
- else if (Prob *p = Prob::unsmob (scm_car (lines)))
+ else if (Prob *p = unsmob<Prob> (scm_car (lines)))
footnotes_added = !scm_is_null (p->get_property ("footnote-stencil"));
else
{
SCM out = SCM_EOL;
for (SCM s = lines; scm_is_pair (s); s = scm_cdr (s))
{
- if (Grob *g = Grob::unsmob (scm_car (s)))
+ if (Grob *g = unsmob<Grob> (scm_car (s)))
out = scm_cons (g->get_property ("footnote-stencil"), out);
- else if (Prob *p = Prob::unsmob (scm_car (s)))
+ else if (Prob *p = unsmob<Prob> (scm_car (s)))
out = scm_cons (p->get_property ("footnote-stencil"), out);
else
programming_error ("Systems on a page must be a prob or grob.");
}
SCM markup = scm_call_1 (numbering_function, scm_from_int (counter));
SCM stencil = Text_interface::interpret_markup (layout, props, markup);
- Stencil *st = Stencil::unsmob (stencil);
+ Stencil *st = unsmob<Stencil> (stencil);
if (!st)
{
programming_error ("Your numbering function needs to return a stencil.");
markup = SCM_EOL;
stencil = Stencil (Box (Interval (0, 0), Interval (0, 0)), SCM_EOL).smobbed_copy ();
- st = Stencil::unsmob (stencil);
+ st = unsmob<Stencil> (stencil);
}
in_text_numbers = scm_cons (markup, in_text_numbers);
numbers = scm_cons (stencil, numbers);
for (SCM p = numbers; scm_is_pair (p); p = scm_cdr (p))
{
- Stencil *st = Stencil::unsmob (scm_car (p));
+ Stencil *st = unsmob<Stencil> (scm_car (p));
if (!st->extent (X_AXIS).is_empty ())
st->translate_axis ((max_length - st->extent (X_AXIS)[RIGHT]),
X_AXIS);
for (SCM s = lines; scm_is_pair (s); s = scm_cdr (s))
{
// Take care of musical systems.
- if (Grob *g = Grob::unsmob (scm_car (s)))
+ if (Grob *g = unsmob<Grob> (scm_car (s)))
{
System *sys = dynamic_cast<System *> (g);
if (!sys)
SCM footnote_stl = Text_interface::interpret_markup (paper->self_scm (),
props, footnote_markup);
- Stencil footnote_stencil = *Stencil::unsmob (footnote_stl);
+ Stencil footnote_stencil = *unsmob<Stencil> (footnote_stl);
bool do_numbering = to_boolean (footnote->get_property ("automatically-numbered"));
if (Spanner *orig = dynamic_cast<Spanner *>(footnote))
{
orig->broken_intos_[i]->set_property ("text", annotation_scm);
}
- Stencil annotation = *Stencil::unsmob (scm_car (numbers));
+ Stencil annotation = *unsmob<Stencil> (scm_car (numbers));
annotation.translate_axis ((footnote_stencil.extent (Y_AXIS)[UP]
+ number_raise
- annotation.extent (Y_AXIS)[UP]),
sys->set_property ("footnote-stencil", mol.smobbed_copy ());
}
// Take care of top-level markups
- else if (Prob *p = Prob::unsmob (scm_car (s)))
+ else if (Prob *p = unsmob<Prob> (scm_car (s)))
{
SCM stencils = p->get_property ("footnotes");
Stencil mol;
for (SCM st = stencils; scm_is_pair (st); st = scm_cdr (st))
{
- Stencil footnote_stencil = *Stencil::unsmob (scm_caddar (st));
+ Stencil footnote_stencil = *unsmob<Stencil> (scm_caddar (st));
bool do_numbering = to_boolean (scm_cadar (st));
SCM in_text_stencil = Stencil ().smobbed_copy ();
if (do_numbering)
{
- Stencil annotation = *Stencil::unsmob (scm_car (numbers));
+ Stencil annotation = *unsmob<Stencil> (scm_car (numbers));
SCM in_text_annotation = scm_car (in_text_numbers);
in_text_stencil = Text_interface::interpret_markup (layout,
props,
in_text_annotation);
- if (!Stencil::is_smob (in_text_stencil))
+ if (!unsmob<Stencil> (in_text_stencil))
in_text_stencil = SCM_EOL;
annotation.translate_axis ((footnote_stencil.extent (Y_AXIS)[UP]
+ number_raise
SCM footnote_stencil = Text_interface::interpret_markup (paper->self_scm (),
props, markup);
- Stencil *footnote_separator = Stencil::unsmob (footnote_stencil);
+ Stencil *footnote_separator = unsmob<Stencil> (footnote_stencil);
return footnote_separator ? *footnote_separator : Stencil ();
}
for (SCM s = footnotes; scm_is_pair (s); s = scm_cdr (s))
{
- Stencil *stencil = Stencil::unsmob (scm_car (s));
+ Stencil *stencil = unsmob<Stencil> (scm_car (s));
if (!stencil)
continue;
Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM systems)
: bottom_skyline_ (DOWN)
{
- Prob *page = Prob::unsmob (page_scm);
+ Prob *page = unsmob<Prob> (page_scm);
bottom_loose_baseline_ = 0;
header_height_ = 0;
footer_height_ = 0;
if (page)
{
- Stencil *head = Stencil::unsmob (page->get_property ("head-stencil"));
- Stencil *foot = Stencil::unsmob (page->get_property ("foot-stencil"));
+ Stencil *head = unsmob<Stencil> (page->get_property ("head-stencil"));
+ Stencil *foot = unsmob<Stencil> (page->get_property ("foot-stencil"));
Stencil foot_stencil = foot ? *foot : Stencil ();
markup_markup_spacing = paper->c_variable ("markup-markup-spacing");
last_bottom_spacing = paper->c_variable ("last-bottom-spacing");
top_system_spacing = paper->c_variable ("top-system-spacing");
- if (scm_is_pair (systems) && Prob::is_smob (scm_car (systems)))
+ if (scm_is_pair (systems) && unsmob<Prob> (scm_car (systems)))
top_system_spacing = paper->c_variable ("top-markup-spacing");
// Note: the page height here does _not_ reserve space for headers and
{
bool first = (s == systems);
- if (Grob *g = Grob::unsmob (scm_car (s)))
+ if (Grob *g = unsmob<Grob> (scm_car (s)))
{
System *sys = dynamic_cast<System *> (g);
if (!sys)
append_system (sys, spring, indent, padding);
last_system_was_title = false;
}
- else if (Prob *p = Prob::unsmob (scm_car (s)))
+ else if (Prob *p = unsmob<Prob> (scm_car (s)))
{
SCM spec = first ? top_system_spacing
: (last_system_was_title ? markup_markup_spacing : score_markup_spacing);
void
Page_layout_problem::append_system (System *sys, Spring const &spring, Real indent, Real padding)
{
- Grob *align = Grob::unsmob (sys->get_object ("vertical-alignment"));
+ Grob *align = unsmob<Grob> (sys->get_object ("vertical-alignment"));
if (!align)
return;
build_system_skyline (elts, minimum_offsets_with_min_dist, &up_skyline, &down_skyline);
up_skyline.shift (indent);
down_skyline.shift (indent);
- Stencil *in_note_stencil = Stencil::unsmob (sys->get_property ("in-note-stencil"));
+ Stencil *in_note_stencil = unsmob<Stencil> (sys->get_property ("in-note-stencil"));
if (in_note_stencil && in_note_stencil->extent (Y_AXIS).length () > 0)
{
// store the minimum distance, considering relative indents,
// for a loose line
Skyline first_skyline (UP);
- Skyline_pair *sky = Skyline_pair::unsmob (elts[0]->get_property ("vertical-skylines"));
+ Skyline_pair *sky = unsmob<Skyline_pair> (elts[0]->get_property ("vertical-skylines"));
if (sky)
first_skyline.merge ((*sky)[UP]);
first_skyline.shift (indent);
void
Page_layout_problem::append_prob (Prob *prob, Spring const &spring, Real padding)
{
- Skyline_pair *sky = Skyline_pair::unsmob (prob->get_property ("vertical-skylines"));
+ Skyline_pair *sky = unsmob<Skyline_pair> (prob->get_property ("vertical-skylines"));
Real minimum_distance = 0;
bool tight_spacing = to_boolean (prob->get_property ("tight-spacing"));
bottom_loose_baseline_);
bottom_skyline_ = (*sky)[DOWN];
}
- else if (Stencil *sten = Stencil::unsmob (prob->get_property ("stencil")))
+ else if (Stencil *sten = unsmob<Stencil> (prob->get_property ("stencil")))
{
Interval iv = sten->extent (Y_AXIS);
minimum_distance = iv[UP] - bottom_skyline_.max_height ();
{
*tail = scm_cons (scm_from_double (solution_[spring_idx]), SCM_EOL);
tail = SCM_CDRLOC (*tail);
- Interval prob_extent = Stencil::unsmob (elements_[i].prob->get_property ("stencil"))->extent (Y_AXIS);
+ Interval prob_extent = unsmob<Stencil> (elements_[i].prob->get_property ("stencil"))->extent (Y_AXIS);
// Lay out any non-spaceable lines between this line and
// the last one.
{
Real dy = minimum_translations[i] - first_translation;
Grob *g = staves[i];
- Skyline_pair *sky = Skyline_pair::unsmob (g->get_property ("vertical-skylines"));
+ Skyline_pair *sky = unsmob<Skyline_pair> (g->get_property ("vertical-skylines"));
if (sky)
{
up->raise (-dy);
Interval
Page_layout_problem::prob_extent (Prob *p)
{
- Stencil *sten = Stencil::unsmob (p->get_property ("stencil"));
+ Stencil *sten = unsmob<Stencil> (p->get_property ("stencil"));
return sten ? sten->extent (Y_AXIS) : Interval (0, 0);
}
Stream_event *cause = gi.event_cause ();
Duration *dur_ptr = cause
- ? Duration::unsmob (cause->get_property ("duration"))
+ ? unsmob<Duration> (cause->get_property ("duration"))
: 0;
if (!dur_ptr)
void
Page_turn_engraver::stop_translation_timestep ()
{
- Grob *pc = Grob::unsmob (get_property ("currentCommandColumn"));
+ Grob *pc = unsmob<Grob> (get_property ("currentCommandColumn"));
if (pc)
{
{
Rational now = now_mom ().main_part_;
Real pen = penalty ((now_mom () - rest_begin_).main_part_ + repeat_begin_rest_length_);
- Moment *m = Moment::unsmob (get_property ("minimumRepeatLengthForPageTurn"));
+ Moment *m = unsmob<Moment> (get_property ("minimumRepeatLengthForPageTurn"));
if (m && *m > (now_mom () - repeat_begin_))
pen = infinity_f;
(SCM f),
"Is @var{f} a pango font?")
{
- return scm_from_bool (derived_unsmob<Pango_font> (f));
+ return scm_from_bool (unsmob<Pango_font> (f));
}
LY_DEFINE (ly_pango_font_physical_fonts, "ly:pango-font-physical-fonts",
"Return alist of @code{(ps-name file-name font-index)} lists"
" for Pango font@tie{}@var{f}.")
{
- Pango_font *pf = derived_unsmob<Pango_font> (f);
+ Pango_font *pf = unsmob<Pango_font> (f);
SCM alist = SCM_EOL;
if (pf)
"Return pages in @code{Paper_book} object @var{pb}.")
{
LY_ASSERT_SMOB (Paper_book, pb, 1);
- return Paper_book::unsmob (pb)->pages ();
+ return unsmob<Paper_book> (pb)->pages ();
}
LY_DEFINE (ly_paper_book_scopes, "ly:paper-book-scopes",
"Return scopes in @code{Paper_book} object @var{pb}.")
{
LY_ASSERT_SMOB (Paper_book, pb, 1);
- Paper_book *book = Paper_book::unsmob (pb);
+ Paper_book *book = unsmob<Paper_book> (pb);
SCM scopes = SCM_EOL;
if (book->parent_)
"Return performances in @code{Paper_book} object @var{pb}.")
{
LY_ASSERT_SMOB (Paper_book, pb, 1);
- return Paper_book::unsmob (pb)->performances ();
+ return unsmob<Paper_book> (pb)->performances ();
}
LY_DEFINE (ly_paper_book_systems, "ly:paper-book-systems",
"Return systems in @code{Paper_book} object @var{pb}.")
{
LY_ASSERT_SMOB (Paper_book, pb, 1);
- return Paper_book::unsmob (pb)->systems ();
+ return unsmob<Paper_book> (pb)->systems ();
}
LY_DEFINE (ly_paper_book_paper, "ly:paper-book-paper",
" in @code{Paper_book} object @var{pb}.")
{
LY_ASSERT_SMOB (Paper_book, pb, 1);
- Paper_book *pbook = Paper_book::unsmob (pb);
+ Paper_book *pbook = unsmob<Paper_book> (pb);
return pbook->paper_->self_scm ();
}
" in @code{Paper_book} object @var{pb}.")
{
LY_ASSERT_SMOB (Paper_book, pb, 1);
- Paper_book *pbook = Paper_book::unsmob (pb);
+ Paper_book *pbook = unsmob<Paper_book> (pb);
return pbook->header_;
}
if (scm_is_pair (bookparts_))
{
for (SCM p = bookparts_; scm_is_pair (p); p = scm_cdr (p))
- if (Paper_book *pbookpart = Paper_book::unsmob (scm_car (p)))
+ if (Paper_book *pbookpart = unsmob<Paper_book> (scm_car (p)))
{
bool is_last_part = (is_last && !scm_is_pair (scm_cdr (p)));
page_nb += pbookpart->output_aux (output_channel,
paper_->self_scm (),
scopes);
- if (Stencil::is_smob (tit))
- title = *Stencil::unsmob (tit);
+ if (unsmob<Stencil> (tit))
+ title = *unsmob<Stencil> (tit);
if (!title.is_empty ())
title.align_to (Y_AXIS, UP);
paper_->self_scm (),
scopes);
- if (Stencil::is_smob (tit))
- title = *Stencil::unsmob (tit);
+ if (unsmob<Stencil> (tit))
+ title = *unsmob<Stencil> (tit);
if (!title.is_empty ())
title.align_to (Y_AXIS, UP);
void
set_page_permission (SCM sys, SCM symbol, SCM permission)
{
- if (Paper_score *ps = Paper_score::unsmob (sys))
+ if (Paper_score *ps = unsmob<Paper_score> (sys))
{
vector<Grob *> cols = ps->get_columns ();
if (cols.size ())
col->find_prebroken_piece (LEFT)->set_property (symbol, permission);
}
}
- else if (Prob *pb = Prob::unsmob (sys))
+ else if (Prob *pb = unsmob<Prob> (sys))
pb->set_property (symbol, permission);
}
void
set_labels (SCM sys, SCM labels)
{
- if (Paper_score *ps = Paper_score::unsmob (sys))
+ if (Paper_score *ps = unsmob<Paper_score> (sys))
{
vector<Grob *> cols = ps->get_columns ();
if (cols.size ())
labels)));
}
}
- else if (Prob *pb = Prob::unsmob (sys))
+ else if (Prob *pb = unsmob<Prob> (sys))
pb->set_property ("labels",
scm_append_x (scm_list_2 (pb->get_property ("labels"),
labels)));
if (scm_is_null (header_0_))
header_0_ = header;
}
- else if (Page_marker *page_marker = Page_marker::unsmob (scm_car (s)))
+ else if (Page_marker *page_marker = unsmob<Page_marker> (scm_car (s)))
{
/* page markers are used to set page breaking/turning permission,
or to place bookmarking labels */
labels = scm_cons (page_marker->label (), labels);
}
}
- else if (Music_output *mop = Music_output::unsmob (scm_car (s)))
+ else if (Music_output *mop = unsmob<Music_output> (scm_car (s)))
{
if (Paper_score *pscore = dynamic_cast<Paper_score *> (mop))
{
if (scm_is_pair (system_specs))
set_system_penalty (scm_car (system_specs), header);
- if (Prob::is_smob (title))
+ if (unsmob<Prob> (title))
{
system_specs = scm_cons (title, system_specs);
- Prob::unsmob (title)->unprotect ();
+ unsmob<Prob> (title)->unprotect ();
}
header = SCM_EOL;
ps->set_property ("last-markup-line", SCM_BOOL_F);
ps->set_property ("first-markup-line", SCM_BOOL_F);
- paper_system_set_stencil (ps, *Stencil::unsmob (t));
+ paper_system_set_stencil (ps, *unsmob<Stencil> (t));
- SCM footnotes = get_footnotes (Stencil::unsmob (t)->expr ());
+ SCM footnotes = get_footnotes (unsmob<Stencil> (t)->expr ());
ps->set_property ("footnotes", footnotes);
ps->set_property ("is-title", SCM_BOOL_T);
if (list == texts)
{
SCM system_list = SCM_EOL;
for (SCM p = bookparts_; scm_is_pair (p); p = scm_cdr (p))
- if (Paper_book *pbookpart = Paper_book::unsmob (scm_car (p)))
+ if (Paper_book *pbookpart = unsmob<Paper_book> (scm_car (p)))
system_list = scm_cons (pbookpart->systems (), system_list);
systems_ = scm_append (scm_reverse_x (system_list, SCM_EOL));
}
for (SCM s = specs; scm_is_pair (s); s = scm_cdr (s))
{
if (Paper_score * pscore
- = Paper_score::unsmob (scm_car (s)))
+ = unsmob<Paper_score> (scm_car (s)))
{
SCM system_list
= scm_vector_to_list (pscore->get_paper_systems ());
Prob *last = 0;
for (SCM s = systems_; scm_is_pair (s); s = scm_cdr (s))
{
- Prob *ps = Prob::unsmob (scm_car (s));
+ Prob *ps = unsmob<Prob> (scm_car (s));
ps->set_property ("number", scm_from_int (++i));
if (last
if (scm_is_pair (scm_cdr (s)))
{
SCM perm = ps->get_property ("page-break-permission");
- Prob *next = Prob::unsmob (scm_cadr (s));
+ Prob *next = unsmob<Prob> (scm_cadr (s));
if (scm_is_null (perm))
next->set_property ("penalty", scm_from_int (10001));
else if (scm_is_eq (perm, ly_symbol2scm ("force")))
if (scm_is_pair (bookparts_))
{
for (SCM p = bookparts_; scm_is_pair (p); p = scm_cdr (p))
- if (Paper_book *pbookpart = Paper_book::unsmob (scm_car (p)))
+ if (Paper_book *pbookpart = unsmob<Paper_book> (scm_car (p)))
pages_ = scm_cons (pbookpart->pages (), pages_);
pages_ = scm_append (scm_reverse_x (pages_, SCM_EOL));
}
systems_ = SCM_EOL;
for (SCM p = pages_; scm_is_pair (p); p = scm_cdr (p))
{
- Prob *page = Prob::unsmob (scm_car (p));
+ Prob *page = unsmob<Prob> (scm_car (p));
SCM systems = page->get_property ("lines");
systems_ = scm_cons (systems, systems_);
}
void
Paper_column_engraver::initialize ()
{
- system_ = derived_unsmob<System> (get_property ("rootSystem"));
+ system_ = unsmob<System> (get_property ("rootSystem"));
make_columns ();
system_->set_bound (LEFT, command_column_);
if (start_of_measure)
{
Moment mlen = Moment (measure_length (context ()));
- Grob *column = Grob::unsmob (get_property ("currentCommandColumn"));
+ Grob *column = unsmob<Grob> (get_property ("currentCommandColumn"));
if (column)
column->set_property ("measure-length", mlen.smobbed_copy ());
else
if (!elem->get_parent (X_AXIS))
elem->set_parent (col, X_AXIS);
- if (!Grob::is_smob (elem->get_object ("axis-group-parent-X")))
+ if (!unsmob<Grob> (elem->get_object ("axis-group-parent-X")))
elem->set_object ("axis-group-parent-X", col->self_scm ());
if (Accidental_placement::has_interface (elem)
SCM mpos = get_property ("measurePosition");
SCM barnum = get_property ("internalBarNumber");
- if (Moment::is_smob (mpos)
+ if (unsmob<Moment> (mpos)
&& scm_is_integer (barnum))
{
SCM where = scm_cons (barnum,
Paper_column::when_mom (Grob *me)
{
SCM m = me->get_property ("when");
- if (Moment *when = Moment::unsmob (m))
+ if (Moment *when = unsmob<Moment> (m))
return *when;
return Moment (0);
}
{
SCM m = me->get_property ("shortest-starter-duration");
Moment s (0);
- if (Moment::unsmob (m))
- s = *Moment::unsmob (m);
+ if (unsmob<Moment> (m))
+ s = *unsmob<Moment> (m);
return s != Moment (0);
}
for (LEFT_and_RIGHT (d))
{
- Skyline_pair *sp = Skyline_pair::unsmob (cols[d]->get_property ("horizontal-skylines"));
+ Skyline_pair *sp = unsmob<Skyline_pair> (cols[d]->get_property ("horizontal-skylines"));
if (sp)
skys[d] = (*sp)[-d];
}
SCM
Paper_column::print (SCM p)
{
- Paper_column *me = derived_unsmob<Paper_column> (p);
+ Paper_column *me = unsmob<Paper_column> (p);
string r = ::to_string (Paper_column::get_rank (me));
- Moment *mom = Moment::unsmob (me->get_property ("when"));
+ Moment *mom = unsmob<Moment> (me->get_property ("when"));
string when = mom ? mom->to_string () : "?/?";
Font_metric *musfont = Font_interface::get_default_font (me);
SCM when_mol = Text_interface::interpret_markup (me->layout ()->self_scm (),
properties,
ly_string2scm (when));
- Stencil t = *Stencil::unsmob (scm_mol);
+ Stencil t = *unsmob<Stencil> (scm_mol);
t.scale (1.2, 1.4);
- t.add_at_edge (Y_AXIS, DOWN, *Stencil::unsmob (when_mol), 0.1);
+ t.add_at_edge (Y_AXIS, DOWN, *unsmob<Stencil> (when_mol), 0.1);
t.align_to (X_AXIS, LEFT);
// compensate for font serifs and half letter-distance
t.translate (Offset (-0.1, 0));
for (SCM s = me->get_object ("ideal-distances");
scm_is_pair (s); s = scm_cdr (s))
{
- Spring *sp = Spring::unsmob (scm_caar (s));
- if (!Grob::is_smob (scm_cdar (s))
- || !Grob::unsmob (scm_cdar (s))->get_system ())
+ Spring *sp = unsmob<Spring> (scm_caar (s));
+ if (!unsmob<Grob> (scm_cdar (s))
+ || !unsmob<Grob> (scm_cdar (s))->get_system ())
continue;
j++;
SCM stil = Text_interface::interpret_markup (me->layout ()->self_scm (),
properties,
ly_string2scm (String_convert::form_string ("%5.2lf", sp->distance ())));
- Stencil *number_stc = Stencil::unsmob (stil);
+ Stencil *number_stc = unsmob<Stencil> (stil);
number_stc->scale (1, 1.1);
Real num_height = number_stc->extent (Y_AXIS).length ();
Real num_len = number_stc->extent (X_AXIS).length ();
scm_is_pair (s); s = scm_cdr (s))
{
Real dist = scm_to_double (scm_cdar (s));
- Grob *other = Grob::unsmob (scm_caar (s));
+ Grob *other = unsmob<Grob> (scm_caar (s));
if (!other || other->get_system () != me->get_system ())
continue;
SCM stil = Text_interface::interpret_markup (me->layout ()->self_scm (),
properties,
ly_string2scm (String_convert::form_string ("%5.2lf", dist)));
- Stencil *number_stc = Stencil::unsmob (stil);
+ Stencil *number_stc = unsmob<Stencil> (stil);
number_stc->scale (1, 1.1);
Real num_height = number_stc->extent (Y_AXIS).length ();
Real num_len = number_stc->extent (X_AXIS).length ();
SCM
Paper_column::before_line_breaking (SCM grob)
{
- Grob *me = Grob::unsmob (grob);
+ Grob *me = unsmob<Grob> (grob);
SCM bbm = me->get_object ("bounded-by-me");
- Grob_array *ga = Grob_array::unsmob (bbm);
+ Grob_array *ga = unsmob<Grob_array> (bbm);
if (!ga)
return SCM_UNSPECIFIED;
SCM sizes = scm_hashq_ref (font_table, f->self_scm (), SCM_EOL);
SCM handle = scm_assoc (scm_from_double (lookup_mag), sizes);
if (scm_is_pair (handle))
- return Font_metric::unsmob (scm_cdr (handle));
+ return unsmob<Font_metric> (scm_cdr (handle));
SCM val = Modified_font_metric::make_scaled_font_metric (f, lookup_mag);
sizes = scm_acons (scm_from_double (lookup_mag), val, sizes);
- Font_metric::unsmob (val)->unprotect ();
+ unsmob<Font_metric> (val)->unprotect ();
scm_hashq_set_x (font_table, f->self_scm (), sizes);
- return Font_metric::unsmob (val);
+ return unsmob<Font_metric> (val);
}
Font_metric *
SCM size_key = scm_from_double (factor);
SCM handle = scm_assoc (size_key, sizes);
if (scm_is_pair (handle))
- return Font_metric::unsmob (scm_cdr (handle));
+ return unsmob<Font_metric> (scm_cdr (handle));
PangoFontDescription *description
= pango_font_description_from_string (scm_i_string_chars (descr));
SCM proc = ly_lily_module_constant ("scale-layout");
SCM new_pap = scm_call_2 (proc, o->self_scm (), scm_from_double (amount));
- o = Output_def::unsmob (new_pap);
+ o = unsmob<Output_def> (new_pap);
o->protect ();
return o;
}
LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
LY_ASSERT_SMOB (Stencil, stencil, 2);
- Paper_outputter *po = Paper_outputter::unsmob (outputter);
- Stencil *st = Stencil::unsmob (stencil);
+ Paper_outputter *po = unsmob<Paper_outputter> (outputter);
+ Stencil *st = unsmob<Stencil> (stencil);
po->output_stencil (*st);
return SCM_UNSPECIFIED;
LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
LY_ASSERT_TYPE (scm_is_string, str, 2);
- Paper_outputter *po = Paper_outputter::unsmob (outputter);
+ Paper_outputter *po = unsmob<Paper_outputter> (outputter);
return po->dump_string (str);
}
"Return output port for @var{outputter}.")
{
LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
- Paper_outputter *po = Paper_outputter::unsmob (outputter);
+ Paper_outputter *po = unsmob<Paper_outputter> (outputter);
return po->file ();
}
"Close port of @var{outputter}.")
{
LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
- Paper_outputter *po = Paper_outputter::unsmob (outputter);
+ Paper_outputter *po = unsmob<Paper_outputter> (outputter);
po->close ();
return SCM_UNSPECIFIED;
"Eval @var{expr} in module of @var{outputter}.")
{
LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
- Paper_outputter *po = Paper_outputter::unsmob (outputter);
+ Paper_outputter *po = unsmob<Paper_outputter> (outputter);
po->output_scheme (expr);
{
LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
- Paper_outputter *po = Paper_outputter::unsmob (outputter);
+ Paper_outputter *po = unsmob<Paper_outputter> (outputter);
return po->module ();
}
{
LY_ASSERT_SMOB (Paper_score, paper_score, 1);
- Paper_score *pscore = Paper_score::unsmob (paper_score);
+ Paper_score *pscore = unsmob<Paper_score> (paper_score);
return pscore->get_paper_systems ();
}
" their extents otherwise.")
{
Real ret = 0;
- Prob *p1 = Prob::unsmob (sys1);
- Prob *p2 = Prob::unsmob (sys2);
- Skyline_pair *sky1 = Skyline_pair::unsmob (p1->get_property ("vertical-skylines"));
- Skyline_pair *sky2 = Skyline_pair::unsmob (p2->get_property ("vertical-skylines"));
+ Prob *p1 = unsmob<Prob> (sys1);
+ Prob *p2 = unsmob<Prob> (sys2);
+ Skyline_pair *sky1 = unsmob<Skyline_pair> (p1->get_property ("vertical-skylines"));
+ Skyline_pair *sky2 = unsmob<Skyline_pair> (p2->get_property ("vertical-skylines"));
if (sky1 && sky2)
ret = (*sky1)[DOWN].distance ((*sky2)[UP]);
else
{
- Stencil *s1 = Stencil::unsmob (p1->get_property ("stencil"));
- Stencil *s2 = Stencil::unsmob (p2->get_property ("stencil"));
+ Stencil *s1 = unsmob<Stencil> (p1->get_property ("stencil"));
+ Stencil *s2 = unsmob<Stencil> (p2->get_property ("stencil"));
Interval iv1 = s1->extent (Y_AXIS);
Interval iv2 = s2->extent (Y_AXIS);
ret = iv2[UP] - iv1[DOWN];
}
SCM
-protected_ly_eval_scm (Parse_start *ps)
+protected_ly_eval_scm (void *ps)
{
/*
Catch #t : catch all Scheme level errors.
*/
return scm_internal_catch (SCM_BOOL_T,
catch_protected_eval_body,
- (void *) ps,
- &parse_handler, (void *) ps);
+ ps,
+ &parse_handler, ps);
}
bool parse_protect_global = true;
{
Parse_start ps (form, i, safe, parser);
- SCM ans = parse_protect_global ? protected_ly_eval_scm (&ps)
- : internal_ly_eval_scm (&ps);
+ SCM ans = scm_c_with_fluids
+ (scm_list_2 (ly_lily_module_constant ("%parser"),
+ ly_lily_module_constant ("%location")),
+ scm_list_2 (parser->self_scm (),
+ i.smobbed_copy ()),
+ parse_protect_global ? protected_ly_eval_scm
+ : catch_protected_eval_body, (void *) &ps);
+
scm_remember_upto_here_1 (form);
return ans;
}
}
| BOOK_IDENTIFIER {
SCM proc = parser->lexer_->lookup_identifier
- (Book::unsmob($1)->paper_
+ (unsmob<Book>($1)->paper_
? "toplevel-book-handler"
: "toplevel-bookpart-handler");
scm_call_2 (proc, parser->self_scm (), $1);
{
SCM proc = parser->lexer_->lookup_identifier ("toplevel-text-handler");
scm_call_2 (proc, parser->self_scm (), out);
- } else if (Score::is_smob ($1))
+ } else if (unsmob<Score> ($1))
{
SCM proc = parser->lexer_->lookup_identifier ("toplevel-score-handler");
scm_call_2 (proc, parser->self_scm (), $1);
- } else if (Output_def * od = Output_def::unsmob ($1)) {
+ } else if (Output_def * od = unsmob<Output_def> ($1)) {
SCM id = SCM_EOL;
if (to_boolean (od->c_variable ("is-paper")))
}
| output_def {
SCM id = SCM_EOL;
- Output_def * od = Output_def::unsmob ($1);
+ Output_def * od = unsmob<Output_def> ($1);
if (to_boolean (od->c_variable ("is-paper")))
id = ly_symbol2scm ("$defaultpaper");
| post_event post_events
{
$$ = scm_reverse_x ($2, SCM_EOL);
- if (Music *m = Music::unsmob ($1))
+ if (Music *m = unsmob<Music> ($1))
{
if (m->is_mus_type ("post-event-wrapper"))
$$ = scm_append
| multiplied_duration
| music_embedded music_embedded music_list {
$3 = scm_reverse_x ($3, SCM_EOL);
- if (Music::is_smob ($2))
+ if (unsmob<Music> ($2))
$3 = scm_cons ($2, $3);
- if (Music::is_smob ($1))
+ if (unsmob<Music> ($1))
$3 = scm_cons ($1, $3);
$$ = MAKE_SYNTAX ("sequential-music", @$, $3);
}
| post_event_nofinger post_events
{
$$ = scm_reverse_x ($2, SCM_EOL);
- if (Music *m = Music::unsmob ($1))
+ if (Music *m = unsmob<Music> ($1))
{
if (m->is_mus_type ("post-event-wrapper"))
$$ = scm_append
CONTEXT '{' context_def_spec_body '}'
{
$$ = $3;
- Context_def *td = Context_def::unsmob ($$);
+ Context_def *td = unsmob<Context_def> ($$);
if (!td) {
$$ = Context_def::make_scm ();
- td = Context_def::unsmob ($$);
+ td = unsmob<Context_def> ($$);
}
td->origin ()->set_spot (@$);
}
}
| context_def_spec_body context_mod {
if (!SCM_UNBNDP ($2)) {
- Context_def *td = Context_def::unsmob ($$);
+ Context_def *td = unsmob<Context_def> ($$);
if (!td) {
$$ = Context_def::make_scm ();
- td = Context_def::unsmob ($$);
+ td = unsmob<Context_def> ($$);
}
- Context_def::unsmob ($$)->add_context_mod ($2);
+ unsmob<Context_def> ($$)->add_context_mod ($2);
}
}
| context_def_spec_body context_modification {
- Context_def *td = Context_def::unsmob ($$);
+ Context_def *td = unsmob<Context_def> ($$);
if (!td) {
$$ = Context_def::make_scm ();
- td = Context_def::unsmob ($$);
+ td = unsmob<Context_def> ($$);
}
- SCM new_mods = Context_mod::unsmob ($2)->get_mods ();
+ SCM new_mods = unsmob<Context_mod> ($2)->get_mods ();
for (SCM m = new_mods; scm_is_pair (m); m = scm_cdr (m)) {
td->add_context_mod (scm_car (m));
}
}
| context_def_spec_body context_mod_arg {
- Context_def *td = Context_def::unsmob ($1);
+ Context_def *td = unsmob<Context_def> ($1);
if (scm_is_eq ($2, SCM_UNSPECIFIED))
;
- else if (!td && Context_def::unsmob ($2))
+ else if (!td && unsmob<Context_def> ($2))
$$ = $2;
else {
if (!td) {
$$ = Context_def::make_scm ();
- td = Context_def::unsmob ($$);
+ td = unsmob<Context_def> ($$);
}
- if (Music::is_smob ($2)) {
+ if (unsmob<Music> ($2)) {
SCM proc = parser->lexer_->lookup_identifier ("context-mod-music-handler");
$2 = scm_call_2 (proc, parser->self_scm (), $2);
}
- if (Context_mod *cm = Context_mod::unsmob ($2)) {
+ if (Context_mod *cm = unsmob<Context_mod> ($2)) {
for (SCM m = cm->get_mods (); scm_is_pair (m); m = scm_cdr (m)) {
td->add_context_mod (scm_car (m));
}
book_block:
BOOK '{' book_body '}' {
$$ = $3;
- Book::unsmob ($$)->origin ()->set_spot (@$);
+ unsmob<Book> ($$)->origin ()->set_spot (@$);
pop_paper (parser);
parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), SCM_BOOL_F);
}
{
Book *book = new Book;
init_papers (parser);
- book->paper_ = dynamic_cast<Output_def*> (Output_def::unsmob (parser->lexer_->lookup_identifier ("$defaultpaper"))->clone ());
+ book->paper_ = dynamic_cast<Output_def*> (unsmob<Output_def> (parser->lexer_->lookup_identifier ("$defaultpaper"))->clone ());
book->paper_->unprotect ();
push_paper (parser, book->paper_);
book->header_ = get_header (parser);
parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $1);
}
| book_body paper_block {
- Book::unsmob ($1)->paper_ = Output_def::unsmob ($2);
- set_paper (parser, Output_def::unsmob ($2));
+ unsmob<Book> ($1)->paper_ = unsmob<Output_def> ($2);
+ set_paper (parser, unsmob<Output_def> ($2));
}
| book_body bookpart_block {
SCM proc = parser->lexer_->lookup_identifier ("book-bookpart-handler");
{
SCM proc = parser->lexer_->lookup_identifier ("book-text-handler");
scm_call_2 (proc, $1, out);
- } else if (Score::is_smob ($2))
+ } else if (unsmob<Score> ($2))
{
SCM proc = parser->lexer_->lookup_identifier ("book-score-handler");
scm_call_2 (proc, $1, $2);
- } else if (Output_def *od = Output_def::unsmob ($2)) {
+ } else if (Output_def *od = unsmob<Output_def> ($2)) {
SCM id = SCM_EOL;
if (to_boolean (od->c_variable ("is-paper")))
}
| book_body
{
- parser->lexer_->add_scope (Book::unsmob ($1)->header_);
+ parser->lexer_->add_scope (unsmob<Book> ($1)->header_);
} lilypond_header
| book_body error {
- Book *book = Book::unsmob ($1);
+ Book *book = unsmob<Book> ($1);
book->paper_ = 0;
book->scores_ = SCM_EOL;
book->bookparts_ = SCM_EOL;
bookpart_block:
BOOKPART '{' bookpart_body '}' {
$$ = $3;
- Book::unsmob ($$)->origin ()->set_spot (@$);
+ unsmob<Book> ($$)->origin ()->set_spot (@$);
parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), SCM_BOOL_F);
}
;
parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), $1);
}
| bookpart_body paper_block {
- Book::unsmob ($$)->paper_ = Output_def::unsmob ($2);
+ unsmob<Book> ($$)->paper_ = unsmob<Output_def> ($2);
}
| bookpart_body score_block {
SCM proc = parser->lexer_->lookup_identifier ("bookpart-score-handler");
{
SCM proc = parser->lexer_->lookup_identifier ("bookpart-text-handler");
scm_call_2 (proc, $1, out);
- } else if (Score::is_smob ($2))
+ } else if (unsmob<Score> ($2))
{
SCM proc = parser->lexer_->lookup_identifier ("bookpart-score-handler");
scm_call_2 (proc, $1, $2);
- } else if (Output_def *od = Output_def::unsmob ($2)) {
+ } else if (Output_def *od = unsmob<Output_def> ($2)) {
SCM id = SCM_EOL;
if (to_boolean (od->c_variable ("is-paper")))
}
| bookpart_body
{
- Book *book = Book::unsmob ($1);
+ Book *book = unsmob<Book> ($1);
if (!ly_is_module (book->header_))
book->header_ = ly_make_module (false);
parser->lexer_->add_scope (book->header_);
} lilypond_header
| bookpart_body error {
- Book *book = Book::unsmob ($1);
+ Book *book = unsmob<Book> ($1);
book->paper_ = 0;
book->scores_ = SCM_EOL;
}
score_block:
SCORE '{' score_body '}' {
- Score::unsmob ($3)->origin ()->set_spot (@$);
+ unsmob<Score> ($3)->origin ()->set_spot (@$);
$$ = $3;
}
;
score_body:
score_items {
- if (!Score::is_smob ($1)) {
+ if (!unsmob<Score> ($1)) {
parser->parser_error (@1, _("Missing music in \\score"));
$$ = (new Score)->unprotect ();
if (scm_is_pair ($1) && ly_is_module (scm_car ($1)))
{
- Score::unsmob ($$)->set_header (scm_car ($1));
+ unsmob<Score> ($$)->set_header (scm_car ($1));
$1 = scm_cdr ($1);
}
for (SCM p = scm_reverse_x ($1, SCM_EOL);
scm_is_pair (p); p = scm_cdr (p))
{
- Score::unsmob ($$)->
- add_output_def (Output_def::unsmob (scm_car (p)));
+ unsmob<Score> ($$)->
+ add_output_def (unsmob<Output_def> (scm_car (p)));
}
}
}
| score_body error {
- Score::unsmob ($$)->error_found_ = true;
+ unsmob<Score> ($$)->error_found_ = true;
}
;
}
| score_items score_item
{
- Output_def *od = Output_def::unsmob ($2);
+ Output_def *od = unsmob<Output_def> ($2);
if (od) {
if (to_boolean (od->lookup_variable (ly_symbol2scm ("is-paper"))))
{
od = 0;
$2 = SCM_UNSPECIFIED;
}
- } else if (!Score::is_smob ($$)) {
- if (Music::is_smob ($2)) {
+ } else if (!unsmob<Score> ($$)) {
+ if (unsmob<Music> ($2)) {
SCM scorify = ly_lily_module_constant ("scorify-music");
$2 = scm_call_2 (scorify, $2, parser->self_scm ());
}
- if (Score::is_smob ($2))
+ if (unsmob<Score> ($2))
{
$$ = $2;
$2 = SCM_UNSPECIFIED;
}
}
- Score *score = Score::unsmob ($$);
+ Score *score = unsmob<Score> ($$);
if (score && scm_is_pair ($1)) {
if (ly_is_module (scm_car ($1)))
{
for (SCM p = scm_reverse_x ($1, SCM_EOL);
scm_is_pair (p); p = scm_cdr (p))
{
- score->add_output_def (Output_def::unsmob (scm_car (p)));
+ score->add_output_def (unsmob<Output_def> (scm_car (p)));
}
}
if (od) {
}
| score_items
{
- if (Score *score = Score::unsmob ($1)) {
+ if (Score *score = unsmob<Score> ($1)) {
if (!ly_is_module (score->get_header ()))
score->set_header (ly_make_module (false));
parser->lexer_->add_scope (score->get_header ());
paper_block:
output_def {
- Output_def *od = Output_def::unsmob ($1);
+ Output_def *od = unsmob<Output_def> ($1);
if (!to_boolean (od->lookup_variable (ly_symbol2scm ("is-paper"))))
{
output_def_body:
output_def_head_with_mode_switch '{' {
- Output_def::unsmob ($1)->input_origin_.set_spot (@$);
+ unsmob<Output_def> ($1)->input_origin_.set_spot (@$);
// This is a stupid trick to mark the beginning of the
// body for deciding whether to allow
// embedded_scm_active to have an output definition
// definitions.
if (scm_is_pair ($1))
{
- Output_def *o = Output_def::unsmob ($2);
+ Output_def *o = unsmob<Output_def> ($2);
if (o) {
o->input_origin_.set_spot (@$);
$1 = o->self_scm ();
} else
$1 = scm_car ($1);
}
- if (Context_def::is_smob ($2))
- assign_context_def (Output_def::unsmob ($1), $2);
+ if (unsmob<Context_def> ($2))
+ assign_context_def (unsmob<Output_def> ($1), $2);
// Seems unlikely, but let's be complete:
- else if (Music::is_smob ($2))
+ else if (unsmob<Music> ($2))
{
SCM proc = parser->lexer_->lookup_identifier
("output-def-music-handler");
} music_or_context_def
{
parser->lexer_->pop_state ();
- if (Context_def::is_smob ($3))
- assign_context_def (Output_def::unsmob ($1), $3);
+ if (unsmob<Context_def> ($3))
+ assign_context_def (unsmob<Output_def> ($1), $3);
else {
SCM proc = parser->lexer_->lookup_identifier
$$ = SCM_EOL;
}
| music_list music_embedded {
- if (Music::is_smob ($2))
+ if (unsmob<Music> ($2))
$$ = scm_cons ($2, $1);
}
| music_list error {
pitch_or_music
{
$$ = make_music_from_simple (parser, @1, $1);
- if (!Music::is_smob ($$))
+ if (!unsmob<Music> ($$))
{
parser->parser_error (@1, _ ("music expected"));
$$ = MAKE_SYNTAX ("void-music", @$);
music_embedded:
music
{
- if (Music::unsmob ($1)->is_mus_type ("post-event")) {
+ if (unsmob<Music> ($1)->is_mus_type ("post-event")) {
parser->parser_error (@1, _ ("unexpected post-event"));
$$ = SCM_UNSPECIFIED;
}
{
Music *n = MY_MAKE_MUSIC ("NoteEvent", @$);
- parser->default_duration_ = *Duration::unsmob ($1);
+ parser->default_duration_ = *unsmob<Duration> ($1);
n->set_property ("duration", $1);
if (scm_is_pair ($2))
{
if (scm_is_eq ($1, SCM_UNSPECIFIED))
$$ = $1;
- else if (Music *m = Music::unsmob ($1)) {
+ else if (Music *m = unsmob<Music> ($1)) {
if (m->is_mus_type ("post-event")) {
parser->parser_error
(@1, _ ("unexpected post-event"));
}
| WITH context_modification_arg
{
- if (Music::is_smob ($2)) {
+ if (unsmob<Music> ($2)) {
SCM proc = parser->lexer_->lookup_identifier ("context-mod-music-handler");
$2 = scm_call_2 (proc, parser->self_scm (), $2);
}
- if (Context_mod::is_smob ($2))
+ if (unsmob<Context_mod> ($2))
$$ = $2;
else {
parser->parser_error (@2, _ ("not a context mod"));
}
| context_mod_list context_mod {
if (!SCM_UNBNDP ($2))
- Context_mod::unsmob ($1)->add_context_mod ($2);
+ unsmob<Context_mod> ($1)->add_context_mod ($2);
}
| context_mod_list CONTEXT_MOD_IDENTIFIER {
- Context_mod *md = Context_mod::unsmob ($2);
+ Context_mod *md = unsmob<Context_mod> ($2);
if (md)
- Context_mod::unsmob ($1)->add_context_mods (md->get_mods ());
+ unsmob<Context_mod> ($1)->add_context_mods (md->get_mods ());
}
| context_mod_list context_mod_arg {
if (scm_is_eq ($2, SCM_UNSPECIFIED))
;
- else if (Music::is_smob ($2)) {
+ else if (unsmob<Music> ($2)) {
SCM proc = parser->lexer_->lookup_identifier ("context-mod-music-handler");
$2 = scm_call_2 (proc, parser->self_scm (), $2);
}
- if (Context_mod::is_smob ($2))
- Context_mod::unsmob ($$)->add_context_mods
- (Context_mod::unsmob ($2)->get_mods ());
+ if (unsmob<Context_mod> ($2))
+ unsmob<Context_mod> ($$)->add_context_mods
+ (unsmob<Context_mod> ($2)->get_mods ());
else {
parser->parser_error (@2, _ ("not a context mod"));
}
context_prefix:
CONTEXT symbol optional_id optional_context_mod {
- Context_mod *ctxmod = Context_mod::unsmob ($4);
+ Context_mod *ctxmod = unsmob<Context_mod> ($4);
SCM mods = SCM_EOL;
if (ctxmod)
mods = ctxmod->get_mods ();
$$ = START_MAKE_SYNTAX ("context-specification", $2, $3, mods, SCM_BOOL_F);
}
| NEWCONTEXT symbol optional_id optional_context_mod {
- Context_mod *ctxmod = Context_mod::unsmob ($4);
+ Context_mod *ctxmod = unsmob<Context_mod> ($4);
SCM mods = SCM_EOL;
if (ctxmod)
mods = ctxmod->get_mods ();
parser->lexer_->pop_state ();
}
| mode_changing_head_with_context optional_context_mod grouped_music_list {
- Context_mod *ctxmod = Context_mod::unsmob ($2);
+ Context_mod *ctxmod = unsmob<Context_mod> ($2);
SCM mods = SCM_EOL;
if (ctxmod)
mods = ctxmod->get_mods ();
simple_element post_events {
// Let the rhythmic music iterator sort this mess out.
if (scm_is_pair ($2)) {
- Music::unsmob ($$)->set_property ("articulations",
+ unsmob<Music> ($$)->set_property ("articulations",
scm_reverse_x ($2, SCM_EOL));
}
} %prec ':'
note_chord_element:
chord_body optional_notemode_duration post_events
{
- Music *m = Music::unsmob ($1);
- SCM dur = Duration::unsmob ($2)->smobbed_copy ();
+ Music *m = unsmob<Music> ($1);
+ SCM dur = unsmob<Duration> ($2)->smobbed_copy ();
SCM es = m->get_property ("elements");
SCM postevs = scm_reverse_x ($3, SCM_EOL);
for (SCM s = es; scm_is_pair (s); s = scm_cdr (s))
- Music::unsmob (scm_car (s))->set_property ("duration", dur);
+ unsmob<Music> (scm_car (s))->set_property ("duration", dur);
es = ly_append2 (es, postevs);
m-> set_property ("elements", es);
}
| music_function_chord_body
{
- Music *m = Music::unsmob ($1);
+ Music *m = unsmob<Music> ($1);
while (m && m->is_mus_type ("music-wrapper-music")) {
$$ = m->get_property ("element");
- m = Music::unsmob ($$);
+ m = unsmob<Music> ($$);
}
if (!(m && m->is_mus_type ("rhythmic-event"))) {
}
| post_events post_event {
$$ = $1;
- if (Music *m = Music::unsmob ($2))
+ if (Music *m = unsmob<Music> ($2))
{
if (m->is_mus_type ("post-event-wrapper"))
{
}
| script_dir music_function_call {
$$ = $2;
- if (!Music::unsmob ($2)->is_mus_type ("post-event")) {
+ if (!unsmob<Music> ($2)->is_mus_type ("post-event")) {
parser->parser_error (@2, _ ("post-event expected"));
$$ = SCM_UNSPECIFIED;
} else if (!SCM_UNBNDP ($1))
{
- Music::unsmob ($$)->set_property ("direction", $1);
+ unsmob<Music> ($$)->set_property ("direction", $1);
}
}
| HYPHEN {
| script_dir direction_reqd_event {
if (!SCM_UNBNDP ($1))
{
- Music *m = Music::unsmob ($2);
+ Music *m = unsmob<Music> ($2);
m->set_property ("direction", $1);
}
$$ = $2;
| script_dir direction_less_event {
if (!SCM_UNBNDP ($1))
{
- Music *m = Music::unsmob ($2);
+ Music *m = unsmob<Music> ($2);
m->set_property ("direction", $1);
}
$$ = $2;
| '^' fingering
{
$$ = $2;
- Music::unsmob ($$)->set_property ("direction", scm_from_int (UP));
+ unsmob<Music> ($$)->set_property ("direction", scm_from_int (UP));
}
| '_' fingering
{
$$ = $2;
- Music::unsmob ($$)->set_property ("direction", scm_from_int (DOWN));
+ unsmob<Music> ($$)->set_property ("direction", scm_from_int (DOWN));
}
;
a->set_property ("articulation-type", s);
$$ = a->unprotect ();
} else {
- Music *original = Music::unsmob (s);
+ Music *original = unsmob<Music> (s);
if (original && original->is_mus_type ("post-event")) {
Music *a = original->clone ();
a->set_spot (parser->lexer_->override_input (@$));
NOTENAME_PITCH quotes {
if (!scm_is_eq (SCM_INUM0, $2))
{
- Pitch p = *Pitch::unsmob ($1);
+ Pitch p = *unsmob<Pitch> ($1);
p = p.transposed (Pitch (scm_to_int ($2), 0));
$$ = p.smobbed_copy ();
}
TONICNAME_PITCH quotes {
if (!scm_is_eq (SCM_INUM0, $2))
{
- Pitch p = *Pitch::unsmob ($1);
+ Pitch p = *unsmob<Pitch> ($1);
p = p.transposed (Pitch (scm_to_int ($2), 0));
$$ = p.smobbed_copy ();
}
| PITCH_IDENTIFIER quotes {
if (!scm_is_eq (SCM_INUM0, $2))
{
- Pitch p = *Pitch::unsmob ($1);
+ Pitch p = *unsmob<Pitch> ($1);
p = p.transposed (Pitch (scm_to_int ($2), 0));
$$ = p.smobbed_copy ();
}
}
| embedded_scm
{
- Music *m = Music::unsmob ($1);
+ Music *m = unsmob<Music> ($1);
if (m && m->is_mus_type ("post-event"))
$$ = $1;
else if (Text_interface::is_markup ($1)) {
} %prec ':'
| multiplied_duration {
$$ = $1;
- parser->default_duration_ = *Duration::unsmob ($$);
+ parser->default_duration_ = *unsmob<Duration> ($$);
}
;
}
}
| DURATION_IDENTIFIER dots {
- Duration *d = Duration::unsmob ($1);
+ Duration *d = unsmob<Duration> ($1);
Duration k (d->duration_log (),
d->dot_count () + scm_to_int ($2));
k = k.compressed (d->factor ());
$$ = $1;
}
| multiplied_duration '*' UNSIGNED {
- $$ = Duration::unsmob ($$)->compressed (scm_to_int ($3)).smobbed_copy ();
+ $$ = unsmob<Duration> ($$)->compressed (scm_to_int ($3)).smobbed_copy ();
}
| multiplied_duration '*' FRACTION {
Rational m (scm_to_int (scm_car ($3)), scm_to_int (scm_cdr ($3)));
- $$ = Duration::unsmob ($$)->compressed (m).smobbed_copy ();
+ $$ = unsmob<Duration> ($$)->compressed (m).smobbed_copy ();
}
;
}
| bass_figure ']' {
$$ = $1;
- Music::unsmob ($1)->set_property ("bracket-stop", SCM_BOOL_T);
+ unsmob<Music> ($1)->set_property ("bracket-stop", SCM_BOOL_T);
}
| bass_figure figured_bass_alteration {
- Music *m = Music::unsmob ($1);
+ Music *m = unsmob<Music> ($1);
if (scm_to_double ($2)) {
SCM salter = m->get_property ("alteration");
SCM alter = scm_is_number (salter) ? salter : scm_from_int (0);
}
}
| bass_figure figured_bass_modification {
- Music *m = Music::unsmob ($1);
+ Music *m = unsmob<Music> ($1);
m->set_property ($2, SCM_BOOL_T);
}
;
}
| '[' bass_figure {
$$ = $2;
- Music::unsmob ($$)->set_property ("bracket-start", SCM_BOOL_T);
+ unsmob<Music> ($$)->set_property ("bracket-start", SCM_BOOL_T);
}
;
if (!parser->lexer_->is_chord_state ())
parser->parser_error (@1, _ ("have to be in Chord mode for chords"));
if (scm_is_pair ($2)) {
- if (Pitch::is_smob ($1))
+ if (unsmob<Pitch> ($1))
$1 = make_chord_elements (@1,
$1,
parser->default_duration_.smobbed_copy (),
SCM elts = ly_append2 ($1, scm_reverse_x ($2, SCM_EOL));
$$ = MAKE_SYNTAX ("event-chord", @1, elts);
- } else if (!Pitch::is_smob ($1))
+ } else if (!unsmob<Pitch> ($1))
$$ = MAKE_SYNTAX ("event-chord", @1, $1);
// A mere pitch drops through.
} %prec ':'
lyric_element optional_notemode_duration post_events {
$$ = MAKE_SYNTAX ("lyric-event", @$, $1, $2);
if (scm_is_pair ($3))
- Music::unsmob ($$)->set_property
+ unsmob<Music> ($$)->set_property
("articulations", scm_reverse_x ($3, SCM_EOL));
} %prec ':'
;
SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
parser->lexer_->push_note_state (nn);
} '{' score_body '}' {
- Score *sc = Score::unsmob ($4);
+ Score *sc = unsmob<Score> ($4);
sc->origin ()->set_spot (@$);
if (sc->defs_.empty ()) {
Output_def *od = get_layout (parser);
SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
parser->lexer_->push_note_state (nn);
} '{' score_body '}' {
- Score *sc = Score::unsmob ($4);
+ Score *sc = unsmob<Score> ($4);
sc->origin ()->set_spot (@$);
if (sc->defs_.empty ()) {
Output_def *od = get_layout (parser);
int
Lily_lexer::try_special_identifiers (SCM *destination, SCM sid)
{
- if (Book::is_smob (sid)) {
- Book *book = Book::unsmob (sid)->clone ();
+ if (unsmob<Book> (sid)) {
+ Book *book = unsmob<Book> (sid)->clone ();
*destination = book->self_scm ();
book->unprotect ();
} else if (scm_is_number (sid)) {
*destination = sid;
return NUMBER_IDENTIFIER;
- } else if (Context_def::is_smob (sid))
+ } else if (unsmob<Context_def> (sid))
{
- *destination = Context_def::unsmob (sid)->clone ()->unprotect ();
+ *destination = unsmob<Context_def> (sid)->clone ()->unprotect ();
return SCM_IDENTIFIER;
- } else if (Context_mod::is_smob (sid)) {
- *destination = Context_mod::unsmob (sid)->smobbed_copy ();
+ } else if (unsmob<Context_mod> (sid)) {
+ *destination = unsmob<Context_mod> (sid)->smobbed_copy ();
return CONTEXT_MOD_IDENTIFIER;
- } else if (Music *mus = Music::unsmob (sid)) {
+ } else if (Music *mus = unsmob<Music> (sid)) {
mus = mus->clone ();
*destination = mus->self_scm ();
bool is_event = mus->is_mus_type ("post-event");
mus->unprotect ();
return is_event ? EVENT_IDENTIFIER : MUSIC_IDENTIFIER;
- } else if (Pitch::is_smob (sid)) {
- *destination = Pitch::unsmob (sid)->smobbed_copy ();
+ } else if (unsmob<Pitch> (sid)) {
+ *destination = unsmob<Pitch> (sid)->smobbed_copy ();
return PITCH_IDENTIFIER;
- } else if (Duration::is_smob (sid)) {
- *destination = Duration::unsmob (sid)->smobbed_copy ();
+ } else if (unsmob<Duration> (sid)) {
+ *destination = unsmob<Duration> (sid)->smobbed_copy ();
return DURATION_IDENTIFIER;
- } else if (Output_def::is_smob (sid)) {
- *destination = Output_def::unsmob (sid)->clone ()->unprotect ();
+ } else if (unsmob<Output_def> (sid)) {
+ *destination = unsmob<Output_def> (sid)->clone ()->unprotect ();
return SCM_IDENTIFIER;
- } else if (Score::is_smob (sid)) {
- *destination = Score::unsmob (sid)->clone ()->unprotect ();
+ } else if (unsmob<Score> (sid)) {
+ *destination = unsmob<Score> (sid)->clone ()->unprotect ();
return SCM_IDENTIFIER;
}
SCM loc_on_music (Input loc, SCM arg)
{
- if (Music *m = Music::unsmob (arg))
+ if (Music *m = unsmob<Music> (arg))
{
m = m->clone ();
m->set_spot (loc);
SCM
make_music_from_simple (Lily_parser *parser, Input loc, SCM simple)
{
- if (Music::is_smob (simple))
+ if (unsmob<Music> (simple))
return simple;
if (parser->lexer_->is_note_state ()) {
if (scm_is_symbol (simple)) {
n->set_property ("drum-type", simple);
return n->unprotect ();
}
- if (Pitch::is_smob (simple)) {
+ if (unsmob<Pitch> (simple)) {
Music *n = MY_MAKE_MUSIC ("NoteEvent", loc);
n->set_property ("duration", parser->default_duration_.smobbed_copy ());
n->set_property ("pitch", simple);
return MAKE_SYNTAX ("lyric-event", loc, simple,
parser->default_duration_.smobbed_copy ());
} else if (parser->lexer_->is_chord_state ()) {
- if (Pitch::is_smob (simple))
+ if (unsmob<Pitch> (simple))
return MAKE_SYNTAX
("event-chord",
loc,
SCM res = scm_call_3 (chord_ctor, pitch, dur, modification_list);
for (SCM s = res; scm_is_pair (s); s = scm_cdr (s))
{
- Music::unsmob (scm_car (s))->set_spot (loc);
+ unsmob<Music> (scm_car (s))->set_spot (loc);
}
return res;
}
#include "music-sequence.hh"
#include "warn.hh"
-enum Outlet_type
-{
- CONTEXT_ONE, CONTEXT_TWO,
- CONTEXT_SHARED, CONTEXT_SOLO,
- CONTEXT_NULL, NUM_OUTLETS
-};
-
-static const char *outlet_names_[NUM_OUTLETS]
- = {"one", "two", "shared", "solo", "null"};
+static const char *const CONTEXT_ONE = "one";
+static const char *const CONTEXT_TWO = "two";
+static const char *const CONTEXT_SHARED = "shared";
+static const char *const CONTEXT_SOLO = "solo";
+static const char *const CONTEXT_NULL = "null";
class Part_combine_iterator : public Music_iterator
{
virtual bool ok () const;
private:
- /* used by try_process */
- void set_busy (SCM);
- bool busy_;
- bool notice_busy_;
-
- bool try_process (Music_iterator *i, Moment m);
-
- Music_iterator *first_iter_;
- Music_iterator *second_iter_;
+ static const size_t NUM_PARTS = 2;
+ Music_iterator *iterators_[NUM_PARTS];
Moment start_moment_;
SCM split_list_;
enum Status
{
+ INITIAL,
APART,
TOGETHER,
SOLO,
// e.g. 1 for Solo I, 2 for Solo II.
int chosen_part_;
- int last_playing_;
-
- /*
- TODO: this is getting off hand...
- */
- Context_handle handles_[NUM_OUTLETS];
-
- void substitute_both (Outlet_type to1,
- Outlet_type to2);
- void kill_mmrest_in_inactive_outlets ();
- /* parameter is really Outlet_type */
- void kill_mmrest (int in);
+ void substitute_one (Music_iterator *iter, const char *voice_id);
+ void substitute_both (const char *part1_voice_id, const char *part2_voice_id);
+ bool is_active_outlet (const Context *c) const;
+ void kill_mmrest (Context *c);
void chords_together ();
void solo1 ();
void solo2 ();
void unisono (bool silent, int newpart);
};
+const size_t Part_combine_iterator::NUM_PARTS;
+
void
Part_combine_iterator::do_quit ()
{
- if (first_iter_)
- first_iter_->quit ();
- if (second_iter_)
- second_iter_->quit ();
-
- // Add listeners to all contexts except Devnull.
- for (int i = 0; i < NUM_OUTLETS; i++)
- {
- Context *c = handles_[i].get_context ();
- if (c->is_alias (ly_symbol2scm ("Voice")))
- c->event_source ()->remove_listener (GET_LISTENER (Part_combine_iterator, set_busy), ly_symbol2scm ("music-event"));
- handles_[i].set_context (0);
- }
+ for (size_t i = 0; i < NUM_PARTS; i++)
+ if (iterators_[i])
+ iterators_[i]->quit ();
}
Part_combine_iterator::Part_combine_iterator ()
{
mmrest_event_ = 0;
- first_iter_ = 0;
- second_iter_ = 0;
+ for (size_t i = 0; i < NUM_PARTS; i++)
+ iterators_[i] = 0;
split_list_ = SCM_EOL;
- state_ = APART;
+ state_ = INITIAL;
chosen_part_ = 1;
- last_playing_ = 0;
-
- busy_ = false;
- notice_busy_ = false;
}
void
Part_combine_iterator::derived_mark () const
{
- if (first_iter_)
- scm_gc_mark (first_iter_->self_scm ());
- if (second_iter_)
- scm_gc_mark (second_iter_->self_scm ());
+ for (size_t i = 0; i < NUM_PARTS; i++)
+ if (iterators_[i])
+ scm_gc_mark (iterators_[i]->self_scm ());
+
if (mmrest_event_)
scm_gc_mark (mmrest_event_->self_scm ());
}
Part_combine_iterator::derived_substitute (Context *f,
Context *t)
{
- if (first_iter_)
- first_iter_->substitute_outlet (f, t);
+ // (Explain why just iterators_[0].)
+ if (iterators_[0])
+ iterators_[0]->substitute_outlet (f, t);
}
Moment
{
Moment p;
p.set_infinite (1);
- if (first_iter_->ok ())
- p = min (p, first_iter_->pending_moment ());
- if (second_iter_->ok ())
- p = min (p, second_iter_->pending_moment ());
+ for (size_t i = 0; i < NUM_PARTS; i++)
+ if (iterators_[i]->ok ())
+ p = min (p, iterators_[i]->pending_moment ());
+
return p;
}
bool
Part_combine_iterator::ok () const
{
- return first_iter_->ok () || second_iter_->ok ();
+ for (size_t i = 0; i < NUM_PARTS; i++)
+ if (iterators_[i]->ok ())
+ return true;
+
+ return false;
}
void
-Part_combine_iterator::substitute_both (Outlet_type to1,
- Outlet_type to2)
+Part_combine_iterator::substitute_one (Music_iterator *iter,
+ const char *voice_id)
{
- first_iter_->substitute_outlet (first_iter_->get_outlet (),
- handles_[to1].get_context ());
- second_iter_->substitute_outlet (second_iter_->get_outlet (),
- handles_[to2].get_context ());
+ Context *c = iter->get_outlet ();
+ if (!c)
+ {
+ programming_error ("no context");
+ return;
+ }
+ c = c->get_parent_context ();
+ if (!c)
+ {
+ programming_error ("no parent context");
+ return;
+ }
+ c = find_context_below (c, ly_symbol2scm("Voice"), voice_id);
+ if (!c)
+ {
+ string s = "can not find Voice context: ";
+ s += voice_id;
+ programming_error (s);
+ return;
+ }
+ iter->substitute_outlet (iter->get_outlet (), c);
}
-void Part_combine_iterator::kill_mmrest_in_inactive_outlets ()
+void
+Part_combine_iterator::substitute_both (const char *part1_voice_id,
+ const char *part2_voice_id)
{
- for (int j = 0; j < NUM_OUTLETS; j++)
- {
- Context *c = handles_[j].get_context ();
-
- if (first_iter_->get_outlet () == c)
- continue;
+ // TODO: There is no good reason to tie the parts together here.
+ // Factor out per-part stuff into a new class of iterator which
+ // reads a part-specific list similar to the existing combined
+ // "split-list".
+ substitute_one(iterators_[0], part1_voice_id);
+ substitute_one(iterators_[1], part2_voice_id);
+}
- if (second_iter_->get_outlet () == c)
- continue;
+bool Part_combine_iterator::is_active_outlet (const Context *c) const
+{
+ for (size_t i = 0; i < NUM_PARTS; i++)
+ if (iterators_[i] && (iterators_[i]->get_outlet () == c))
+ return true;
- kill_mmrest (j);
- }
+ return false;
}
void
-Part_combine_iterator::kill_mmrest (int in)
+Part_combine_iterator::kill_mmrest (Context *c)
{
if (!mmrest_event_)
mmrest_event_->unprotect ();
}
- handles_[in].get_context ()->event_source ()->broadcast (mmrest_event_);
+ c->event_source ()->broadcast (mmrest_event_);
}
void
return;
else
{
- Outlet_type c1 = (newpart == 2) ? CONTEXT_NULL : CONTEXT_SHARED;
- Outlet_type c2 = (newpart == 2) ? CONTEXT_SHARED : CONTEXT_NULL;
+ const char *c1 = (newpart == 2) ? CONTEXT_NULL : CONTEXT_SHARED;
+ const char *c2 = (newpart == 2) ? CONTEXT_SHARED : CONTEXT_NULL;
substitute_both (c1, c2);
state_ = newstate;
start_moment_ = get_outlet ()->now_mom ();
split_list_ = get_music ()->get_property ("split-list");
- Context *c = get_outlet ();
-
- for (int i = 0; i < NUM_OUTLETS; i++)
- {
- SCM type = (i == CONTEXT_NULL) ? ly_symbol2scm ("Devnull") : ly_symbol2scm ("Voice");
- /* find context below c: otherwise we may create new staff for each voice */
- c = c->find_create_context (type, outlet_names_[i], SCM_EOL);
- handles_[i].set_context (c);
- if (c->is_alias (ly_symbol2scm ("Voice")))
- c->event_source ()->add_listener (GET_LISTENER (Part_combine_iterator, set_busy), ly_symbol2scm ("music-event"));
- }
-
SCM lst = get_music ()->get_property ("elements");
- Context *one = handles_[CONTEXT_ONE].get_context ();
- set_context (one);
- first_iter_ = Music_iterator::unsmob (get_iterator (Music::unsmob (scm_car (lst))));
- Context *two = handles_[CONTEXT_TWO].get_context ();
- set_context (two);
- second_iter_ = Music_iterator::unsmob (get_iterator (Music::unsmob (scm_cadr (lst))));
- Context *shared = handles_[CONTEXT_SHARED].get_context ();
- set_context (shared);
-}
-
-void
-Part_combine_iterator::set_busy (SCM se)
-{
- if (!notice_busy_)
- return;
-
- Stream_event *e = Stream_event::unsmob (se);
-
- if (e->in_event_class ("note-event") || e->in_event_class ("cluster-note-event"))
- busy_ = true;
-}
-
-/*
- Processes a moment in an iterator, and returns whether any new music
- was reported.
-*/
-bool
-Part_combine_iterator::try_process (Music_iterator *i, Moment m)
-{
- busy_ = false;
- notice_busy_ = true;
-
- i->process (m);
-
- notice_busy_ = false;
- return busy_;
+ iterators_[0] = unsmob<Music_iterator> (get_iterator (unsmob<Music> (scm_car (lst))));
+ iterators_[1] = unsmob<Music_iterator> (get_iterator (unsmob<Music> (scm_cadr (lst))));
}
void
if (start_moment_.main_part_.is_infinity () && start_moment_ < 0)
start_moment_ = now;
+ Context *prev_active_outlets[NUM_PARTS];
+ for (size_t i = 0; i < NUM_PARTS; i++)
+ prev_active_outlets[i] = iterators_[i]->get_outlet ();
+
for (; scm_is_pair (split_list_); split_list_ = scm_cdr (split_list_))
{
- splitm = Moment::unsmob (scm_caar (split_list_));
+ splitm = unsmob<Moment> (scm_caar (split_list_));
if (splitm && *splitm + start_moment_ > now)
break;
SCM tag = scm_cdar (split_list_);
- Context *outletsBefore[] = { first_iter_->get_outlet (),
- second_iter_->get_outlet () };
-
if (scm_is_eq (tag, ly_symbol2scm ("chords")))
chords_together ();
else if (scm_is_eq (tag, ly_symbol2scm ("apart"))
{
// 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);
+ unisono (false, (chosen_part_ == 2) ? 2 : 1);
}
else if (scm_is_eq (tag, ly_symbol2scm ("unisilence")))
{
// as for unisono
- unisono (true, (last_playing_ == 2) ? 2 : 1);
+ unisono (true, (chosen_part_ == 2) ? 2 : 1);
}
else if (scm_is_eq (tag, ly_symbol2scm ("silence1")))
unisono (true, 1);
+ (scm_is_symbol (tag) ? ly_symbol2string (tag) : string ("not a symbol"));
programming_error (s);
}
-
- if ((first_iter_->get_outlet () != outletsBefore[0])
- || (second_iter_->get_outlet () != outletsBefore[1]))
- kill_mmrest_in_inactive_outlets ();
}
- if (first_iter_->ok ())
+ bool any_outlet_changed = false;
+ for (size_t i = 0; i < NUM_PARTS; i++)
{
- if (try_process (first_iter_, m))
- last_playing_ = 1;
+ if (iterators_[i]->ok ())
+ iterators_[i]->process (m);
+
+ if (prev_active_outlets[i] != iterators_[i]->get_outlet ())
+ any_outlet_changed = true;
}
- if (second_iter_->ok ())
+ if (any_outlet_changed)
{
- if (try_process (second_iter_, m))
- last_playing_ = 2;
+ // Kill multi-measure rests in outlets that were previously active and
+ // are no longer active.
+ for (size_t i = 0; i < NUM_PARTS; i++)
+ {
+ Context *c = prev_active_outlets[i];
+ if (c && !is_active_outlet (c))
+ kill_mmrest (c);
+ }
}
}
Partial_iterator::process (Moment m)
{
if (Duration * dur
- = Duration::unsmob (get_music ()->get_property ("duration")))
+ = unsmob<Duration> (get_music ()->get_property ("duration")))
{
Moment length = Moment (dur->get_length ());
// work since the Timing_translator does not set
// measurePosition when initializing.
- Context *timing = Context::unsmob
+ Context *timing = unsmob<Context>
(scm_call_2 (ly_lily_module_constant ("ly:context-find"),
get_outlet ()->self_scm (),
ly_symbol2scm ("Timing")));
{
LY_ASSERT_SMOB (Context, ctx, 1);
LY_ASSERT_SMOB (Moment, length, 2);
- Context *timing = Context::unsmob
+ Context *timing = unsmob<Context>
(scm_call_2 (ly_lily_module_constant ("ly:context-find"),
ctx,
ly_symbol2scm ("Timing")));
Rational (0));
mp.main_part_ = measure_length (timing);
timing->set_property ("measurePosition",
- (mp - *Moment::unsmob (length)).smobbed_copy ());
+ (mp - *unsmob<Moment> (length)).smobbed_copy ());
timing->unset_property (ly_symbol2scm ("partialBusy"));
return SCM_UNSPECIFIED;
if (now_mom ().main_part_ != command_moment_.main_part_)
{
first_command_column_
- = Grob::unsmob (get_property ("currentCommandColumn"));
+ = unsmob<Grob> (get_property ("currentCommandColumn"));
command_moment_ = now_mom ();
}
SCM
Percent_repeat_item_interface::double_percent (SCM grob)
{
- Grob *me = Grob::unsmob (grob);
+ Grob *me = unsmob<Grob> (grob);
Stencil m = x_percent (me, 2);
m.translate_axis (-m.extent (X_AXIS).center (), X_AXIS);
return m.smobbed_copy ();
SCM
Percent_repeat_item_interface::beat_slash (SCM grob)
{
- Grob *me = Grob::unsmob (grob);
- Stream_event *cause = Stream_event::unsmob (me->get_property ("cause"));
+ Grob *me = unsmob<Grob> (grob);
+ Stream_event *cause = unsmob<Stream_event> (me->get_property ("cause"));
int count = robust_scm2int (cause->get_property ("slash-count"), 1);
Stencil m;
LY_ASSERT_SMOB (Performance, performance, 1);
LY_ASSERT_TYPE (scm_is_string, filename, 2);
- Performance::unsmob (performance)->write_output (ly_scm2string (filename));
+ unsmob<Performance> (performance)->write_output (ly_scm2string (filename));
return SCM_UNSPECIFIED;
}
for (SCM p = get_simple_trans_list (); scm_is_pair (p); p = scm_cdr (p))
{
- Translator *t = Translator::unsmob (scm_car (p));
+ Translator *t = unsmob<Translator> (scm_car (p));
Performer *eng = dynamic_cast<Performer *> (t);
if (eng && eng != info.origin_trans_)
eng->acknowledge_audio_element (info);
{
for (SCM p = list; scm_is_pair (p); p = scm_cdr (p))
{
- Performer *e = Performer::unsmob (scm_car (p));
+ Performer *e = unsmob<Performer> (scm_car (p));
if (e)
(e->*method) ();
}
for (SCM s = context ()->children_contexts ();
scm_is_pair (s); s = scm_cdr (s))
{
- Context *c = Context::unsmob (scm_car (s));
+ Context *c = unsmob<Context> (scm_car (s));
Performer_group *group
= dynamic_cast<Performer_group *> (c->implementation ());
if (group)
if (pedal_info_[i].line_spanner_)
{
SCM cc = get_property ("currentCommandColumn");
- Item *c = Item::unsmob (cc);
+ Item *c = unsmob<Item> (cc);
pedal_info_[i].line_spanner_->set_bound (RIGHT, c);
pedal_info_[i].clear ();
SCM
Piano_pedal_bracket::print (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
Spanner *orig = dynamic_cast<Spanner *> (me->original ());
Drul_array<bool> broken (false, false);
Grob *common = me->get_bound (LEFT)
->common_refpoint (me->get_bound (RIGHT), X_AXIS);
- Grob *textbit = Grob::unsmob (me->get_object ("pedal-text"));
+ Grob *textbit = unsmob<Grob> (me->get_object ("pedal-text"));
if (textbit)
common = common->common_refpoint (textbit, X_AXIS);
{
assert (!p->finished_bracket_);
- Grob *cmc = Grob::unsmob (get_property ("currentMusicalColumn"));
+ Grob *cmc = unsmob<Grob> (get_property ("currentMusicalColumn"));
p->bracket_->set_bound (RIGHT, cmc);
/*
if (p->bracket_)
{
SCM cc = get_property ("currentCommandColumn");
- Item *c = Item::unsmob (cc);
+ Item *c = unsmob<Item> (cc);
p->bracket_->set_bound (RIGHT, c);
p->finished_bracket_ = p->bracket_;
typeset_all (p);
if (p->bracket_ && !p->bracket_->get_bound (LEFT))
{
- Grob *cmc = Grob::unsmob (get_property ("currentMusicalColumn"));
+ Grob *cmc = unsmob<Grob> (get_property ("currentMusicalColumn"));
p->bracket_->set_bound (LEFT, cmc);
}
}
{
Grob *r = p->finished_bracket_->get_bound (RIGHT);
if (!r)
- p->finished_bracket_->set_bound (RIGHT, Grob::unsmob (get_property ("currentMusicalColumn")));
+ p->finished_bracket_->set_bound (RIGHT, unsmob<Grob> (get_property ("currentMusicalColumn")));
p->finished_bracket_ = 0;
}
LY_ASSERT_SMOB (Pitch, p, 1);
LY_ASSERT_SMOB (Pitch, delta, 2);
- Pitch *t = Pitch::unsmob (p);
- Pitch *d = Pitch::unsmob (delta);
+ Pitch *t = unsmob<Pitch> (p);
+ Pitch *d = unsmob<Pitch> (delta);
return t->transposed (*d).smobbed_copy ();
}
"Negate @var{p}.")
{
LY_ASSERT_SMOB (Pitch, p, 1);
- Pitch *pp = Pitch::unsmob (p);
+ Pitch *pp = unsmob<Pitch> (p);
return pp->negated ().smobbed_copy ();
}
" pitch@tie{}@var{p}.")
{
LY_ASSERT_SMOB (Pitch, p, 1);
- Pitch *pp = Pitch::unsmob (p);
+ Pitch *pp = unsmob<Pitch> (p);
return scm_from_int (pp->steps ());
}
"Extract the octave from pitch@tie{}@var{pp}.")
{
LY_ASSERT_SMOB (Pitch, pp, 1);
- Pitch *p = Pitch::unsmob (pp);
+ Pitch *p = unsmob<Pitch> (pp);
int q = p->get_octave ();
return scm_from_int (q);
}
"Extract the alteration from pitch@tie{}@var{pp}.")
{
LY_ASSERT_SMOB (Pitch, pp, 1);
- Pitch *p = Pitch::unsmob (pp);
+ Pitch *p = unsmob<Pitch> (pp);
Rational q = p->get_alteration ();
return ly_rational2scm (q);
"Extract the note name from pitch @var{pp}.")
{
LY_ASSERT_SMOB (Pitch, pp, 1);
- Pitch *p = Pitch::unsmob (pp);
+ Pitch *p = unsmob<Pitch> (pp);
int q = p->get_notename ();
return scm_from_int (q);
}
" middle@tie{}C as a rational number.")
{
LY_ASSERT_SMOB (Pitch, pp, 1);
- return ly_rational2scm (Pitch::unsmob (pp)->tone_pitch ());
+ return ly_rational2scm (unsmob<Pitch> (pp)->tone_pitch ());
}
LY_DEFINE (ly_pitch_quartertones, "ly:pitch-quartertones",
" middle@tie{}C.")
{
LY_ASSERT_SMOB (Pitch, pp, 1);
- Pitch *p = Pitch::unsmob (pp);
+ Pitch *p = unsmob<Pitch> (pp);
int q = p->rounded_quartertone_pitch ();
return scm_from_int (q);
}
" middle@tie{}C.")
{
LY_ASSERT_SMOB (Pitch, pp, 1);
- Pitch *p = Pitch::unsmob (pp);
+ Pitch *p = unsmob<Pitch> (pp);
int q = p->rounded_semitone_pitch ();
return scm_from_int (q);
}
LY_ASSERT_SMOB (Pitch, p1, 1);
LY_ASSERT_SMOB (Pitch, p2, 2);
- Pitch *a = Pitch::unsmob (p1);
- Pitch *b = Pitch::unsmob (p2);
+ Pitch *a = unsmob<Pitch> (p1);
+ Pitch *b = unsmob<Pitch> (p2);
if (Pitch::compare (*a, *b) < 0)
return SCM_BOOL_T;
LY_ASSERT_SMOB (Pitch, pitch, 1);
LY_ASSERT_SMOB (Pitch, root, 2);
- Pitch *p = Pitch::unsmob (pitch);
- Pitch *r = Pitch::unsmob (root);
+ Pitch *p = unsmob<Pitch> (pitch);
+ Pitch *r = unsmob<Pitch> (root);
return pitch_interval (*r, *p).smobbed_copy ();
}
{
LY_ASSERT_SMOB (Context, context, 1);
- Context *c = Context::unsmob (context);
+ Context *c = unsmob<Context> (context);
int clef_pos = robust_scm2int (c->get_property ("middleCClefPosition"), 0);
int offset = robust_scm2int (c->get_property ("middleCOffset"), 0);
/* middleCCuePosition overrides the clef! */
SCM
Pitch::less_p (SCM p1, SCM p2)
{
- Pitch *a = Pitch::unsmob (p1);
- Pitch *b = Pitch::unsmob (p2);
+ Pitch *a = unsmob<Pitch> (p1);
+ Pitch *b = unsmob<Pitch> (p2);
if (compare (*a, *b) < 0)
return SCM_BOOL_T;
if (ev
&& ev->in_event_class ("trill-span-event")
&& to_dir (ev->get_property ("span-direction")) == START
- && Pitch::is_smob (ev->get_property ("pitch")))
+ && unsmob<Pitch> (ev->get_property ("pitch")))
make_trill (ev);
}
Pitched_trill_engraver::make_trill (Stream_event *ev)
{
SCM scm_pitch = ev->get_property ("pitch");
- Pitch *p = Pitch::unsmob (scm_pitch);
+ Pitch *p = unsmob<Pitch> (scm_pitch);
SCM keysig = get_property ("localAlterations");
int c0 = scm_is_number (c0scm) ? scm_to_int (c0scm) : 0;
trill_head_->set_property ("staff-position",
- scm_from_int (Pitch::unsmob (scm_pitch)->steps ()
+ scm_from_int (unsmob<Pitch> (scm_pitch)->steps ()
+ c0));
trill_group_ = make_item ("TrillPitchGroup", ev->self_scm ());
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
LY_ASSERT_SMOB (Grob, grob_element, 3);
- Pointer_group_interface::add_grob (Grob::unsmob (grob),
+ Pointer_group_interface::add_grob (unsmob<Grob> (grob),
sym,
- Grob::unsmob (grob_element));
+ unsmob<Grob> (grob_element));
return SCM_UNSPECIFIED;
}
int
Pointer_group_interface::count (Grob *me, SCM sym)
{
- Grob_array *arr = Grob_array::unsmob (me->internal_get_object (sym));
+ Grob_array *arr = unsmob<Grob_array> (me->internal_get_object (sym));
return arr ? arr->size () : 0;
}
void
Pointer_group_interface::add_grob (Grob *me, SCM sym, SCM p)
{
- add_grob (me, sym, Grob::unsmob (p));
+ add_grob (me, sym, unsmob<Grob> (p));
}
void
Pointer_group_interface::get_grob_array (Grob *me, SCM sym)
{
SCM scm_arr = me->internal_get_object (sym);
- Grob_array *arr = Grob_array::unsmob (scm_arr);
+ Grob_array *arr = unsmob<Grob_array> (scm_arr);
if (!arr)
{
scm_arr = Grob_array::make_array ();
- arr = Grob_array::unsmob (scm_arr);
+ arr = unsmob<Grob_array> (scm_arr);
me->set_object (sym, scm_arr);
}
return arr;
vector<Grob *> const &
ly_scm2link_array (SCM x)
{
- Grob_array *arr = Grob_array::unsmob (x);
+ Grob_array *arr = unsmob<Grob_array> (x);
return arr ? arr->array () : empty_array;
}
vector<Item *>
internal_extract_item_array (Grob const *elt, SCM symbol)
{
- Grob_array *arr = Grob_array::unsmob (elt->internal_get_object (symbol));
+ Grob_array *arr = unsmob<Grob_array> (elt->internal_get_object (symbol));
vector<Item *> items;
for (vsize i = 0; arr && i < arr->size (); i++)
items.push_back (arr->item (i));
"Set property @var{sym} of @var{obj} to @var{value}.")
{
LY_ASSERT_SMOB (Prob, obj, 1);
- Prob *ps = Prob::unsmob (obj);
+ Prob *ps = unsmob<Prob> (obj);
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
ps->set_property (sym, value);
" @code{'()} if @var{val} is not specified.")
{
LY_ASSERT_SMOB (Prob, prob, 1);
- Prob *ps = Prob::unsmob (prob);
+ Prob *ps = unsmob<Prob> (prob);
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
if (SCM_UNBNDP (val))
(SCM obj, SCM type),
"Is @var{obj} the specified prob-type?")
{
- Prob *prob = Prob::unsmob (obj);
+ Prob *prob = unsmob<Prob> (obj);
return scm_from_bool (prob && prob->type () == type);
}
"Retrieve an alist of mutable properties.")
{
LY_ASSERT_SMOB (Prob, prob, 1);
- Prob *ps = Prob::unsmob (prob);
+ Prob *ps = unsmob<Prob> (prob);
return ps->get_property_alist (true);
}
"Retrieve an alist of immutable properties.")
{
LY_ASSERT_SMOB (Prob, prob, 1);
- Prob *ps = Prob::unsmob (prob);
+ Prob *ps = unsmob<Prob> (prob);
return ps->get_property_alist (false);
}
equality; e.g., that two probs are equal iff they can be
distinguished by calls to ly:prob-property.
*/
- Prob *probs[2] = {Prob::unsmob (sa), Prob::unsmob (sb)};
+ Prob *probs[2] = {unsmob<Prob> (sa), unsmob<Prob> (sb)};
SCM props[2][2];
int i;
SCM aval = scm_cdar (aprop);
SCM bval = scm_cdar (bprop);
if (!scm_is_eq (scm_caar (aprop), scm_caar (bprop))
- || (!(Input::is_smob (aval) && Input::is_smob (bval))
+ || (!(unsmob<Input> (aval) && unsmob<Input> (bval))
&& !ly_is_equal (aval, bval)))
return SCM_BOOL_F;
}
SCM
Prob::internal_get_property (SCM sym) const
{
-#ifndef NDEBUG
+#ifdef DEBUG
if (profile_property_accesses)
note_property_access (&prob_property_lookup_table, sym);
#endif
SCM
Property_iterator::once_finalization (SCM ctx, SCM music, SCM previous_value)
{
- Music *m = Music::unsmob (music);
- Context *c = Context::unsmob (ctx);
+ Music *m = unsmob<Music> (music);
+ Context *c = unsmob<Context> (ctx);
// Do not use UnsetProperty, which sets the default, but rather
// cache the value before the \once \set command and restore it now
SCM
Push_property_iterator::once_finalization (SCM ctx, SCM music)
{
- Music *mus = Music::unsmob (music);
- Context *c = Context::unsmob (ctx);
+ Music *mus = unsmob<Music> (music);
+ Context *c = unsmob<Context> (ctx);
SCM sym = mus->get_property ("symbol");
if (check_grob (mus, sym))
object_ = SCM_UNDEFINED;
}
+SCM Protected_scm::list_ = SCM_EOL;
+SCM Protected_scm::last_ = SCM_EOL;
+
Protected_scm &
Protected_scm::operator = (SCM s)
{
if (SCM_CONSP (object_))
SCM_SETCAR (object_, s);
+ else if (SCM_IMP (s))
+ object_ = s;
else
- object_ = SCM_NIMP (s) ? scm_permanent_object (scm_list_1 (s)) : s;
+ {
+ s = scm_list_1 (s);
+ if (SCM_CONSP (last_))
+ SCM_SETCDR (last_, s);
+ else
+ list_ = scm_permanent_object (s);
+ last_ = object_ = s;
+ }
return *this;
}
SCM
Pure_from_neighbor_interface::calc_pure_relevant_grobs (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set ((me->original () && me->original ()->is_live ()
? me->original ()
: me),
new_elts.insert (new_elts.end (), elts.begin (), elts.end ());
SCM neighbors_scm = me->get_object ("neighbors");
- if (Grob_array::is_smob (neighbors_scm))
+ if (unsmob<Grob_array> (neighbors_scm))
{
vector<Grob *> &arr
- = Grob_array::unsmob (neighbors_scm)->array_reference ();
+ = unsmob<Grob_array> (neighbors_scm)->array_reference ();
arr = new_elts;
}
Quote_iterator::vector_moment (int idx) const
{
SCM entry = scm_c_vector_ref (event_vector_, idx);
- return *Moment::unsmob (scm_caar (entry));
+ return *unsmob<Moment> (scm_caar (entry));
}
void
if (quote_ok ())
{
SCM entry = scm_c_vector_ref (event_vector_, event_idx_);
- Pitch *quote_pitch = Pitch::unsmob (scm_cdar (entry));
+ Pitch *quote_pitch = unsmob<Pitch> (scm_cdar (entry));
/*
The pitch that sounds when written central C is played.
*/
Pitch temp_pitch;
- Pitch *me_pitch = Pitch::unsmob (get_music ()->get_property ("quoted-transposition"));
+ Pitch *me_pitch = unsmob<Pitch> (get_music ()->get_property ("quoted-transposition"));
if (!me_pitch)
- me_pitch = Pitch::unsmob (get_outlet ()->get_property ("instrumentTransposition"));
+ me_pitch = unsmob<Pitch> (get_outlet ()->get_property ("instrumentTransposition"));
else
{
// We are not going to win a beauty contest with this one,
{
SCM ev_acc = scm_car (s);
- Stream_event *ev = Stream_event::unsmob (scm_car (ev_acc));
+ Stream_event *ev = unsmob<Stream_event> (scm_car (ev_acc));
if (!ev)
programming_error ("no music found in quote");
else if (accept_music_type (ev, is_cue))
SCM
Relative_octave_check::relative_callback (SCM music, SCM last_pitch)
{
- Pitch p = *Pitch::unsmob (last_pitch);
- Music *m = Music::unsmob (music);
- Pitch *check_p = Pitch::unsmob (m->get_property ("pitch"));
+ Pitch p = *unsmob<Pitch> (last_pitch);
+ Music *m = unsmob<Music> (music);
+ Pitch *check_p = unsmob<Pitch> (m->get_property ("pitch"));
int delta_oct = 0;
if (check_p)
semi_tie->set_parent (semi_tie_column_, Y_AXIS);
semi_ties_.push_back (semi_tie);
- if (is_direction (Stream_event::unsmob (cause)->get_property ("direction")))
+ if (is_direction (unsmob<Stream_event> (cause)->get_property ("direction")))
{
- Direction d = to_dir (Stream_event::unsmob (cause)->get_property ("direction"));
+ Direction d = to_dir (unsmob<Stream_event> (cause)->get_property ("direction"));
semi_tie->set_property ("direction", scm_from_int (d));
}
Music *
Repeated_music::body (Music *me)
{
- return Music::unsmob (me->get_property ("element"));
+ return unsmob<Music> (me->get_property ("element"));
}
SCM
SCM p = alternative_list;
while (scm_is_pair (p) && done < count)
{
- m = m + Music::unsmob (scm_car (p))->get_length ();
+ m = m + unsmob<Music> (scm_car (p))->get_length ();
done++;
if (count - done < len)
p = scm_cdr (p);
Repeated_music::body_get_length (Music *me)
{
Moment m = 0;
- if (Music *body = Music::unsmob (me->get_property ("element")))
+ if (Music *body = unsmob<Music> (me->get_property ("element")))
m = body->get_length ();
return m;
}
SCM
Repeated_music::unfolded_music_length (SCM m)
{
- Music *me = Music::unsmob (m);
+ Music *me = unsmob<Music> (m);
Moment l = Moment (repeat_count (me)) * body_get_length (me) + alternatives_get_length (me, false);
return l.smobbed_copy ();
SCM
Repeated_music::folded_music_length (SCM m)
{
- Music *me = Music::unsmob (m);
+ Music *me = unsmob<Music> (m);
Moment l = body_get_length (me) + alternatives_get_length (me, true);
return l.smobbed_copy ();
SCM
Repeated_music::volta_music_length (SCM m)
{
- Music *me = Music::unsmob (m);
+ Music *me = unsmob<Music> (m);
Moment l = body_get_length (me) + alternatives_volta_get_length (me);
return l.smobbed_copy ();
}
SCM
Repeated_music::minimum_start (SCM m)
{
- Music *me = Music::unsmob (m);
- Music *body = Music::unsmob (me->get_property ("element"));
+ Music *me = unsmob<Music> (m);
+ Music *body = unsmob<Music> (me->get_property ("element"));
if (body)
return body->start_mom ().smobbed_copy ();
SCM
Repeated_music::first_start (SCM m)
{
- Music *me = Music::unsmob (m);
- Music *body = Music::unsmob (me->get_property ("element"));
+ Music *me = unsmob<Music> (m);
+ Music *body = unsmob<Music> (me->get_property ("element"));
Moment rv = (body) ? body->start_mom ()
: Music_sequence::first_start (me->get_property ("elements"));
for (SCM s = get_property ("busyGrobs"); scm_is_pair (s); s = scm_cdr (s))
{
- Grob *g = Grob::unsmob (scm_cdar (s));
- Moment *m = Moment::unsmob (scm_caar (s));
+ Grob *g = unsmob<Grob> (scm_cdar (s));
+ Moment *m = unsmob<Moment> (scm_caar (s));
if (!g || !m)
continue;
SCM
Rest_collision::force_shift_callback_rest (SCM rest, SCM offset)
{
- Grob *rest_grob = Grob::unsmob (rest);
+ Grob *rest_grob = unsmob<Grob> (rest);
Grob *parent = rest_grob->get_parent (X_AXIS);
/*
if (Note_column::has_interface (parent) && Note_column::has_rests (parent))
{
- Grob *collision = Grob::unsmob (parent->get_object ("rest-collision"));
+ Grob *collision = unsmob<Grob> (parent->get_object ("rest-collision"));
if (collision)
(void) collision->get_property ("positioning-done");
p->set_object ("rest-collision", me->self_scm ());
- Grob *rest = Grob::unsmob (p->get_object ("rest"));
+ Grob *rest = unsmob<Grob> (p->get_object ("rest"));
if (rest)
{
chain_offset_callback (rest,
SCM
Rest_collision::calc_positioning_done (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
me->set_property ("positioning-done", SCM_BOOL_T);
Grob *e = elts[i];
if (Note_column::has_interface (e))
{
- if (Grob::unsmob (e->get_object ("rest")))
+ if (unsmob<Grob> (e->get_object ("rest")))
rests.push_back (e);
else
notes.push_back (e);
if (rest_event_ && !rest_)
{
rest_ = make_item ("Rest", rest_event_->self_scm ());
- Pitch *p = Pitch::unsmob (rest_event_->get_property ("pitch"));
+ Pitch *p = unsmob<Pitch> (rest_event_->get_property ("pitch"));
if (p)
{
SCM
Rest::y_offset_callback (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
int duration_log = scm_to_int (me->get_property ("duration-log"));
Real ss = Staff_symbol_referencer::staff_space (me);
SCM
Rest::calc_cross_staff (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
- Grob *stem = Grob::unsmob (me->get_object ("stem"));
+ Grob *me = unsmob<Grob> (smob);
+ Grob *stem = unsmob<Grob> (me->get_object ("stem"));
if (!stem)
return SCM_BOOL_F;
SCM
Rest::print (SCM smob)
{
- return brew_internal_stencil (Grob::unsmob (smob), true);
+ return brew_internal_stencil (unsmob<Grob> (smob), true);
}
MAKE_SCHEME_CALLBACK (Rest, width, 1);
SCM
Rest::width (SCM smob)
{
- return generic_extent_callback (Grob::unsmob (smob), X_AXIS);
+ return generic_extent_callback (unsmob<Grob> (smob), X_AXIS);
}
MAKE_SCHEME_CALLBACK (Rest, height, 1);
SCM
Rest::height (SCM smob)
{
- return generic_extent_callback (Grob::unsmob (smob), Y_AXIS);
+ return generic_extent_callback (unsmob<Grob> (smob), Y_AXIS);
}
/*
with ledgered rests.
*/
SCM m = brew_internal_stencil (me, a != X_AXIS);
- return ly_interval2scm (Stencil::unsmob (m)->extent (a));
+ return ly_interval2scm (unsmob<Stencil> (m)->extent (a));
}
MAKE_SCHEME_CALLBACK (Rest, pure_height, 3);
SCM /* start */,
SCM /* end */)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
SCM m = brew_internal_stencil (me, false);
- return ly_interval2scm (Stencil::unsmob (m)->extent (Y_AXIS));
+ return ly_interval2scm (unsmob<Stencil> (m)->extent (Y_AXIS));
}
ADD_INTERFACE (Rest,
Rhythmic_head::get_dots (Grob *me)
{
SCM s = me->get_object ("dot");
- return Item::unsmob (s);
+ return unsmob<Item> (s);
}
Item *
Rhythmic_head::get_stem (Grob *me)
{
SCM s = me->get_object ("stem");
- return Item::unsmob (s);
+ return unsmob<Item> (s);
}
int
SCM art = scm_car (arts);
if (c->event_source ()->is_listened_class
- (Stream_event::unsmob (art)->get_property ("class")))
+ (unsmob<Stream_event> (art)->get_property ("class")))
listened = scm_cons (art, listened);
else
unlistened = scm_cons (art, unlistened);
c->event_source ()->broadcast (ev);
arts = scm_reverse_x (listened, SCM_EOL);
for (; scm_is_pair (arts); arts = scm_cdr (arts))
- c->event_source ()->broadcast (Stream_event::unsmob (scm_car (arts)));
+ c->event_source ()->broadcast (unsmob<Stream_event> (scm_car (arts)));
}
else
c->event_source ()->broadcast (ev);
*/
#include "scale.hh"
+#include "protected-scm.hh"
/*
SCM_ASSERT_TYPE (type_ok, steps, SCM_ARG1, __FUNCTION__, "vector of rational");
- Scale *s = new Scale (tones);
+ return (new Scale (tones))->unprotect ();
+}
- SCM retval = s->self_scm ();
- s->unprotect ();
+Scale *default_global_scale = 0;
+Protected_scm default_global_scale_scm (SCM_BOOL_F);
- return retval;
-}
+// TODO: This is somewhat fishy: pitches protect their scale via a
+// mark_smob hook. But since pitches are of Simple_smob variety, they
+// are unknown to GUILE unless a smobbed_copy has been created. So
+// changing the default scale might cause some existing pitches to
+// lose their scale's protection.
LY_DEFINE (ly_default_scale, "ly:default-scale",
0, 0, 0, (),
"Get the global default scale.")
{
- return default_global_scale
- ? default_global_scale->self_scm ()
- : SCM_BOOL_F;
+ return default_global_scale_scm;
}
-Scale *default_global_scale = 0;
-
LY_DEFINE (ly_set_default_scale, "ly:set-default-scale",
1, 0, 0, (SCM scale),
"Set the global default scale. This determines the tuning of"
{
LY_ASSERT_SMOB (Scale, scale, 1);
- Scale *s = Scale::unsmob (scale);
- if (default_global_scale)
- default_global_scale->unprotect ();
- default_global_scale = s;
- s->protect ();
+ default_global_scale_scm = scale;
+ default_global_scale = unsmob<Scale> (scale);
return SCM_UNSPECIFIED;
}
void
Score_performer::prepare (SCM sev)
{
- Stream_event *ev = Stream_event::unsmob (sev);
+ Stream_event *ev = unsmob<Stream_event> (sev);
SCM sm = ev->get_property ("moment");
- Moment *m = Moment::unsmob (sm);
+ Moment *m = unsmob<Moment> (sm);
audio_column_ = new Audio_column (*m);
announce_element (Audio_element_info (audio_column_, 0));
precomputed_recurse_over_translators (context (), START_TRANSLATION_TIMESTEP, UP);
"All output definitions in a score.")
{
LY_ASSERT_SMOB (Score, score, 1);
- Score *sc = Score::unsmob (score);
+ Score *sc = unsmob<Score> (score);
SCM l = SCM_EOL;
for (vsize i = 0; i < sc->defs_.size (); i++)
{
LY_ASSERT_SMOB (Score, score, 1);
LY_ASSERT_SMOB (Output_def, def, 2);
- Score *sc = Score::unsmob (score);
- Output_def *output_def = Output_def::unsmob (def);
+ Score *sc = unsmob<Score> (score);
+ Output_def *output_def = unsmob<Output_def> (def);
sc->add_output_def (output_def);
return SCM_UNSPECIFIED;
}
"Return score header.")
{
LY_ASSERT_SMOB (Score, score, 1);
- Score *sc = Score::unsmob (score);
+ Score *sc = unsmob<Score> (score);
return sc->get_header ();
}
SCM_ASSERT_TYPE (ly_is_module (module), module, SCM_ARG2, __FUNCTION__,
"module");
- Score *sc = Score::unsmob (score);
+ Score *sc = unsmob<Score> (score);
sc->set_header (module);
return SCM_UNSPECIFIED;
}
"Return score music.")
{
LY_ASSERT_SMOB (Score, score, 1);
- Score *sc = Score::unsmob (score);
+ Score *sc = unsmob<Score> (score);
return sc->get_music ();
}
"Was there an error in the score?")
{
LY_ASSERT_SMOB (Score, score, 1);
- Score *sc = Score::unsmob (score);
+ Score *sc = unsmob<Score> (score);
return scm_from_bool (sc->error_found_);
}
LY_ASSERT_SMOB (Score, score, 1);
LY_ASSERT_SMOB (Output_def, layout, 2);
- Score *sc = Score::unsmob (score);
- Output_def *od = Output_def::unsmob (layout);
+ Score *sc = unsmob<Score> (score);
+ Output_def *od = unsmob<Output_def> (layout);
if (sc->error_found_)
return SCM_EOL;
Input *
Score::origin () const
{
- return Input::unsmob (input_location_);
+ return unsmob<Input> (input_location_);
}
Score::Score ()
smobify_self ();
input_location_ = s.origin ()->smobbed_copy ();
- Music *m = Music::unsmob (s.music_);
+ Music *m = unsmob<Music> (s.music_);
if (m)
{
Music *mclone = m->clone ();
/* TODO: fix or junk --no-layout. */
SCM context = ly_run_translator (music_, scaled);
- if (Global_context::unsmob (context))
+ if (unsmob<Global_context> (context))
{
SCM s = ly_format_output (context);
void
Score::set_music (SCM music)
{
- if (Music::is_smob (music_))
+ if (unsmob<Music> (music_))
{
- Music::unsmob (music)->origin ()->error (_ ("already have music in score"));
- Music::unsmob (music_)->origin ()->error (_ ("this is the previous music"));
+ unsmob<Music> (music)->origin ()->error (_ ("already have music in score"));
+ unsmob<Music> (music_)->origin ()->error (_ ("this is the previous music"));
}
- Music *m = Music::unsmob (music);
+ Music *m = unsmob<Music> (music);
if (m && to_boolean (m->get_property ("error-found")))
{
m->origin ()->error (_ ("errors found, ignoring music expression"));
2, 0, 0, (SCM a, SCM b),
"Compare two grobs by script priority. For internal use.")
{
- Grob *i1 = Grob::unsmob (a);
- Grob *i2 = Grob::unsmob (b);
+ Grob *i1 = unsmob<Grob> (a);
+ Grob *i2 = unsmob<Grob> (b);
SCM p1 = i1->get_property ("script-priority");
SCM p2 = i2->get_property ("script-priority");
SCM
Script_column::row_before_line_breaking (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
vector<Grob *> horizontal_grobs;
extract_grob_set (me, "scripts", scripts);
SCM
Script_column::before_line_breaking (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
vector<Grob *> staff_sided;
extract_grob_set (me, "scripts", scripts);
for (SCM s = ss; scm_is_pair (s);
s = scm_cdr (s), last = g, last_initial_outside_staff = initial_outside_staff)
{
- g = Grob::unsmob (scm_car (s));
+ g = unsmob<Grob> (scm_car (s));
initial_outside_staff = g->get_property ("outside-staff-priority");
if (last) //not the first grob in the list
{
*/
if (!scm_is_number (last_outside_staff))
for (SCM t = ss; !scm_is_eq (t, s); t = scm_cdr (t))
- Side_position_interface::add_support (g, Grob::unsmob (scm_car (t)));
+ Side_position_interface::add_support (g, unsmob<Grob> (scm_car (t)));
/*
if outside_staff_priority is missing or is equal to original
outside_staff_priority of previous grob, set new
SCM
Script_interface::calc_positioning_done (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
if (Grob *par = me->get_parent (X_AXIS))
{
Grob *stem = Note_column::get_stem (par);
relative_dir = to_dir (reldir);
SCM other_elt = me->get_object ("direction-source");
- Grob *e = Grob::unsmob (other_elt);
+ Grob *e = unsmob<Grob> (other_elt);
if (e)
return (Direction) (relative_dir * get_grob_direction (e));
SCM
Script_interface::calc_direction (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Direction d = Script_interface::get_direction (me);
if (!d)
SCM
Script_interface::calc_cross_staff (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Grob *stem = Note_column::get_stem (me->get_parent (X_AXIS));
if (stem && to_boolean (stem->get_property ("cross-staff")))
return SCM_BOOL_T;
- Grob *slur = Grob::unsmob (me->get_object ("slur"));
+ Grob *slur = unsmob<Grob> (me->get_object ("slur"));
SCM avoid_slur = me->get_property ("avoid-slur");
if (slur && to_boolean (slur->get_property ("cross-staff"))
&& (scm_is_eq (avoid_slur, ly_symbol2scm ("outside"))
SCM
Script_interface::print (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Direction dir = get_grob_direction (me);
SCM
Self_alignment_interface::y_aligned_on_self (SCM element)
{
- return aligned_on_self (Grob::unsmob (element), Y_AXIS, false, 0, 0);
+ return aligned_on_self (unsmob<Grob> (element), Y_AXIS, false, 0, 0);
}
MAKE_SCHEME_CALLBACK (Self_alignment_interface, x_aligned_on_self, 1);
SCM
Self_alignment_interface::x_aligned_on_self (SCM element)
{
- return aligned_on_self (Grob::unsmob (element), X_AXIS, false, 0, 0);
+ return aligned_on_self (unsmob<Grob> (element), X_AXIS, false, 0, 0);
}
MAKE_SCHEME_CALLBACK (Self_alignment_interface, pure_y_aligned_on_self, 3);
SCM
Self_alignment_interface::pure_y_aligned_on_self (SCM smob, SCM start, SCM end)
{
- return aligned_on_self (Grob::unsmob (smob), Y_AXIS, true, robust_scm2int (start, 0), robust_scm2int (end, INT_MAX));
+ return aligned_on_self (unsmob<Grob> (smob), Y_AXIS, true, robust_scm2int (start, 0), robust_scm2int (end, INT_MAX));
}
SCM
SCM
Self_alignment_interface::centered_on_x_parent (SCM smob)
{
- return centered_on_object (Grob::unsmob (smob)->get_parent (X_AXIS), X_AXIS);
+ return centered_on_object (unsmob<Grob> (smob)->get_parent (X_AXIS), X_AXIS);
}
MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_y_parent, 1);
SCM
Self_alignment_interface::centered_on_y_parent (SCM smob)
{
- return centered_on_object (Grob::unsmob (smob)->get_parent (Y_AXIS), Y_AXIS);
+ return centered_on_object (unsmob<Grob> (smob)->get_parent (Y_AXIS), Y_AXIS);
}
MAKE_SCHEME_CALLBACK (Self_alignment_interface, aligned_on_x_parent, 1);
SCM
Self_alignment_interface::aligned_on_x_parent (SCM smob)
{
- return aligned_on_parent (Grob::unsmob (smob), X_AXIS);
+ return aligned_on_parent (unsmob<Grob> (smob), X_AXIS);
}
MAKE_SCHEME_CALLBACK (Self_alignment_interface, aligned_on_y_parent, 1);
SCM
Self_alignment_interface::aligned_on_y_parent (SCM smob)
{
- return aligned_on_parent (Grob::unsmob (smob), Y_AXIS);
+ return aligned_on_parent (unsmob<Grob> (smob), Y_AXIS);
}
SCM
SCM
Semi_tie_column::calc_positioning_done (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
me->set_property ("positioning-done", SCM_BOOL_T);
SCM
Semi_tie_column::calc_head_direction (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "ties", ties);
Direction d = LEFT;
SCM
Semi_tie::calc_control_points (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
(void) me->get_property ("direction");
if (Semi_tie_column::has_interface (me->get_parent (Y_AXIS)))
int
Semi_tie::get_position (Grob *me)
{
- Grob *h = Grob::unsmob (me->get_object ("note-head"));
+ Grob *h = unsmob<Grob> (me->get_object ("note-head"));
return (int) rint (Staff_symbol_referencer::get_position (h));
}
&& !current_spacings_.staff_spacing_
&& to_boolean (get_property ("createSpacing")))
{
- Grob *col = Grob::unsmob (get_property ("currentCommandColumn"));
+ Grob *col = unsmob<Grob> (get_property ("currentCommandColumn"));
current_spacings_.staff_spacing_ = make_item ("StaffSpacing", SCM_EOL);
context ()->set_property ("hasStaffSpacing", SCM_BOOL_T);
&& last_spacings_.staff_spacing_)
{
SCM ri = last_spacings_.staff_spacing_->get_object ("right-items");
- Grob_array *ga = Grob_array::unsmob (ri);
+ Grob_array *ga = unsmob<Grob_array> (ri);
if (!ga)
{
SCM ga_scm = Grob_array::make_array ();
last_spacings_.staff_spacing_->set_object ("right-items", ga_scm);
- ga = Grob_array::unsmob (ga_scm);
+ ga = unsmob<Grob_array> (ga_scm);
}
ga->clear ();
last_spacings_ = current_spacings_;
if (Item *sp = current_spacings_.staff_spacing_)
- if (Grob *col = Grob::unsmob (get_property ("currentMusicalColumn")))
+ if (Grob *col = unsmob<Grob> (get_property ("currentMusicalColumn")))
Pointer_group_interface::add_grob (sp, ly_symbol2scm ("right-items"), col);
current_spacings_.clear ();
Real
Separation_item::set_distance (Item *l, Item *r, Real padding)
{
- Drul_array<Skyline_pair *> lines (Skyline_pair::unsmob (l->get_property ("horizontal-skylines")),
- Skyline_pair::unsmob (r->get_property ("horizontal-skylines")));
+ Drul_array<Skyline_pair *> lines (unsmob<Skyline_pair> (l->get_property ("horizontal-skylines")),
+ unsmob<Skyline_pair> (r->get_property ("horizontal-skylines")));
Skyline right = conditional_skyline (r, l);
right.merge ((*lines[RIGHT])[LEFT]);
bool
Separation_item::is_empty (Grob *me)
{
- Skyline_pair *sky = Skyline_pair::unsmob (me->get_property ("horizontal-skylines"));
+ Skyline_pair *sky = unsmob<Skyline_pair> (me->get_property ("horizontal-skylines"));
return (!sky || sky->is_empty ());
}
SCM
Separation_item::calc_skylines (SCM smob)
{
- Item *me = Item::unsmob (smob);
+ Item *me = unsmob<Item> (smob);
vector<Box> bs = boxes (me, 0);
Skyline_pair sp (bs, Y_AXIS);
/*
if (!debug_skylines)
return SCM_BOOL_F;
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Stencil ret;
- if (Skyline_pair *s = Skyline_pair::unsmob (me->get_property ("horizontal-skylines")))
+ if (Skyline_pair *s = unsmob<Skyline_pair> (me->get_property ("horizontal-skylines")))
{
ret.add_stencil (Lookup::points_to_line_stencil (0.1, (*s)[LEFT].to_points (Y_AXIS)).in_color (255, 255, 0));
ret.add_stencil (Lookup::points_to_line_stencil (0.1, (*s)[RIGHT].to_points (Y_AXIS)).in_color (0, 255, 255));
if (scm_is_pair (cursor_))
- iter_->music_ == Music::unsmob (scm_car (cursor_))
+ iter_->music_ == unsmob<Music> (scm_car (cursor_))
else
iter_ == 0;
for (; scm_is_pair (cursor); cursor = scm_cdr (cursor))
{
- Music *mus = Music::unsmob (scm_car (cursor));
+ Music *mus = unsmob<Music> (scm_car (cursor));
Moment s = mus->start_mom ();
Moment l = mus->get_length () - s;
iter_ = 0;
if (scm_is_pair (cursor_))
{
- Music *m = Music::unsmob (scm_car (cursor_));
- iter_ = Music_iterator::unsmob (get_iterator (m));
+ Music *m = unsmob<Music> (scm_car (cursor_));
+ iter_ = unsmob<Music_iterator> (get_iterator (m));
}
while (iter_ && !iter_->ok ())
iter_->quit ();
if (scm_is_pair (cursor_))
- iter_ = Music_iterator::unsmob (get_iterator (Music::unsmob (scm_car (cursor_))));
+ iter_ = unsmob<Music_iterator> (get_iterator (unsmob<Music> (scm_car (cursor_))));
else
iter_ = 0;
}
acs = scm_cdr (acs))
for (SCM s = scm_cdar (acs); scm_is_pair (s); s = scm_cdr (s))
{
- Grob *a = Grob::unsmob (scm_car (s));
+ Grob *a = unsmob<Grob> (scm_car (s));
support.insert (a);
}
}
current_off_ptr = &r;
}
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
// We will only ever want widths of spanners after line breaking
// so we can set pure to false
if (dynamic_cast<Spanner *> (me) && a == X_AXIS)
SCM
Side_position_interface::calc_cross_staff (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "side-support-elements", elts);
Direction my_dir = get_grob_direction (me) ;
pure,
start,
end);
- if (Skyline_pair::is_smob (skyp))
+ if (unsmob<Skyline_pair> (skyp))
{
// for spanner pure heights, we don't know horizontal spacing,
// so a spanner can never have a meaningful x coordiante
Real yc = a == X_AXIS
? me->pure_relative_y_coordinate (common[Y_AXIS], start, end)
: me->get_parent (Y_AXIS)->maybe_pure_coordinate (common[Y_AXIS], Y_AXIS, pure, start, end);
- Skyline_pair copy = *Skyline_pair::unsmob (skyp);
+ Skyline_pair copy = *unsmob<Skyline_pair> (skyp);
copy.shift (a == X_AXIS ? yc : xc);
copy.raise (a == X_AXIS ? xc : yc);
my_dim = copy[-dir];
start,
end);
- if (Skyline_pair::is_smob (sp))
+ if (unsmob<Skyline_pair> (sp))
{
Real xc = pure && dynamic_cast<Spanner *> (e)
? e->get_parent (X_AXIS)->relative_coordinate (common[X_AXIS], X_AXIS)
Real yc = a == X_AXIS
? e->pure_relative_y_coordinate (common[Y_AXIS], start, end)
: e->maybe_pure_coordinate (common[Y_AXIS], Y_AXIS, pure, start, end);
- Skyline_pair copy = *Skyline_pair::unsmob (sp);
+ Skyline_pair copy = *unsmob<Skyline_pair> (sp);
if (a == Y_AXIS
&& Stem::has_interface (e)
&& to_boolean (me->get_maybe_pure_property ("add-stem-support", pure, start, end)))
SCM
Side_position_interface::move_to_extremal_staff (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
System *sys = dynamic_cast<System *> (me->get_system ());
Direction dir = get_grob_direction (me);
if (dir != DOWN)
Axis_group_interface::add_element (top_staff, me);
// Remove any cross-staff side-support dependencies
- Grob_array *ga = Grob_array::unsmob (me->get_object ("side-support-elements"));
+ Grob_array *ga = unsmob<Grob_array> (me->get_object ("side-support-elements"));
if (ga)
{
vector<Grob *> const &elts = ga->array ();
int start,
int end)
{
- if (Simple_closure *sc = Simple_closure::unsmob (expr))
+ if (Simple_closure *sc = unsmob<Simple_closure> (expr))
{
SCM inside = sc->expression ();
- SCM proc = !pure && Unpure_pure_container::is_smob (scm_car (inside))
- ? Unpure_pure_container::unsmob (scm_car (inside))->unpure_part ()
+ SCM proc = !pure && unsmob<Unpure_pure_container> (scm_car (inside))
+ ? unsmob<Unpure_pure_container> (scm_car (inside))->unpure_part ()
: scm_car (inside);
SCM args = scm_cons (delayed_argument,
evaluate_args (delayed_argument, scm_cdr (inside),
return expr;
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))
+ else if (unsmob<Unpure_pure_container> (scm_car (expr))
|| ly_is_procedure (scm_car (expr)))
{
- SCM proc = !pure && Unpure_pure_container::is_smob (scm_car (expr))
- ? Unpure_pure_container::unsmob (scm_car (expr))->unpure_part ()
+ SCM proc = !pure && unsmob<Unpure_pure_container> (scm_car (expr))
+ ? unsmob<Unpure_pure_container> (scm_car (expr))->unpure_part ()
: scm_car (expr);
SCM args = evaluate_args (delayed_argument, scm_cdr (expr), pure, start, end);
if (scm_is_eq (args, SCM_UNSPECIFIED))
bool pure = (scm_is_number (scm_start) && scm_is_number (scm_end));
int start = robust_scm2int (scm_start, 0);
int end = robust_scm2int (scm_end, 0);
- SCM expr = Simple_closure::unsmob (closure)->expression ();
+ SCM expr = unsmob<Simple_closure> (closure)->expression ();
return evaluate_with_simple_closure (delayed, expr, pure, start, end);
}
for (SCM s = Spaceable_grob::get_minimum_distances (col);
scm_is_pair (s); s = scm_cdr (s))
{
- Grob *other = Grob::unsmob (scm_caar (s));
+ Grob *other = unsmob<Grob> (scm_caar (s));
vsize j = binary_search (cols, other, Paper_column::less_than, col_index);
if (j != VPOS)
{
Simultaneous_music_iterator::derived_substitute (Context *f, Context *t)
{
for (SCM s = children_list_; scm_is_pair (s); s = scm_cdr (s))
- Music_iterator::unsmob (scm_car (s))->substitute_outlet (f, t);
+ unsmob<Music_iterator> (scm_car (s))->substitute_outlet (f, t);
}
void
SCM *tail = &children_list_;
for (; scm_is_pair (i); i = scm_cdr (i), j++)
{
- Music *mus = Music::unsmob (scm_car (i));
+ Music *mus = unsmob<Music> (scm_car (i));
SCM scm_iter = get_static_get_iterator (mus);
- Music_iterator *mi = Music_iterator::unsmob (scm_iter);
+ Music_iterator *mi = unsmob<Music_iterator> (scm_iter);
/* if create_separate_contexts_ is set, create a new context with the
number number as name */
SCM *proc = &children_list_;
while (scm_is_pair (*proc))
{
- Music_iterator *i = Music_iterator::unsmob (scm_car (*proc));
+ Music_iterator *i = unsmob<Music_iterator> (scm_car (*proc));
bool run_always = i->run_always ();
if (run_always || i->pending_moment () == until)
i->process (until);
if (had_bad && !had_good)
{
for (SCM p = children_list_; scm_is_pair (p); p = scm_cdr (p))
- Music_iterator::unsmob (scm_car (p))->quit ();
+ unsmob<Music_iterator> (scm_car (p))->quit ();
children_list_ = SCM_EOL;
}
}
for (SCM s = children_list_; scm_is_pair (s); s = scm_cdr (s))
{
- Music_iterator *it = Music_iterator::unsmob (scm_car (s));
+ Music_iterator *it = unsmob<Music_iterator> (scm_car (s));
next = min (next, it->pending_moment ());
}
bool run_always_ok = false;
for (SCM s = children_list_; scm_is_pair (s); s = scm_cdr (s))
{
- Music_iterator *it = Music_iterator::unsmob (scm_car (s));
+ Music_iterator *it = unsmob<Music_iterator> (scm_car (s));
if (!it->run_always ())
return true;
else
{
for (SCM s = children_list_; scm_is_pair (s); s = scm_cdr (s))
{
- Music_iterator *it = Music_iterator::unsmob (scm_car (s));
+ Music_iterator *it = unsmob<Music_iterator> (scm_car (s));
if (it->run_always ())
return true;
}
Simultaneous_music_iterator::do_quit ()
{
for (SCM s = children_list_; scm_is_pair (s); s = scm_cdr (s))
- Music_iterator::unsmob (scm_car (s))->quit ();
+ unsmob<Music_iterator> (scm_car (s))->quit ();
}
IMPLEMENT_CTOR_CALLBACK (Simultaneous_music_iterator);
SCM
Skyline_pair::skyline (SCM smob, SCM dir_scm)
{
- Skyline_pair *sp = Skyline_pair::unsmob (smob);
+ Skyline_pair *sp = unsmob<Skyline_pair> (smob);
Direction dir = robust_scm2dir (dir_scm, UP);
if (dir == CENTER)
horizon_padding = scm_to_double (horizon_padding_scm);
}
- Skyline *skyline = Skyline::unsmob (skyline_scm);
- Skyline *other_skyline = Skyline::unsmob (other_skyline_scm);
+ Skyline *skyline = unsmob<Skyline> (skyline_scm);
+ Skyline *other_skyline = unsmob<Skyline> (other_skyline_scm);
return scm_from_double (skyline->touching_point (*other_skyline, horizon_padding));
}
horizon_padding = scm_to_double (horizon_padding_scm);
}
- Skyline *skyline = Skyline::unsmob (skyline_scm);
- Skyline *other_skyline = Skyline::unsmob (other_skyline_scm);
+ Skyline *skyline = unsmob<Skyline> (skyline_scm);
+ Skyline *other_skyline = unsmob<Skyline> (other_skyline_scm);
return scm_from_double (skyline->distance (*other_skyline, horizon_padding));
}
SCM
Skyline::get_max_height (SCM skyline_scm)
{
- return scm_from_double (Skyline::unsmob (skyline_scm)->max_height ());
+ return scm_from_double (unsmob<Skyline> (skyline_scm)->max_height ());
}
MAKE_SCHEME_CALLBACK (Skyline, get_max_height_position, 1)
SCM
Skyline::get_max_height_position (SCM skyline_scm)
{
- return scm_from_double (Skyline::unsmob (skyline_scm)->max_height_position ());
+ return scm_from_double (unsmob<Skyline> (skyline_scm)->max_height_position ());
}
MAKE_SCHEME_CALLBACK (Skyline, get_height, 2)
Skyline::get_height (SCM skyline_scm, SCM x_scm)
{
Real x = robust_scm2double (x_scm, 0.0);
- return scm_from_double (Skyline::unsmob (skyline_scm)->height (x));
+ return scm_from_double (unsmob<Skyline> (skyline_scm)->height (x));
}
LY_DEFINE (ly_skyline_empty_p, "ly:skyline-empty?",
1, 0, 0, (SCM sky),
"Return whether @var{sky} is empty.")
{
- Skyline *s = Skyline::unsmob (sky);
+ Skyline *s = unsmob<Skyline> (sky);
LY_ASSERT_SMOB (Skyline, sky, 1);
return scm_from_bool (s->is_empty ());
}
void
Slur_proto_engraver::create_slur (const string &spanner_id, Stream_event *ev_cause, Grob *g_cause, Direction dir, bool left_broken)
{
- Grob *ccc = Grob::unsmob (get_property ("currentCommandColumn"));
+ Grob *ccc = unsmob<Grob> (get_property ("currentCommandColumn"));
SCM cause = ev_cause ? ev_cause->self_scm () : g_cause->self_scm ();
Spanner *slur = make_spanner (grob_name_, cause);
slur->set_property ("spanner-id", ly_string2scm (spanner_id));
if (!updown)
return false;
- Stream_event *c = Stream_event::unsmob (slur->get_property ("cause"));
+ Stream_event *c = unsmob<Stream_event> (slur->get_property ("cause"));
if (!c)
{
void
Slur_proto_engraver::stop_translation_timestep ()
{
- if (Grob *g = Grob::unsmob (get_property ("currentCommandColumn")))
+ if (Grob *g = unsmob<Grob> (get_property ("currentCommandColumn")))
{
for (vsize i = 0; i < end_slurs_.size (); i++)
Slur::add_extra_encompass (end_slurs_[i], g);
{
Spanner *s = dynamic_cast<Spanner *> (end_slurs_[i]);
if (!s->get_bound (RIGHT))
- s->set_bound (RIGHT, Grob::unsmob (get_property ("currentMusicalColumn")));
+ s->set_bound (RIGHT, unsmob<Grob> (get_property ("currentMusicalColumn")));
announce_end_grob (s, SCM_EOL);
}
Encompass_info
Slur_score_state::get_encompass_info (Grob *col) const
{
- Grob *stem = Grob::unsmob (col->get_object ("stem"));
+ Grob *stem = unsmob<Grob> (col->get_object ("stem"));
Encompass_info ei;
if (!stem)
SCM
Slur::calc_control_points (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
Slur_score_state state;
state.fill (me);
SCM
Slur::calc_direction (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "note-columns", encompasses);
if (encompasses.empty ())
-- adding extra height for scripts that avoid slurs on the inside
-- adding extra height for the "bulge" in a slur above a note head
*/
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
int start = scm_to_int (start_scm);
int end = scm_to_int (end_scm);
Direction dir = get_grob_direction (me);
SCM
Slur::height (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
// FIXME uncached
Stencil *m = me->get_stencil ();
SCM
Slur::print (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "note-columns", encompasses);
if (encompasses.empty ())
{
properties = scm_cons (scm_acons (ly_symbol2scm ("font-size"), scm_from_int (-6), SCM_EOL),
properties);
- Stencil tm = *Stencil::unsmob (Text_interface::interpret_markup
+ Stencil tm = *unsmob<Stencil> (Text_interface::interpret_markup
(me->layout ()->self_scm (), properties,
annotation));
a.add_at_edge (Y_AXIS, get_grob_direction (me), tm, 1.0);
}
SCM encompass_scm = me->get_object ("encompass-objects");
- if (Grob_array::is_smob (encompass_scm))
+ if (unsmob<Grob_array> (encompass_scm))
{
vector<Grob *> &arr
- = Grob_array::unsmob (encompass_scm)->array_reference ();
+ = unsmob<Grob_array> (encompass_scm)->array_reference ();
arr = new_encompasses;
}
}
{
int start = robust_scm2int (start_scm, 0);
int end = robust_scm2int (end_scm, 0);
- Grob *script = Grob::unsmob (grob);
- Grob *slur = Grob::unsmob (script->get_object ("slur"));
+ Grob *script = unsmob<Grob> (grob);
+ Grob *slur = unsmob<Grob> (script->get_object ("slur"));
if (!slur)
return offset_scm;
SCM
Slur::outside_slur_callback (SCM grob, SCM offset_scm)
{
- Grob *script = Grob::unsmob (grob);
- Grob *slur = Grob::unsmob (script->get_object ("slur"));
+ Grob *script = unsmob<Grob> (grob);
+ Grob *slur = unsmob<Grob> (script->get_object ("slur"));
if (!slur)
return offset_scm;
SCM
Slur::vertical_skylines (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
vector<Box> boxes;
if (!me)
if (to_boolean (previous))
return previous;
- Grob *me = Grob::unsmob (smob);
- Grob *slur = Grob::unsmob (me->get_object ("slur"));
+ Grob *me = unsmob<Grob> (smob);
+ Grob *slur = unsmob<Grob> (me->get_object ("slur"));
if (!slur)
return SCM_BOOL_F;
SCM
Slur::calc_cross_staff (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "note-columns", cols);
extract_grob_set (me, "encompass-objects", extras);
s = scm_cdr (s))
{
if (scm_is_pair (scm_car (s))
- && Grob::unsmob (scm_cdar (s)) == next_col
- && Spring::is_smob (scm_caar (s)))
- spring = Spring::unsmob (scm_caar (s));
+ && unsmob<Grob> (scm_cdar (s)) == next_col
+ && unsmob<Spring> (scm_caar (s)))
+ spring = unsmob<Spring> (scm_caar (s));
}
if (!spring)
if (Paper_column::is_breakable (l) && Paper_column::is_breakable (r))
{
- Moment *dt = Moment::unsmob (l->get_property ("measure-length"));
+ Moment *dt = unsmob<Moment> (l->get_property ("measure-length"));
Moment mlen (1);
if (dt)
mlen = *dt;
do
{
- if (Moment *len = Moment::unsmob (cols[col_idx]->get_property ("measure-length")))
+ if (Moment *len = unsmob<Moment> (cols[col_idx]->get_property ("measure-length")))
{
return len;
}
Moment shortest_playing_len = 0;
SCM s = lc->get_property ("shortest-playing-duration");
- if (Moment::is_smob (s))
- shortest_playing_len = *Moment::unsmob (s);
+ if (unsmob<Moment> (s))
+ shortest_playing_len = *unsmob<Moment> (s);
if (! shortest_playing_len.to_bool ())
{
}
else if (delta_t.grace_part_)
{
- Grob *grace_spacing = Grob::unsmob (lc->get_object ("grace-spacing"));
+ Grob *grace_spacing = unsmob<Grob> (lc->get_object ("grace-spacing"));
if (grace_spacing)
{
Spacing_options grace_opts;
*/
- Item *r_neighbor = Item::unsmob (col->get_object ("right-neighbor"));
- Item *l_neighbor = Item::unsmob (col->get_object ("left-neighbor"));
+ Item *r_neighbor = unsmob<Item> (col->get_object ("right-neighbor"));
+ Item *l_neighbor = unsmob<Item> (col->get_object ("left-neighbor"));
if (!l_neighbor || !r_neighbor)
return false;
if (loose)
{
- Grob *right_neighbor = Grob::unsmob (c->get_object ("right-neighbor"));
- Grob *left_neighbor = Grob::unsmob (c->get_object ("left-neighbor"));
+ Grob *right_neighbor = unsmob<Grob> (c->get_object ("right-neighbor"));
+ Grob *left_neighbor = unsmob<Grob> (c->get_object ("left-neighbor"));
/*
Either object can be non existent, if the score ends
min_right_rank = right_rank;
}
- Grob *old_left_neighbor = Grob::unsmob (right_col->get_object ("left-neighbor"));
+ Grob *old_left_neighbor = unsmob<Grob> (right_col->get_object ("left-neighbor"));
if (!old_left_neighbor || left_rank > Paper_column::get_rank (old_left_neighbor))
right_col->set_object ("left-neighbor", left_col->self_scm ());
}
if (!Paper_column::is_breakable (it) && !Paper_column::is_musical (it))
continue;
- if (i && !Grob::is_smob (cols[i]->get_object ("left-neighbor")))
+ if (i && !unsmob<Grob> (cols[i]->get_object ("left-neighbor")))
cols[i]->set_object ("left-neighbor", cols[i - 1]->self_scm ());
- if (i + 1 < cols.size () && !Grob::is_smob (cols[i]->get_object ("right-neighbor")))
+ if (i + 1 < cols.size () && !unsmob<Grob> (cols[i]->get_object ("right-neighbor")))
cols[i]->set_object ("right-neighbor", cols[i + 1]->self_scm ());
}
}
spacing_ = make_spanner ("SpacingSpanner", SCM_EOL);
spacing_->set_bound (LEFT,
- Grob::unsmob (get_property ("currentCommandColumn")));
+ unsmob<Grob> (get_property ("currentCommandColumn")));
}
void
{
if (spacing_)
{
- Grob *p = Grob::unsmob (get_property ("currentCommandColumn"));
+ Grob *p = unsmob<Grob> (get_property ("currentCommandColumn"));
spacing_->set_bound (RIGHT, p);
spacing_ = 0;
Spacing_engraver::stop_translation_timestep ()
{
Paper_column *musical_column
- = derived_unsmob<Paper_column> (get_property ("currentMusicalColumn"));
+ = unsmob<Paper_column> (get_property ("currentMusicalColumn"));
if (!spacing_)
start_spanner ();
musical_column->set_object ("spacing", spacing_->self_scm ());
- Grob::unsmob (get_property ("currentCommandColumn"))
+ unsmob<Grob> (get_property ("currentCommandColumn"))
->set_object ("spacing", spacing_->self_scm ());
SCM proportional = get_property ("proportionalNotationDuration");
- if (Moment::is_smob (proportional))
+ if (unsmob<Moment> (proportional))
{
musical_column->set_property ("shortest-playing-duration", proportional);
musical_column->set_property ("shortest-starter-duration", proportional);
if (g && Separation_item::has_interface (g) && g->get_column () == columns[d])
{
SCM sky_scm = g->get_property ("horizontal-skylines");
- Skyline_pair *sky = Skyline_pair::unsmob (sky_scm);
+ Skyline_pair *sky = unsmob<Skyline_pair> (sky_scm);
extract_grob_set (g, "elements", elts);
Grob *ycommon = common_refpoint_of_array (elts, g, Y_AXIS);
if (!me->is_live ())
return 0;
- Grob_array *a = Grob_array::unsmob (me->get_object ("right-items"));
+ Grob_array *a = unsmob<Grob_array> (me->get_object ("right-items"));
Item *mincol = 0;
int min_rank = INT_MAX;
for (vsize i = 0; a && i < a->size (); i++)
if (!loose->get_system ())
break;
- Paper_column *le = derived_unsmob<Paper_column> (scm_car (between));
- Paper_column *re = derived_unsmob<Paper_column> (scm_cdr (between));
+ Paper_column *le = unsmob<Paper_column> (scm_car (between));
+ Paper_column *re = unsmob<Paper_column> (scm_cdr (between));
if (! (le && re))
break;
Paper_column *loose_col = dynamic_cast<Paper_column *> (clique[j]);
Paper_column *next_col = dynamic_cast<Paper_column *> (clique[j + 1]);
- Grob *spacing = Grob::unsmob (clique_col->get_object ("spacing"));
- if (Grob *grace_spacing = Grob::unsmob (clique_col->get_object ("grace-spacing")))
+ Grob *spacing = unsmob<Grob> (clique_col->get_object ("spacing"));
+ if (Grob *grace_spacing = unsmob<Grob> (clique_col->get_object ("grace-spacing")))
{
spacing = grace_spacing;
}
SCM
Spacing_spanner::set_springs (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
/*
can't use get_system () ? --hwn.
SCM
Spacing_spanner::calc_common_shortest_duration (SCM grob)
{
- Spanner *me = Spanner::unsmob (grob);
+ Spanner *me = unsmob<Spanner> (grob);
vector<Grob *> cols (get_columns (me));
{
if (Paper_column::is_musical (cols[i]))
{
- Moment *when = Moment::unsmob (cols[i]->get_property ("when"));
+ Moment *when = unsmob<Moment> (cols[i]->get_property ("when"));
/*
ignore grace notes for shortest notes.
continue;
SCM st = cols[i]->get_property ("shortest-starter-duration");
- Moment this_shortest = *Moment::unsmob (st);
+ Moment this_shortest = *unsmob<Moment> (st);
assert (this_shortest.to_bool ());
shortest_in_measure = min (shortest_in_measure, this_shortest.main_part_);
}
SCM bsd = me->get_property ("base-shortest-duration");
Rational d = Rational (1, 8);
- if (Moment *m = Moment::unsmob (bsd))
+ if (Moment *m = unsmob<Moment> (bsd))
d = m->main_part_;
if (max_idx != VPOS)
if (Separation_item::is_empty (r) && (!rb || Separation_item::is_empty (rb)))
continue;
- Skyline_pair *skys = Skyline_pair::unsmob (r->get_property ("horizontal-skylines"));
+ Skyline_pair *skys = unsmob<Skyline_pair> (r->get_property ("horizontal-skylines"));
overhangs[i] = skys ? (*skys)[RIGHT].max_height () : 0.0;
if (0 == i) continue;
if (found_matching_column && Note_spacing::has_interface (wish))
{
Real inc = options->increment_;
- Grob *gsp = Grob::unsmob (left_col->get_object ("grace-spacing"));
+ Grob *gsp = unsmob<Grob> (left_col->get_object ("grace-spacing"));
if (gsp && Paper_column::when_mom (left_col).grace_part_)
{
Spacing_options grace_opts;
Moment dt
= Paper_column::when_mom (next) - Paper_column::when_mom (col);
- Moment *len = Moment::unsmob (left->get_property ("measure-length"));
+ Moment *len = unsmob<Moment> (left->get_property ("measure-length"));
if (!len)
return false;
programming_error ("At least one vertical axis group needs to be created in the first time step.");
return;
}
- Grob *vertical_alignment = Grob::get_root_vertical_alignment (Grob::unsmob (scm_caar (axis_groups_)));
+ Grob *vertical_alignment = Grob::get_root_vertical_alignment (unsmob<Grob> (scm_caar (axis_groups_)));
if (!vertical_alignment) // we are at the beginning of a score, so no need for stubs
return;
vector<bool> keep_extent;
for (SCM s = axis_groups_; scm_is_pair (s); s = scm_cdr (s))
{
- Context *c = Context::unsmob (scm_cdar (s));
- Grob *g = Grob::unsmob (scm_caar (s));
+ Context *c = unsmob<Context> (scm_cdar (s));
+ Grob *g = unsmob<Grob> (scm_caar (s));
if (!c || !g)
continue;
if (c->is_removable ())
SCM axis_groups = SCM_EOL;
for (SCM s = axis_groups_; scm_is_pair (s); s = scm_cdr (s))
{
- Context *c = Context::unsmob (scm_cdar (s));
- Grob *g = Grob::unsmob (scm_caar (s));
+ Context *c = unsmob<Context> (scm_cdar (s));
+ Grob *g = unsmob<Grob> (scm_caar (s));
if (!c || !g)
continue;
if (c->is_removable ())
{
LY_ASSERT_SMOB (Spanner, spanner, 1);
LY_ASSERT_TYPE (is_direction, dir, 2);
- Item *bound = Spanner::unsmob (spanner)->get_bound (to_dir (dir));
+ Item *bound = unsmob<Spanner> (spanner)->get_bound (to_dir (dir));
return bound ? bound->self_scm () : SCM_EOL;
}
LY_ASSERT_TYPE (is_direction, dir, 2);
LY_ASSERT_SMOB (Item, item, 3);
- Spanner::unsmob (spanner)->set_bound (to_dir (dir), Item::unsmob (item));
+ unsmob<Spanner> (spanner)->set_bound (to_dir (dir), unsmob<Item> (item));
return SCM_UNSPECIFIED;
}
1, 0, 0, (SCM spanner),
"Return broken-into list for @var{spanner}.")
{
- LY_ASSERT_TYPE (Spanner::unsmob, spanner, 1);
- Spanner *me = Spanner::unsmob (spanner);
+ LY_ASSERT_TYPE (unsmob<Spanner>, spanner, 1);
+ Spanner *me = unsmob<Spanner> (spanner);
SCM s = SCM_EOL;
for (vsize i = me->broken_intos_.size (); i--;)
1, 0, 0, (SCM g),
"Is @var{g} a spanner object?")
{
- Grob *me = Grob::unsmob (g);
+ Grob *me = unsmob<Grob> (g);
bool b = dynamic_cast<Spanner *> (me);
return ly_bool2scm (b);
SCM
Spanner::set_spacing_rods (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
SCM num_length = me->get_property ("minimum-length");
SCM broken_length = me->get_property ("minimum-length-after-break");
if (scm_is_number (num_length)
SCM
Spanner::calc_normalized_endpoints (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
SCM result = SCM_EOL;
Spanner *orig = dynamic_cast<Spanner *> (me->original ());
SCM
Spanner::bounds_width (SCM grob)
{
- Spanner *me = Spanner::unsmob (grob);
+ Spanner *me = unsmob<Spanner> (grob);
Grob *common = me->get_bound (LEFT)->common_refpoint (me->get_bound (RIGHT), X_AXIS);
SCM
Spanner::kill_zero_spanned_time (SCM grob)
{
- Spanner *me = Spanner::unsmob (grob);
+ Spanner *me = unsmob<Spanner> (grob);
/*
Remove the line or hairpin at the start of the line. For
piano voice indicators, it makes no sense to have them at
LY_ASSERT_SMOB (Spring, spring, 1);
LY_ASSERT_TYPE (scm_is_number, strength, 2);
- Spring *s = Spring::unsmob (spring);
+ Spring *s = unsmob<Spring> (spring);
s->set_inverse_compress_strength (scm_to_double (strength));
return s->smobbed_copy ();
}
LY_ASSERT_SMOB (Spring, spring, 1);
LY_ASSERT_TYPE (scm_is_number, strength, 2);
- Spring *s = Spring::unsmob (spring);
+ Spring *s = unsmob<Spring> (spring);
s->set_inverse_stretch_strength (scm_to_double (strength));
return s->smobbed_copy ();
}
if (Page_layout_problem::is_spaceable (*i)
&& ((pure && !Hara_kiri_group_spanner::request_suicide (*i, start, end))
|| (!pure && (*i)->is_live ())))
- return me == Grob::unsmob ((*i)->get_object ("staff-grouper"));
+ return me == unsmob<Grob> ((*i)->get_object ("staff-grouper"));
// If there was no spaceable, living child after me, I don't
// count as within the group.
{
span_ = make_spanner ("StaffSymbol", SCM_EOL);
span_->set_bound (LEFT,
- Grob::unsmob (get_property ("currentCommandColumn")));
+ unsmob<Grob> (get_property ("currentCommandColumn")));
}
}
return;
if (!finished_span_->get_bound (RIGHT))
- finished_span_->set_bound (RIGHT, Grob::unsmob (get_property ("currentCommandColumn")));
+ finished_span_->set_bound (RIGHT, unsmob<Grob> (get_property ("currentCommandColumn")));
announce_end_grob (finished_span_,
span_events_[STOP]
"Return the Y-position of @var{sg} relative to the staff.")
{
LY_ASSERT_SMOB (Grob, sg, 1);
- Grob *g = Grob::unsmob (sg);
+ Grob *g = unsmob<Grob> (sg);
Real pos = Staff_symbol_referencer::get_position (g);
if (fabs (rint (pos) - pos) < 1e-6) // ugh.
{
LY_ASSERT_SMOB (Grob, sg, 1);
LY_ASSERT_TYPE (scm_is_number, spos, 2);
- Grob *g = Grob::unsmob (sg);
+ Grob *g = unsmob<Grob> (sg);
Grob *st = Staff_symbol_referencer::get_staff_symbol (g);
int pos = scm_to_int (spos);
bool on_line = st ? Staff_symbol::on_line (g, pos) : false;
" current staff-space height.")
{
LY_ASSERT_SMOB (Grob, grob, 1);
- Grob *g = Grob::unsmob (grob);
+ Grob *g = unsmob<Grob> (grob);
Real thickness = Staff_symbol_referencer::line_thickness (g);
return scm_from_double (thickness);
}
" five-line staff.")
{
LY_ASSERT_SMOB (Grob, grob, 1);
- Grob *g = Grob::unsmob (grob);
+ Grob *g = unsmob<Grob> (grob);
Real staff_space = Staff_symbol_referencer::staff_space (g);
return scm_from_double (staff_space);
}
" @var{grob}.")
{
LY_ASSERT_SMOB (Grob, grob, 1);
- Grob *g = Grob::unsmob (grob);
+ Grob *g = unsmob<Grob> (grob);
Real staff_radius = Staff_symbol_referencer::staff_radius (g);
return scm_from_double (staff_radius);
}
return me;
SCM st = me->get_object ("staff-symbol");
- return Grob::unsmob (st);
+ return unsmob<Grob> (st);
}
Real
SCM
Staff_symbol_referencer::callback (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
SCM pos = me->get_property ("staff-position");
Real off = 0.0;
SCM
Staff_symbol::print (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Spanner *sp = dynamic_cast<Spanner *> (me);
Grob *common
= sp->get_bound (LEFT)->common_refpoint (sp->get_bound (RIGHT), X_AXIS);
SCM
Staff_symbol::height (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real t = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
t *= robust_scm2double (me->get_property ("thickness"), 1.0);
for a note head is always <= 2.
*/
Stream_event *ev = gi.event_cause ();
- Duration *dur = Duration::unsmob (ev->get_property ("duration"));
+ Duration *dur = unsmob<Duration> (ev->get_property ("duration"));
int tremolo_flags = intlog2 (requested_type) - 2
- (dur->duration_log () > 2 ? dur->duration_log () - 2 : 0);
Stream_event *cause = gi.event_cause ();
if (!cause)
return;
- Duration *d = Duration::unsmob (cause->get_property ("duration"));
+ Duration *d = unsmob<Duration> (cause->get_property ("duration"));
if (!d)
return;
Stem_engraver::kill_unused_flags ()
{
for (vsize i = 0; i < maybe_flags_.size (); i++)
- if (Grob::is_smob (maybe_flags_[i]->get_parent (X_AXIS)->get_object ("beam")))
+ if (unsmob<Grob> (maybe_flags_[i]->get_parent (X_AXIS)->get_object ("beam")))
maybe_flags_[i]->suicide ();
}
SCM
Stem_tremolo::calc_slope (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
- Grob *stem = Grob::unsmob (me->get_object ("stem"));
+ Grob *me = unsmob<Grob> (smob);
+ Grob *stem = unsmob<Grob> (me->get_object ("stem"));
Spanner *beam = Stem::get_beam (stem);
SCM style = me->get_property ("style");
SCM
Stem_tremolo::calc_width (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
- Grob *stem = Grob::unsmob (me->get_object ("stem"));
+ Grob *me = unsmob<Grob> (smob);
+ Grob *stem = unsmob<Grob> (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
Stem_tremolo::calc_shape (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
- Grob *stem = Grob::unsmob (me->get_object ("stem"));
+ Grob *me = unsmob<Grob> (smob);
+ Grob *stem = unsmob<Grob> (me->get_object ("stem"));
Direction dir = get_grob_direction (me);
bool beam = Stem::get_beam (stem);
bool flag = Stem::duration_log (stem) >= 3 && !beam;
Real
Stem_tremolo::get_beam_translation (Grob *me)
{
- Grob *stem = Grob::unsmob (me->get_object ("stem"));
+ Grob *stem = unsmob<Grob> (me->get_object ("stem"));
Spanner *beam = Stem::get_beam (stem);
return (beam && beam->is_live ())
SCM
Stem_tremolo::pure_height (SCM smob, SCM, SCM)
{
- Item *me = Item::unsmob (smob);
+ Item *me = unsmob<Item> (smob);
/*
Cannot use the real slope, since it looks at the Beam.
*/
Stencil s1 (untranslated_stencil (me, 0.35));
- Item *stem = Item::unsmob (me->get_object ("stem"));
+ Item *stem = unsmob<Item> (me->get_object ("stem"));
if (!stem)
return ly_interval2scm (s1.extent (Y_AXIS));
SCM
Stem_tremolo::width (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
/*
Cannot use the real slope, since it looks at the Beam.
Stencil
Stem_tremolo::untranslated_stencil (Grob *me, Real slope)
{
- Grob *stem = Grob::unsmob (me->get_object ("stem"));
+ Grob *stem = unsmob<Grob> (me->get_object ("stem"));
if (!stem)
{
programming_error ("no stem for stem-tremolo");
SCM
Stem_tremolo::calc_y_offset (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return scm_from_double (y_offset (me, false));
}
SCM, /* start */
SCM /* end */)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return scm_from_double (y_offset (me, true));
}
SCM
Stem_tremolo::calc_direction (SCM smob)
{
- Item *me = Item::unsmob (smob);
+ Item *me = unsmob<Item> (smob);
- Item *stem = Item::unsmob (me->get_object ("stem"));
+ Item *stem = unsmob<Item> (me->get_object ("stem"));
if (!stem)
return scm_from_int (CENTER);
Real
Stem_tremolo::y_offset (Grob *me, bool pure)
{
- Item *stem = Item::unsmob (me->get_object ("stem"));
+ Item *stem = unsmob<Item> (me->get_object ("stem"));
if (!stem)
return 0.0;
SCM
Stem_tremolo::print (SCM grob)
{
- Grob *me = Grob::unsmob (grob);
+ Grob *me = unsmob<Grob> (grob);
Stencil s = untranslated_stencil (me, robust_scm2double (me->get_property ("slope"), 0.25));
return s.smobbed_copy ();
// todo: margins
Direction d = get_grob_direction (me);
- Grob *beam = Grob::unsmob (me->get_object ("beam"));
+ Grob *beam = unsmob<Grob> (me->get_object ("beam"));
if (d && d * head_positions (me)[get_grob_direction (me)] >= se * d)
me->warning (_ ("weird stem size, check for narrow beams"));
SCM /* start */,
SCM /* end */)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return ly_interval2scm (internal_pure_height (me, true));
}
if (!is_normal_stem (me))
return Interval (0.0, 0.0);
- Grob *beam = Grob::unsmob (me->get_object ("beam"));
+ Grob *beam = unsmob<Grob> (me->get_object ("beam"));
Interval iv = internal_height (me, false);
SCM
Stem::calc_stem_end_position (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return scm_from_double (internal_calc_stem_end_position (me, true));
}
SCM, /* start */
SCM /* end */)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return scm_from_double (internal_calc_stem_end_position (me, false));
}
length *= robust_scm2double (me->get_property ("length-fraction"), 1.0);
/* Tremolo stuff. */
- Grob *t_flag = Grob::unsmob (me->get_object ("tremolo-flag"));
- if (t_flag && (!Grob::is_smob (me->get_object ("beam")) || !calc_beam))
+ Grob *t_flag = unsmob<Grob> (me->get_object ("tremolo-flag"));
+ if (t_flag && (!unsmob<Grob> (me->get_object ("beam")) || !calc_beam))
{
/* Crude hack: add extra space if tremolo flag is there.
SCM
Stem::calc_positioning_done (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
if (!head_count (me))
return SCM_BOOL_T;
SCM
Stem::calc_direction (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Direction dir = CENTER;
- if (Grob *beam = Grob::unsmob (me->get_object ("beam")))
+ if (Grob *beam = unsmob<Grob> (me->get_object ("beam")))
{
SCM ignore_me = beam->get_property ("direction");
(void) ignore_me;
SCM
Stem::calc_default_direction (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Direction dir = CENTER;
int staff_center = 0;
SCM
Stem::height (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return ly_interval2scm (internal_height (me, true));
}
Real
Stem::beam_end_corrective (Grob *me)
{
- Grob *beam = Grob::unsmob (me->get_object ("beam"));
+ Grob *beam = unsmob<Grob> (me->get_object ("beam"));
Direction dir = get_grob_direction (me);
if (beam)
{
If there is a beam but no stem, slope calculations depend on this
routine to return where the stem end /would/ be.
*/
- if (calc_beam && !beam && !Stencil::is_smob (me->get_property ("stencil")))
+ if (calc_beam && !beam && !unsmob<Stencil> (me->get_property ("stencil")))
return Interval ();
Real y1 = robust_scm2double ((calc_beam
SCM
Stem::width (SCM e)
{
- Grob *me = Grob::unsmob (e);
+ Grob *me = unsmob<Grob> (e);
Interval r;
SCM
Stem::calc_stem_begin_position (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return scm_from_double (internal_calc_stem_begin_position (me, true));
}
SCM, /* start */
SCM /* end */)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return scm_from_double (internal_calc_stem_begin_position (me, false));
}
SCM
Stem::pure_calc_length (SCM smob, SCM /*start*/, SCM /*end*/)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real beg = robust_scm2double (me->get_pure_property ("stem-begin-position", 0, INT_MAX), 0.0);
Real res = fabs (internal_calc_stem_end_position (me, false) - beg);
return scm_from_double (res);
SCM
Stem::calc_length (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
- if (Grob::is_smob (me->get_object ("beam")))
+ Grob *me = unsmob<Grob> (smob);
+ if (unsmob<Grob> (me->get_object ("beam")))
{
me->programming_error ("ly:stem::calc-length called but will not be used for beamed stem.");
return scm_from_double (0.0);
if (!me)
return false;
Grob *lh = get_reference_head (me);
- Grob *beam = Grob::unsmob (me->get_object ("beam"));
+ Grob *beam = unsmob<Grob> (me->get_object ("beam"));
if (!lh && !beam)
return false;
SCM
Stem::print (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
if (!is_valid_stem (me))
return SCM_EOL;
SCM
Stem::offset_callback (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "rests", rests);
if (rests.size ())
Stem::get_beam (Grob *me)
{
SCM b = me->get_object ("beam");
- return Spanner::unsmob (b);
+ return unsmob<Spanner> (b);
}
Stem_info
SCM
Stem::calc_stem_info (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Direction my_dir = get_grob_direction (me);
if (!my_dir)
: 0.0);
Real height_of_my_trem = 0.0;
- Grob *trem = Grob::unsmob (me->get_object ("tremolo-flag"));
+ Grob *trem = unsmob<Grob> (me->get_object ("tremolo-flag"));
if (trem)
{
height_of_my_trem
bool
Stem::is_cross_staff (Grob *stem)
{
- Grob *beam = Grob::unsmob (stem->get_object ("beam"));
+ Grob *beam = unsmob<Grob> (stem->get_object ("beam"));
return beam && Beam::is_cross_staff (beam);
}
SCM
Stem::calc_cross_staff (SCM smob)
{
- return scm_from_bool (is_cross_staff (Grob::unsmob (smob)));
+ return scm_from_bool (is_cross_staff (unsmob<Grob> (smob)));
}
Grob *
Stem::flag (Grob *me)
{
- return Grob::unsmob (me->get_object ("flag"));
+ return unsmob<Grob> (me->get_object ("flag"));
}
/* FIXME: Too many properties */
make_named_glyph_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
{
SCM fm_scm = scm_car (expr);
- Font_metric *fm = Font_metric::unsmob (fm_scm);
+ Font_metric *fm = unsmob<Font_metric> (fm_scm);
expr = scm_cdr (expr);
SCM glyph = scm_car (expr);
string glyph_s = ly_scm2string (glyph);
make_glyph_string_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
{
SCM fm_scm = scm_car (expr);
- Font_metric *fm = Font_metric::unsmob (fm_scm);
+ Font_metric *fm = unsmob<Font_metric> (fm_scm);
expr = scm_cdr (expr);
expr = scm_cdr (expr); // font-name
expr = scm_cdr (expr); // size
SCM
Grob::pure_simple_vertical_skylines_from_extents (SCM smob, SCM begscm, SCM endscm)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
int beg = robust_scm2int (begscm, 0);
int end = robust_scm2int (endscm, INT_MAX);
// We cannot measure the widths before line breaking,
SCM
Grob::simple_vertical_skylines_from_extents (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return maybe_pure_internal_simple_skylines_from_extents (me, X_AXIS, false, 0, 0, false, false);
}
SCM
Grob::pure_simple_horizontal_skylines_from_extents (SCM smob, SCM begscm, SCM endscm)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
int beg = robust_scm2int (begscm, 0);
int end = robust_scm2int (endscm, INT_MAX);
// If the grob is cross staff, we cannot measure its Y-extent before
SCM
Grob::simple_horizontal_skylines_from_extents (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
// See comment in function above.
return maybe_pure_internal_simple_skylines_from_extents (me, Y_AXIS, false, 0, 0, false, to_boolean (me->get_property ("cross-staff")));
}
SCM
Stencil::skylines_from_stencil (SCM sten, Real pad, Axis a)
{
- Stencil *s = Stencil::unsmob (sten);
+ Stencil *s = unsmob<Stencil> (sten);
if (!s)
return Skyline_pair ().smobbed_copy ();
SCM
Grob::vertical_skylines_from_stencil (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real pad = robust_scm2double (me->get_property ("skyline-horizontal-padding"), 0.0);
SCM out = Stencil::skylines_from_stencil (me->get_property ("stencil"), pad, X_AXIS);
SCM
Grob::horizontal_skylines_from_stencil (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Real pad = robust_scm2double (me->get_property ("skyline-vertical-padding"), 0.0);
SCM out = Stencil::skylines_from_stencil (me->get_property ("stencil"), pad, Y_AXIS);
Skyline_pair res;
for (vsize i = 0; i < elts.size (); i++)
{
- Skyline_pair *skyp = Skyline_pair::unsmob (elts[i]->get_maybe_pure_property (a == X_AXIS ? "vertical-skylines" : "horizontal-skylines", pure, beg, end));
+ Skyline_pair *skyp = unsmob<Skyline_pair> (elts[i]->get_maybe_pure_property (a == X_AXIS ? "vertical-skylines" : "horizontal-skylines", pure, beg, end));
if (skyp)
{
/*
SCM
Grob::vertical_skylines_from_element_stencils (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return internal_skylines_from_element_stencils (me, X_AXIS, false, 0, INT_MAX);
}
SCM
Grob::horizontal_skylines_from_element_stencils (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
return internal_skylines_from_element_stencils (me, Y_AXIS, false, 0, INT_MAX);
}
SCM
Grob::pure_vertical_skylines_from_element_stencils (SCM smob, SCM beg_scm, SCM end_scm)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
int beg = robust_scm2int (beg_scm, 0);
int end = robust_scm2int (end_scm, 0);
return internal_skylines_from_element_stencils (me, X_AXIS, true, beg, end);
SCM
Grob::pure_horizontal_skylines_from_element_stencils (SCM smob, SCM beg_scm, SCM end_scm)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
int beg = robust_scm2int (beg_scm, 0);
int end = robust_scm2int (end_scm, 0);
return internal_skylines_from_element_stencils (me, Y_AXIS, true, beg, end);
"Return a copy of @var{stil} but translated by @var{amount}"
" in @var{axis} direction.")
{
- Stencil *s = Stencil::unsmob (stil);
+ Stencil *s = unsmob<Stencil> (stil);
LY_ASSERT_SMOB (Stencil, stil, 1);
LY_ASSERT_TYPE (scm_is_number, amount, 2);
SCM new_s = s->smobbed_copy ();
scm_remember_upto_here_1 (stil);
- Stencil *q = Stencil::unsmob (new_s);
+ Stencil *q = unsmob<Stencil> (new_s);
q->translate_axis (real_amount, Axis (scm_to_int (axis)));
return new_s;
}
"Return a @var{stil}, but translated by @var{offset}"
" (a pair of numbers).")
{
- Stencil *s = Stencil::unsmob (stil);
+ Stencil *s = unsmob<Stencil> (stil);
LY_ASSERT_SMOB (Stencil, stil, 1);
LY_ASSERT_TYPE (is_number_pair, offset, 2);
Offset o = ly_scm2offset (offset);
SCM new_s = s->smobbed_copy ();
scm_remember_upto_here_1 (stil);
- Stencil *q = Stencil::unsmob (new_s);
+ Stencil *q = unsmob<Stencil> (new_s);
q->translate (o);
return new_s;
}
1, 0, 0, (SCM stil),
"Return the expression of @var{stil}.")
{
- Stencil *s = Stencil::unsmob (stil);
+ Stencil *s = unsmob<Stencil> (stil);
LY_ASSERT_SMOB (Stencil, stil, 1);
return s->expr ();
}
" @var{axis} direction (@code{0} or @code{1} for x and"
" y@tie{}axis, respectively).")
{
- Stencil *s = Stencil::unsmob (stil);
+ Stencil *s = unsmob<Stencil> (stil);
LY_ASSERT_SMOB (Stencil, stil, 1);
LY_ASSERT_TYPE (is_axis, axis, 2);
" @var{axis} is supplied, the emptiness check is"
" restricted to that axis.")
{
- Stencil *s = Stencil::unsmob (stil);
+ Stencil *s = unsmob<Stencil> (stil);
LY_ASSERT_SMOB (Stencil, stil, 1);
if (SCM_UNBNDP (axis))
return scm_from_bool (s->is_empty ());
" space. @var{first} and @var{second} may also be @code{'()} or"
" @code{#f}.")
{
- Stencil *s1 = Stencil::unsmob (first);
- Stencil *s2 = Stencil::unsmob (second);
+ Stencil *s1 = unsmob<Stencil> (first);
+ Stencil *s2 = unsmob<Stencil> (second);
Stencil result;
SCM_ASSERT_TYPE (s1 || scm_is_false (first) || scm_is_null (first),
" apart at least by this distance. If either of the stencils"
" is spacing, @var{padding} and @var{mindist} do not apply.")
{
- Stencil *s1 = Stencil::unsmob (first);
- Stencil *s2 = Stencil::unsmob (second);
+ Stencil *s1 = unsmob<Stencil> (first);
+ Stencil *s2 = unsmob<Stencil> (second);
Stencil result;
SCM_ASSERT_TYPE (s1 || scm_is_false (first) || scm_is_null (first),
while (!SCM_NULLP (args))
{
- Stencil *s = Stencil::unsmob (scm_car (args));
+ Stencil *s = unsmob<Stencil> (scm_car (args));
if (!s)
SCM_ASSERT_TYPE (s, scm_car (args), SCM_ARGn, __FUNCTION__, "Stencil");
LY_ASSERT_TYPE (is_axis, axis, 2);
LY_ASSERT_TYPE (scm_is_number, dir, 3);
- Stencil target = *Stencil::unsmob (stil);
+ Stencil target = *unsmob<Stencil> (stil);
target.align_to ((Axis)scm_to_int (axis),
scm_to_double (dir));
" in@tie{}@var{s}.")
{
LY_ASSERT_SMOB (Stencil, s, 1);
- Stencil *stil = Stencil::unsmob (s);
+ Stencil *stil = unsmob<Stencil> (s);
return find_expression_fonts (stil->expr ());
}
"Put @var{stc} in a different color.")
{
LY_ASSERT_SMOB (Stencil, stc, 1);
- Stencil *stil = Stencil::unsmob (stc);
+ Stencil *stil = unsmob<Stencil> (stc);
return Stencil (stil->extent_box (),
scm_list_3 (ly_symbol2scm ("color"),
scm_list_3 (r, g, b),
" the relative offset (@var{x}, @var{y}). E.g., an offset of"
" (-1, 1) will rotate the stencil around the left upper corner.")
{
- Stencil *s = Stencil::unsmob (stil);
+ Stencil *s = unsmob<Stencil> (stil);
LY_ASSERT_SMOB (Stencil, stil, 1);
LY_ASSERT_TYPE (scm_is_number, angle, 2);
LY_ASSERT_TYPE (scm_is_number, x, 3);
Real y_off = scm_to_double (y);
SCM new_s = s->smobbed_copy ();
- Stencil *q = Stencil::unsmob (new_s);
+ Stencil *q = unsmob<Stencil> (new_s);
q->rotate_degrees (a, Offset (x_off, y_off));
return new_s;
}
"Return a stencil @var{stil} rotated @var{angle} degrees around"
" point (@var{x}, @var{y}), given in absolute coordinates.")
{
- Stencil *s = Stencil::unsmob (stil);
+ Stencil *s = unsmob<Stencil> (stil);
LY_ASSERT_SMOB (Stencil, stil, 1);
LY_ASSERT_TYPE (scm_is_number, angle, 2);
LY_ASSERT_TYPE (scm_is_number, x, 3);
Real y_off = scm_to_double (y);
SCM new_s = s->smobbed_copy ();
- Stencil *q = Stencil::unsmob (new_s);
+ Stencil *q = unsmob<Stencil> (new_s);
q->rotate_degrees_absolute (a, Offset (x_off, y_off));
return new_s;
}
" flip or mirror @var{stil} without changing its origin;"
" this may result in collisions unless it is repositioned.")
{
- Stencil *s = Stencil::unsmob (stil);
+ Stencil *s = unsmob<Stencil> (stil);
LY_ASSERT_SMOB (Stencil, stil, 1);
LY_ASSERT_TYPE (scm_is_number, x, 2);
LY_ASSERT_TYPE (scm_is_number, y, 3);
SCM new_s = s->smobbed_copy ();
- Stencil *q = Stencil::unsmob (new_s);
+ Stencil *q = unsmob<Stencil> (new_s);
q->scale (scm_to_double (x), scm_to_double (y));
return new_s;
1, 0, 0, (SCM obj),
"Is @code{@var{obj}} a @code{Stream_event} object?")
{
- return scm_from_bool (Stream_event::is_smob (obj));
+ return scm_from_bool (unsmob<Stream_event> (obj));
}
LY_DEFINE (ly_make_stream_event, "ly:make-stream-event",
" If @var{sym} is undefined, return @var{val} or"
" @code{'()} if @var{val} is not specified.")
{
- LY_ASSERT_SMOB (Stream_event, sev, 1)
+ LY_ASSERT_SMOB (Stream_event, sev, 1);
return ly_prob_property (sev, sym, val);
}
"Copy @var{m} and all sub expressions of@tie{}@var{m}.")
{
SCM copy = m;
- if (Stream_event *ev = Stream_event::unsmob (m))
+ if (Stream_event *ev = unsmob<Stream_event> (m))
{
ev = ev->clone ();
copy = ev->unprotect ();
Input *
Stream_event::origin () const
{
- Input *i = Input::unsmob (get_property ("origin"));
+ Input *i = unsmob<Input> (get_property ("origin"));
return i ? i : &dummy_input_global;
}
SCM prop = scm_car (entry);
SCM val = scm_cdr (entry);
- if ((Pitch::is_smob (val)
- || (scm_is_eq (prop, ly_symbol2scm ("element")) && Music::is_smob (val))
+ if ((unsmob<Pitch> (val)
+ || (scm_is_eq (prop, ly_symbol2scm ("element")) && unsmob<Music> (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_)))
SCM
Stream_event::dump (SCM self)
{
- Stream_event *ev = Stream_event::unsmob (self);
+ Stream_event *ev = unsmob<Stream_event> (self);
// Reversed alists look prettier.
return scm_cons (scm_reverse (ev->immutable_property_alist_),
scm_reverse (ev->mutable_property_alist_));
SCM
Sustain_pedal::print (SCM smob)
{
- Grob *e = Grob::unsmob (smob);
+ Grob *e = unsmob<Grob> (smob);
Stencil mol;
SCM glyph = e->get_property ("text");
nesting_->from_list (hierarchy);
nesting_->create_grobs (this, delimiter_name);
nesting_->set_bound (LEFT,
- Grob::unsmob (get_property ("currentCommandColumn")));
+ unsmob<Grob> (get_property ("currentCommandColumn")));
}
}
if (nesting_)
{
nesting_->set_bound (RIGHT,
- Grob::unsmob (get_property ("currentCommandColumn")));
+ unsmob<Grob> (get_property ("currentCommandColumn")));
nesting_->set_nesting_support (0);
delete nesting_;
SCM
System_start_delimiter::print (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
extract_grob_set (me, "elements", elts);
Grob *common = common_refpoint_of_array (elts, me, Y_AXIS);
System::init_elements ()
{
SCM scm_arr = Grob_array::make_array ();
- all_elements_ = Grob_array::unsmob (scm_arr);
+ all_elements_ = unsmob<Grob_array> (scm_arr);
all_elements_->set_ordered (false);
set_object ("all-elements", scm_arr);
}
SCM footnote_stl = Text_interface::interpret_markup (pscore_->layout ()->self_scm (),
props, footnote_markup);
- Stencil *footnote_stencil = Stencil::unsmob (footnote_stl);
+ Stencil *footnote_stencil = unsmob<Stencil> (footnote_stl);
out.push_back (footnote_stencil->extent (Y_AXIS).length ());
}
SCM
System::footnotes_before_line_breaking (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
vector<Grob *> footnotes;
SCM grobs_scm = Grob_array::make_array ();
extract_grob_set (me, "all-elements", elts);
if (elts[i]->internal_has_interface (ly_symbol2scm ("footnote-interface")))
footnotes.push_back (elts[i]);
- Grob_array::unsmob (grobs_scm)->set_array (footnotes);
+ unsmob<Grob_array> (grobs_scm)->set_array (footnotes);
return grobs_scm;
}
SCM
System::footnotes_after_line_breaking (SCM smob)
{
- Spanner *sys_span = Spanner::unsmob (smob);
+ Spanner *sys_span = unsmob<Spanner> (smob);
System *sys = dynamic_cast<System *> (sys_span);
Interval_t<int> sri = sys->spanned_rank_interval ();
vector<Grob *> footnote_grobs = sys->get_footnote_grobs_in_range (sri[LEFT], sri[RIGHT]);
vector_sort (footnote_grobs, grob_2D_less);
SCM grobs_scm = Grob_array::make_array ();
- Grob_array::unsmob (grobs_scm)->set_array (footnote_grobs);
+ unsmob<Grob_array> (grobs_scm)->set_array (footnote_grobs);
return grobs_scm;
}
SCM
System::vertical_skyline_elements (SCM smob)
{
- Grob *me_grob = Grob::unsmob (smob);
+ Grob *me_grob = unsmob<Grob> (smob);
vector<Grob *> vertical_skyline_grobs;
extract_grob_set (me_grob, "elements", my_elts);
for (vsize i = 0; i < my_elts.size (); i++)
vertical_skyline_grobs.push_back (my_elts[i]);
System *me = dynamic_cast<System *> (me_grob);
- Grob *align = Grob::unsmob (me->get_object ("vertical-alignment"));
+ Grob *align = unsmob<Grob> (me->get_object ("vertical-alignment"));
if (!align)
{
SCM grobs_scm = Grob_array::make_array ();
- Grob_array::unsmob (grobs_scm)->set_array (vertical_skyline_grobs);
+ unsmob<Grob_array> (grobs_scm)->set_array (vertical_skyline_grobs);
return grobs_scm;
}
vertical_skyline_grobs.push_back (elts[i]);
SCM grobs_scm = Grob_array::make_array ();
- Grob_array::unsmob (grobs_scm)->set_array (vertical_skyline_grobs);
+ unsmob<Grob_array> (grobs_scm)->set_array (vertical_skyline_grobs);
return grobs_scm;
}
System::add_column (Paper_column *p)
{
Grob *me = this;
- Grob_array *ga = Grob_array::unsmob (me->get_object ("columns"));
+ Grob_array *ga = unsmob<Grob_array> (me->get_object ("columns"));
if (!ga)
{
SCM scm_ga = Grob_array::make_array ();
me->set_object ("columns", scm_ga);
- ga = Grob_array::unsmob (scm_ga);
+ ga = unsmob<Grob_array> (scm_ga);
}
p->set_rank (ga->size ());
exprs));
if (debug_skylines)
{
- Skyline_pair *skylines = Skyline_pair::unsmob (get_property ("vertical-skylines"));
+ Skyline_pair *skylines = unsmob<Skyline_pair> (get_property ("vertical-skylines"));
if (skylines)
{
Stencil up
pl->set_property ("last-in-score", SCM_BOOL_T);
Interval staff_refpoints;
- if (Grob *align = Grob::unsmob (get_object ("vertical-alignment")))
+ if (Grob *align = unsmob<Grob> (get_object ("vertical-alignment")))
{
extract_grob_set (align, "elements", staves);
for (vsize i = 0; i < staves.size (); i++)
SCM
System::get_vertical_alignment (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "elements", elts);
Grob *ret = 0;
for (vsize i = 0; i < elts.size (); i++)
Grob *
System::get_extremal_staff (Direction dir, Interval const &iv)
{
- Grob *align = Grob::unsmob (get_object ("vertical-alignment"));
+ Grob *align = unsmob<Grob> (get_object ("vertical-alignment"));
if (!align)
return 0;
Grob *
System::get_neighboring_staff (Direction dir, Grob *vertical_axis_group, Interval_t<int> bounds)
{
- Grob *align = Grob::unsmob (get_object ("vertical-alignment"));
+ Grob *align = unsmob<Grob> (get_object ("vertical-alignment"));
if (!align)
return 0;
System::pure_refpoint_extent (vsize start, vsize end)
{
Interval ret;
- Grob *alignment = Grob::unsmob (get_object ("vertical-alignment"));
+ Grob *alignment = unsmob<Grob> (get_object ("vertical-alignment"));
if (!alignment)
return Interval ();
Interval
System::part_of_line_pure_height (vsize start, vsize end, bool begin)
{
- Grob *alignment = Grob::unsmob (get_object ("vertical-alignment"));
+ Grob *alignment = unsmob<Grob> (get_object ("vertical-alignment"));
if (!alignment)
return Interval ();
SCM
System::calc_pure_relevant_grobs (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "elements", elts);
vector<Grob *> relevant_grobs;
SCM grobs_scm = Grob_array::make_array ();
- Grob_array::unsmob (grobs_scm)->set_array (relevant_grobs);
+ unsmob<Grob_array> (grobs_scm)->set_array (relevant_grobs);
return grobs_scm;
}
SCM
System::calc_pure_height (SCM smob, SCM start_scm, SCM end_scm)
{
- System *me = derived_unsmob<System> (smob);
+ System *me = unsmob<System> (smob);
int start = scm_to_int (start_scm);
int end = scm_to_int (end_scm);
static SCM
get_maybe_spaceable_staves (SCM smob, int filter)
{
- System *me = derived_unsmob<System> (smob);
- Grob *align = Grob::unsmob (me->get_object ("vertical_alignment"));
+ System *me = unsmob<System> (smob);
+ Grob *align = unsmob<Grob> (me->get_object ("vertical_alignment"));
SCM ret = SCM_EOL;
if (align)
if (left_item)
{
SCM left_cause = left_item->get_property ("cause");
- Item *slur_cause = Item::unsmob (left_cause);
+ Item *slur_cause = unsmob<Item> (left_cause);
if (slur_cause == note_heads_[k])
{
note_heads_[k]->set_property ("span-start", SCM_BOOL_T);
Tempo_performer::process_music ()
{
SCM w = get_property ("tempoWholesPerMinute");
- if (Moment::is_smob (w)
+ if (unsmob<Moment> (w)
&& !ly_is_equal (w, last_tempo_))
{
- Rational r = Moment::unsmob (w)->main_part_;
+ Rational r = unsmob<Moment> (w)->main_part_;
r *= Rational (4, 1);
audio_ = new Audio_tempo (r.to_int ());
extract_grob_set (info.grob (), "note-heads", heads);
Grob *x_parent = (heads.size ()
? info.grob ()
- : Grob::unsmob (info.grob ()->get_object ("rest")));
+ : unsmob<Grob> (info.grob ()->get_object ("rest")));
for (vsize i = 0; i < scripts_.size (); i++)
{
LY_ASSERT_TYPE (scm_is_string, markup, 3);
string str = ly_scm2string (markup);
- Output_def *layout = Output_def::unsmob (layout_smob);
+ Output_def *layout = unsmob<Output_def> (layout_smob);
Font_metric *fm = select_encoded_font (layout, props);
replace_special_characters (str, props);
SCM
Text_interface::print (SCM grob)
{
- Grob *me = Grob::unsmob (grob);
+ Grob *me = unsmob<Grob> (grob);
SCM t = me->get_property ("text");
SCM chain = Font_interface::text_font_alist_chain (me);
{
if (!finished_->get_bound (RIGHT))
{
- Grob *e = Grob::unsmob (get_property ("currentMusicalColumn"));
+ Grob *e = unsmob<Grob> (get_property ("currentMusicalColumn"));
finished_->set_bound (RIGHT, e);
}
finished_ = 0;
{
if (span_ && !span_->get_bound (LEFT))
{
- Grob *e = Grob::unsmob (get_property ("currentMusicalColumn"));
+ Grob *e = unsmob<Grob> (get_property ("currentMusicalColumn"));
span_->set_bound (LEFT, e);
}
SCM
Tie_column::before_line_breaking (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
for (SCM s = me->get_property ("ties"); scm_is_pair (s); s = scm_cdr (s))
{
- Spanner *tie = Spanner::unsmob (scm_car (s));
+ Spanner *tie = unsmob<Spanner> (scm_car (s));
for (LEFT_and_RIGHT (dir))
{
if (dir * tie->get_bound (dir)->get_column ()->get_rank ()
SCM
Tie_column::calc_positioning_done (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "ties", ro_ties);
vector<Grob *> ties (ro_ties);
if (!ties.size ())
for (vsize i = 0; i < heads_to_tie_.size (); i++)
{
Grob *th = heads_to_tie_[i].head_;
- Stream_event *right_ev = Stream_event::unsmob (h->get_property ("cause"));
- Stream_event *left_ev = Stream_event::unsmob (th->get_property ("cause"));
+ Stream_event *right_ev = unsmob<Stream_event> (h->get_property ("cause"));
+ Stream_event *left_ev = unsmob<Stream_event> (th->get_property ("cause"));
/*
maybe should check positions too.
SCM p1 = left_ev->get_property ("pitch");
SCM p2 = right_ev->get_property ("pitch");
if ((enharmonic
- ? (Pitch::is_smob (p1) && Pitch::is_smob (p2) &&
- Pitch::unsmob (p1)->tone_pitch () == Pitch::unsmob (p2)->tone_pitch ())
+ ? (unsmob<Pitch> (p1) && unsmob<Pitch> (p2) &&
+ unsmob<Pitch> (p1)->tone_pitch () == unsmob<Pitch> (p2)->tone_pitch ())
: ly_is_equal (p1, p2))
&& (!Tie_engraver::has_autosplit_end (left_ev)))
{
{
Grob *head = now_heads_[i];
Stream_event *left_ev
- = Stream_event::unsmob (head->get_property ("cause"));
+ = unsmob<Stream_event> (head->get_property ("cause"));
if (!left_ev)
{
!tie_event && !tie_stream_event && scm_is_pair (s);
s = scm_cdr (s))
{
- Stream_event *ev = Stream_event::unsmob (scm_car (s));
+ Stream_event *ev = unsmob<Stream_event> (scm_car (s));
if (!ev)
continue;
continue;
if (!stem)
- stem = Grob::unsmob (head->get_object ("stem"));
+ stem = unsmob<Grob> (head->get_object ("stem"));
Real p = Staff_symbol_referencer::get_position (head);
Interval y ((p - 1) * 0.5 * staff_space,
boxes.push_back (Box (x, y));
}
- Grob *acc = Grob::unsmob (heads[i]->get_object ("accidental-grob"));
+ Grob *acc = unsmob<Grob> (heads[i]->get_object ("accidental-grob"));
if (acc)
acc->get_property ("after-line-breaking"); /* trigger tie-related suicide */
for (vsize i = 0; i < semi_ties.size (); i++)
{
Tie_specification spec;
- Item *head = Item::unsmob (semi_ties[i]->get_object ("note-head"));
+ Item *head = unsmob<Item> (semi_ties[i]->get_object ("note-head"));
if (!head)
programming_error ("LV tie without head?!");
if (!spec.note_head_drul_[d])
continue;
- Grob *stem = Grob::unsmob (spec.note_head_drul_[d]->get_object ("stem"));
+ Grob *stem = unsmob<Grob> (spec.note_head_drul_[d]->get_object ("stem"));
if (stem
&& Stem::is_normal_stem (stem))
stems[d] = stem;
SCM p1 = left_mus->get_property ("pitch");
SCM p2 = right_mus->get_property ("pitch");
- if (Pitch::is_smob (p1) && Pitch::is_smob (p2)
- && Pitch::unsmob (p1)->tone_pitch () == Pitch::unsmob (p2)->tone_pitch ())
+ if (unsmob<Pitch> (p1) && unsmob<Pitch> (p2)
+ && unsmob<Pitch> (p1)->tone_pitch () == unsmob<Pitch> (p2)->tone_pitch ())
{
found = true;
// (*it).moment_ already stores the end of the tied note!
Direction hd = to_dir (me->get_property ("head-direction"));
return (hd == d)
- ? Grob::unsmob (me->get_object ("note-head"))
+ ? unsmob<Grob> (me->get_object ("note-head"))
: 0;
}
SCM
Tie::calc_direction (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Grob *yparent = me->get_parent (Y_AXIS);
if ((Tie_column::has_interface (yparent)
|| Semi_tie_column::has_interface (yparent))
- && Grob_array::is_smob (yparent->get_object ("ties"))
- // && Grob_array::unsmob (yparent->get_object ("ties"))->size () > 1
+ && unsmob<Grob_array> (yparent->get_object ("ties"))
+ // && unsmob<Grob_array> (yparent->get_object ("ties"))->size () > 1
)
{
/* trigger positioning. */
SCM
Tie::calc_control_points (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Grob *yparent = me->get_parent (Y_AXIS);
if ((Tie_column::has_interface (yparent)
|| Semi_tie_column::has_interface (yparent))
- && Grob_array::is_smob (yparent->get_object ("ties")))
+ && unsmob<Grob_array> (yparent->get_object ("ties")))
{
extract_grob_set (yparent, "ties", ties);
if (me->original () && ties.size () == 1
SCM
Tie::print (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
SCM cp = me->get_property ("control-points");
string str;
SCM properties = Font_interface::text_font_alist_chain (me);
- Stencil tm = *Stencil::unsmob (Text_interface::interpret_markup
+ Stencil tm = *unsmob<Stencil> (Text_interface::interpret_markup
(me->layout ()->self_scm (), properties,
annotation));
tm.translate (Offset (b.control_[3][X_AXIS] + 0.5,
{
if (time_signature_ && !scm_is_null (time_cause_))
{
- Moment *mp = Moment::unsmob (get_property ("measurePosition"));
+ Moment *mp = unsmob<Moment> (get_property ("measurePosition"));
if (mp && (mp->main_part_ > Rational (0))
&& !to_boolean (get_property ("partialBusy")))
time_signature_->warning ("mid-measure time signature without \\partial");
void
Timing_translator::initialize ()
{
- Context *timing = Context::unsmob (scm_call_2 (ly_lily_module_constant ("ly:context-find"),
+ Context *timing = unsmob<Context> (scm_call_2 (ly_lily_module_constant ("ly:context-find"),
context ()->self_scm (),
ly_symbol2scm ("Timing")));
if (timing != context ())
SCM measureLength = timing->get_property ("measureLength");
- if (!Moment::is_smob (measureLength))
+ if (!unsmob<Moment> (measureLength))
{
measureLength =
Moment (ly_scm2rational
context ()->set_property ("beamExceptions", beamExceptions);
SCM baseMoment = timing->get_property ("baseMoment");
- if (!Moment::is_smob (baseMoment))
+ if (!unsmob<Moment> (baseMoment))
{
baseMoment =
Moment (ly_scm2rational
{
beatStructure =
scm_call_3 (ly_lily_module_constant ("beat-structure"),
- ly_rational2scm (Moment::unsmob (baseMoment)->main_part_),
+ ly_rational2scm (unsmob<Moment> (baseMoment)->main_part_),
timeSignatureFraction,
timeSignatureSettings);
}
Timing_translator::measure_length () const
{
SCM l = get_property ("measureLength");
- if (Moment::is_smob (l))
- return Moment::unsmob (l)->main_part_;
+ if (unsmob<Moment> (l))
+ return unsmob<Moment> (l)->main_part_;
else
return Rational (1);
}
Moment measposp;
SCM s = get_property ("measurePosition");
- if (Moment::is_smob (s))
- measposp = *Moment::unsmob (s);
+ if (unsmob<Moment> (s))
+ measposp = *unsmob<Moment> (s);
else
{
measposp = now;
#include "international.hh"
#include "scm-hash.hh"
#include "warn.hh"
+#include "protected-scm.hh"
/*
should delete these after exit.
*/
Scheme_hash_table *global_translator_dict = 0;
+Protected_scm global_translator_dict_scm;
LY_DEFINE (get_all_translators, "ly:get-all-translators", 0, 0, 0, (),
"Return a list of all translator objects that may be"
add_translator (Translator *t)
{
if (!global_translator_dict)
- global_translator_dict = new Scheme_hash_table;
+ {
+ global_translator_dict = new Scheme_hash_table;
+ global_translator_dict_scm = global_translator_dict->unprotect ();
+ }
SCM k = ly_symbol2scm (t->class_name ());
- global_translator_dict->set (k, t->self_scm ());
-
- t->unprotect ();
+ global_translator_dict->set (k, t->unprotect ());
}
Translator *
return 0;
}
- return Translator::unsmob (v);
+ return unsmob<Translator> (v);
}
SCM iface_list, Direction start_end)
{
SCM retval = Engraver_dispatch_list ().smobbed_copy ();
- Engraver_dispatch_list *list = Engraver_dispatch_list::unsmob (retval);
+ Engraver_dispatch_list *list = unsmob<Engraver_dispatch_list> (retval);
Engraver_dispatch_entry entry;
bool found = false;
for (SCM s = trans_list; scm_is_pair (s); s = scm_cdr (s))
{
Engraver *eng
- = Engraver::unsmob (scm_car (s));
+ = unsmob<Engraver> (scm_car (s));
if (!eng)
continue;
translator_each (SCM list, Translator_method method)
{
for (SCM p = list; scm_is_pair (p); p = scm_cdr (p))
- (Translator::unsmob (scm_car (p))->*method) ();
+ (unsmob<Translator> (scm_car (p))->*method) ();
}
void
ly_symbol2scm ("AnnounceNewContext"));
for (SCM tr_list = simple_trans_list_; scm_is_pair (tr_list); tr_list = scm_cdr (tr_list))
{
- Translator *tr = Translator::unsmob (scm_car (tr_list));
+ Translator *tr = unsmob<Translator> (scm_car (tr_list));
tr->connect_to_context (c);
}
}
{
for (SCM tr_list = simple_trans_list_; scm_is_pair (tr_list); tr_list = scm_cdr (tr_list))
{
- Translator *tr = Translator::unsmob (scm_car (tr_list));
+ Translator *tr = unsmob<Translator> (scm_car (tr_list));
tr->disconnect_from_context (context_);
}
context_->event_source ()->remove_listener (GET_LISTENER (Translator_group, create_child_translator),
Both filter_performers and filter_engravers used to use a direct dynamic_cast
on the unsmobbed translator to be filtered, i.e.,
- if (Performer::unsmob (scm_car (*tail)))
+ if (unsmob<Performer> (scm_car (*tail)))
but this caused mysterious optimisation issues in several GUB builds. See
issue #818 for the background to this change.
SCM *tail = ℓ
for (SCM p = ell; scm_is_pair (p); p = scm_cdr (p))
{
- if (Performer::is_smob (scm_car (*tail)))
+ if (unsmob<Performer> (scm_car (*tail)))
*tail = scm_cdr (*tail);
else
tail = SCM_CDRLOC (*tail);
SCM *tail = ℓ
for (SCM p = ell; scm_is_pair (p); p = scm_cdr (p))
{
- if (Engraver::is_smob (scm_car (*tail)))
+ if (unsmob<Engraver> (scm_car (*tail)))
*tail = scm_cdr (*tail);
else
tail = SCM_CDRLOC (*tail);
void
Translator_group::create_child_translator (SCM sev)
{
- Stream_event *ev = Stream_event::unsmob (sev);
+ Stream_event *ev = unsmob<Stream_event> (sev);
// get from AnnounceNewContext
SCM cs = ev->get_property ("context");
- Context *new_context = Context::unsmob (cs);
- Context_def *def = Context_def::unsmob (new_context->get_definition ());
+ Context *new_context = unsmob<Context> (cs);
+ Context_def *def = unsmob<Context_def> (new_context->get_definition ());
SCM ops = new_context->get_definition_mods ();
SCM trans_names = def->get_translator_names (ops);
for (SCM s = c->children_contexts (); scm_is_pair (s);
s = scm_cdr (s))
- precomputed_recurse_over_translators (Context::unsmob (scm_car (s)), idx, dir);
+ precomputed_recurse_over_translators (unsmob<Context> (scm_car (s)), idx, dir);
if (tg && dir == UP)
{
for (SCM s = c->children_contexts (); scm_is_pair (s);
s = scm_cdr (s))
- recurse_over_translators (Context::unsmob (scm_car (s)), ptr, tg_ptr, dir);
+ recurse_over_translators (unsmob<Context> (scm_car (s)), ptr, tg_ptr, dir);
if (tg && dir == UP)
{
{
for (SCM s = simple_trans_list_; scm_is_pair (s); s = scm_cdr (s))
{
- Translator *tr = Translator::unsmob (scm_car (s));
+ Translator *tr = unsmob<Translator> (scm_car (s));
Translator::Callback ptrs[TRANSLATOR_METHOD_PRECOMPUTE_COUNT];
tr->fetch_precomputable_methods (ptrs);
" The name is a symbol.")
{
LY_ASSERT_SMOB (Translator, trans, 1);
- Translator *tr = Translator::unsmob (trans);
+ Translator *tr = unsmob<Translator> (trans);
char const *nm = tr->class_name ();
return ly_symbol2scm (nm);
}
"Return an alist of properties of translator @var{me}.")
{
LY_ASSERT_SMOB (Translator, me, 1);
- Translator *tr = Translator::unsmob (me);
+ Translator *tr = unsmob<Translator> (me);
return tr->translator_description ();
}
"Return the context of the translator object @var{trans}.")
{
LY_ASSERT_SMOB (Translator, trans, 1);
- Translator *tr = Translator::unsmob (trans);
+ Translator *tr = unsmob<Translator> (trans);
Context *c = tr->context ();
return c ? c->self_scm () : SCM_BOOL_F;
Moment
get_event_length (Stream_event *e)
{
- Moment *m = Moment::unsmob (e->get_property ("length"));
+ Moment *m = unsmob<Moment> (e->get_property ("length"));
if (m)
return *m;
else
{
if (!finished_->get_bound (RIGHT))
{
- Grob *e = Grob::unsmob (get_property ("currentMusicalColumn"));
+ Grob *e = unsmob<Grob> (get_property ("currentMusicalColumn"));
finished_->set_bound (RIGHT, e);
}
finished_ = 0;
{
if (span_ && !span_->get_bound (LEFT))
{
- Grob *e = Grob::unsmob (get_property ("currentMusicalColumn"));
+ Grob *e = unsmob<Grob> (get_property ("currentMusicalColumn"));
span_->set_bound (LEFT, e);
}
typeset_all ();
if (span_)
{
- Grob *e = Grob::unsmob (get_property ("currentCommandColumn"));
+ Grob *e = unsmob<Grob> (get_property ("currentCommandColumn"));
span_->set_bound (RIGHT, e);
}
}
SCM
Tuplet_bracket::calc_connect_to_neighbors (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
Direction dir = get_grob_direction (me);
Drul_array<Item *> bounds (get_x_bound_item (me, LEFT, dir),
SCM
Tuplet_bracket::calc_x_positions (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
extract_grob_set (me, "note-columns", columns);
Grob *commonx = get_common_x (me);
SCM
Tuplet_bracket::print (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
Stencil mol;
extract_grob_set (me, "note-columns", columns);
Output_def *pap = me->layout ();
- Grob *number_grob = Grob::unsmob (me->get_object ("tuplet-number"));
+ Grob *number_grob = unsmob<Grob> (me->get_object ("tuplet-number"));
/*
Don't print the bracket when it would be smaller than the number.
= Text_interface::interpret_markup (pap->self_scm (),
properties, text);
- Stencil *edge_text = Stencil::unsmob (t);
+ Stencil *edge_text = unsmob<Stencil> (t);
edge_text->translate_axis (x_span[d] - x_span[LEFT],
X_AXIS);
edge_stencils[d] = *edge_text;
}
// Check for number-on-bracket collisions
- Grob *number = Grob::unsmob (tuplets[i]->get_object ("tuplet-number"));
+ Grob *number = unsmob<Grob> (tuplets[i]->get_object ("tuplet-number"));
if (number)
points.push_back (Offset (number->extent (commonx, X_AXIS).center () - x0,
number->extent (commony, Y_AXIS)[dir]));
// assume that if a script is avoiding slurs, it should not get placed
// under a tuplet bracket
- if (Grob::is_smob (scripts[i]->get_object ("slur")))
+ if (unsmob<Grob> (scripts[i]->get_object ("slur")))
continue;
Interval script_x (scripts[i]->extent (commonx, X_AXIS));
SCM
Tuplet_bracket::calc_direction (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
Direction dir = Tuplet_bracket::get_default_dir (me);
return scm_from_int (dir);
}
SCM
Tuplet_bracket::calc_positions (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
Real dy = 0.0;
Real offset = 0.0;
SCM
Tuplet_bracket::calc_cross_staff (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
extract_grob_set (me, "note-columns", cols);
extract_grob_set (me, "tuplets", tuplets);
for (vsize i = 0; i < cols.size (); i++)
{
- Grob *stem = Grob::unsmob (cols[i]->get_object ("stem"));
+ Grob *stem = unsmob<Grob> (cols[i]->get_object ("stem"));
if (stem && to_boolean (stem->get_property ("cross-staff")))
return SCM_BOOL_T;
}
if (stopped_tuplets_[i].full_length_)
{
Item *col
- = Item::unsmob (stopped_tuplets_[i].full_length_note_
+ = unsmob<Item> (stopped_tuplets_[i].full_length_note_
? get_property ("currentMusicalColumn")
: get_property ("currentCommandColumn"));
if (to_boolean (get_property ("tupletFullLength")))
for (vsize i = 0; i < last_tuplets_.size (); i++)
{
- Item *col = Item::unsmob (get_property ("currentCommandColumn"));
+ Item *col = unsmob<Item> (get_property ("currentCommandColumn"));
last_tuplets_[i]->set_bound (RIGHT, col);
}
}
Music *mus = get_music ();
- Music *ev = Music::unsmob (ev_scm);
+ Music *ev = unsmob<Music> (ev_scm);
ev->set_spot (*mus->origin ());
if (d == START)
{
void
Tuplet_iterator::construct_children ()
{
- if (Duration *d = Duration::unsmob (get_music ()->get_property ("duration")))
+ if (Duration *d = unsmob<Duration> (get_music ()->get_property ("duration")))
spanner_duration_ = d->get_length ();
else if (Moment *mp
- = Moment::unsmob (get_outlet ()->get_property ("tupletSpannerDuration")))
+ = unsmob<Moment> (get_outlet ()->get_property ("tupletSpannerDuration")))
spanner_duration_ = mp->main_part_;
else
spanner_duration_.set_infinite (1);
Tuplet_number::adjacent_note_columns (Grob *me_grob, Grob *ref_stem)
{
Spanner *me = dynamic_cast<Spanner *> (me_grob);
- Spanner *tuplet = Spanner::unsmob (me->get_object ("bracket"));
+ Spanner *tuplet = unsmob<Spanner> (me->get_object ("bracket"));
extract_grob_set (tuplet, "note-columns", columns);
Grob *ref_col = ref_stem->get_parent (X_AXIS); // X-parent of Stem = NoteColumn
Tuplet_number::knee_position_against_beam (Grob *me_grob, Grob *ref_stem)
{
Spanner *me = dynamic_cast<Spanner *> (me_grob);
- Spanner *tuplet = Spanner::unsmob (me->get_object ("bracket"));
+ Spanner *tuplet = unsmob<Spanner> (me->get_object ("bracket"));
bool bracket_visible = to_boolean (me->get_property ("bracket-visibility"))
|| !tuplet->extent (tuplet, Y_AXIS).is_empty ();
SCM
Tuplet_number::print (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
- Spanner *tuplet = Spanner::unsmob (me->get_object ("bracket"));
+ Spanner *me = unsmob<Spanner> (smob);
+ Spanner *tuplet = unsmob<Spanner> (me->get_object ("bracket"));
if (!tuplet || !tuplet->is_live ())
{
}
SCM stc_scm = Text_interface::print (smob);
- Stencil *stc = Stencil::unsmob (stc_scm);
+ Stencil *stc = unsmob<Stencil> (stc_scm);
stc->align_to (X_AXIS, CENTER);
stc->align_to (Y_AXIS, CENTER);
SCM
Tuplet_number::calc_x_offset (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
Item *left_bound = me->get_bound (LEFT);
Item *right_bound = me->get_bound (RIGHT);
Drul_array<Item *> bounds (left_bound, right_bound);
- Spanner *tuplet = Spanner::unsmob (me->get_object ("bracket"));
+ Spanner *tuplet = unsmob<Spanner> (me->get_object ("bracket"));
Grob *commonx = Tuplet_bracket::get_common_x (tuplet);
commonx = commonx->common_refpoint (me, X_AXIS);
SCM
Tuplet_number::calc_y_offset (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
- Spanner *tuplet = Spanner::unsmob (me->get_object ("bracket"));
+ Spanner *me = unsmob<Spanner> (smob);
+ Spanner *tuplet = unsmob<Spanner> (me->get_object ("bracket"));
Drul_array<Real> positions = robust_scm2drul (tuplet->get_property ("positions"),
Drul_array<Real> (0.0, 0.0));
SCM to_bracket = scm_from_double ((positions[LEFT] + positions[RIGHT]) / 2.0);
Interval colliding_acc_ext_y;
for (vsize i = 0; i < heads.size (); i++)
- if (Grob *acc = Grob::unsmob (heads[i]->get_object ("accidental-grob")))
+ if (Grob *acc = unsmob<Grob> (heads[i]->get_object ("accidental-grob")))
{
commony = commony->common_refpoint (acc, Y_AXIS);
Interval acc_ext_y = acc->extent (commony, Y_AXIS);
SCM
Tuplet_number::calc_cross_staff (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
- return Grob::unsmob (me->get_object ("bracket"))->get_property ("cross-staff");
+ Grob *me = unsmob<Grob> (smob);
+ return unsmob<Grob> (me->get_object ("bracket"))->get_property ("cross-staff");
}
ADD_INTERFACE (Tuplet_number,
"Get back object from @var{undead}.")
{
LY_ASSERT_SMOB (Undead, undead, 1);
- return Undead::unsmob (undead)->object ();
+ return unsmob<Undead> (undead)->object ();
}
// '
*/
#include "unpure-pure-container.hh"
-#include "grob.hh"
-
// Reroutes a call to the contained function after dropping last two
// arguments. Used for applying an "unpure" function in a "pure"
// context.
class Unpure_pure_call : public Smob1<Unpure_pure_call>
{
public:
- LY_DECLARE_SMOB_PROC (2, 0, 1, (SCM self, SCM arg1, SCM arg2, SCM rest))
+ LY_DECLARE_SMOB_PROC (&Unpure_pure_call::call, 2, 0, 1)
+ SCM call (SCM arg1, SCM arg2, SCM rest)
{
- return scm_apply_0 (Unpure_pure_call::unsmob (self)->scm1 (),
+ return scm_apply_0 (scm1 (),
scm_call_2 (ly_lily_module_constant ("drop-right"),
scm_cons2 (arg1, arg2, rest),
scm_from_int (2)));
"Return the unpure part of @var{pc}.")
{
LY_ASSERT_SMOB (Unpure_pure_container, pc, 1);
- return Unpure_pure_container::unsmob (pc)->unpure_part ();
+ return unsmob<Unpure_pure_container> (pc)->unpure_part ();
}
LY_DEFINE (ly_unpure_pure_container_pure_part, "ly:unpure-pure-container-pure-part",
"Return the pure part of @var{pc}.")
{
LY_ASSERT_SMOB (Unpure_pure_container, pc, 1);
- return Unpure_pure_container::unsmob (pc)->pure_part ();
+ return unsmob<Unpure_pure_container> (pc)->pure_part ();
}
int
// bitmask based O (1) test); where n=<number of primitives in the
// ligature> (which is typically small (n<10), though).
Stream_event *new_cause = primitive.event_cause ();
- int new_pitch = Pitch::unsmob (new_cause->get_property ("pitch"))->steps ();
+ int new_pitch = unsmob<Pitch> (new_cause->get_property ("pitch"))->steps ();
for (vsize i = 0; i < augmented_primitives_.size (); i++)
{
Stream_event *cause = augmented_primitives_[i].event_cause ();
- int pitch = Pitch::unsmob (cause->get_property ("pitch"))->steps ();
+ int pitch = unsmob<Pitch> (cause->get_property ("pitch"))->steps ();
if (pitch == new_pitch)
{
primitive.grob ()->
SCM
Vaticana_ligature::brew_ligature_primitive (SCM smob)
{
- Grob *me = Grob::unsmob (smob);
+ Grob *me = unsmob<Grob> (smob);
SCM primitive = vaticana_brew_primitive (me).smobbed_copy ();
return primitive;
}
top_level_ = to_boolean (get_property ("topLevelAlignment"));
valign_ = make_spanner (top_level_ ? "VerticalAlignment" : "StaffGrouper", SCM_EOL);
- valign_->set_bound (LEFT, Grob::unsmob (get_property ("currentCommandColumn")));
+ valign_->set_bound (LEFT, unsmob<Grob> (get_property ("currentCommandColumn")));
Align_interface::set_ordered (valign_);
}
}
{
if (valign_)
{
- valign_->set_bound (RIGHT, Grob::unsmob (get_property ("currentCommandColumn")));
+ valign_->set_bound (RIGHT, unsmob<Grob> (get_property ("currentCommandColumn")));
valign_ = 0;
}
}
SCM before = scm_hash_ref (id_to_group_hashtab_, before_id, SCM_BOOL_F);
SCM after = scm_hash_ref (id_to_group_hashtab_, after_id, SCM_BOOL_F);
- Grob *before_grob = Grob::unsmob (before);
- Grob *after_grob = Grob::unsmob (after);
+ Grob *before_grob = unsmob<Grob> (before);
+ Grob *after_grob = unsmob<Grob> (after);
Align_interface::add_element (valign_, i.grob ());
if (before_grob || after_grob)
{
- Grob_array *ga = Grob_array::unsmob (valign_->get_object ("elements"));
+ Grob_array *ga = unsmob<Grob_array> (valign_->get_object ("elements"));
vector<Grob *> &arr = ga->array_reference ();
Grob *added = arr.back ();
else if (qualifies (i))
{
Pointer_group_interface::add_grob (valign_, ly_symbol2scm ("elements"), i.grob ());
- if (!Grob::is_smob (i.grob ()->get_object ("staff-grouper")))
+ if (!unsmob<Grob> (i.grob ()->get_object ("staff-grouper")))
i.grob ()->set_object ("staff-grouper", valign_->self_scm ());
}
}
SCM
Volta_bracket_interface::print (SCM smob)
{
- Spanner *me = Spanner::unsmob (smob);
+ Spanner *me = unsmob<Spanner> (smob);
Spanner *orig_span = dynamic_cast<Spanner *> (me->original ());
bool broken_first_bracket = orig_span && (orig_span->broken_intos_[0]
== (Spanner *)me);
SCM properties = me->get_property_alist_chain (SCM_EOL);
SCM snum = Text_interface::interpret_markup (layout->self_scm (),
properties, text);
- Stencil num = *Stencil::unsmob (snum);
+ Stencil num = *unsmob<Stencil> (snum);
num.align_to (Y_AXIS, UP);
num.translate_axis (-0.5, Y_AXIS);
total.add_at_edge (X_AXIS, LEFT, num, - num.extent (X_AXIS).length ()
SCM l (get_property ("voltaSpannerDuration"));
Moment now = now_mom ();
- bool early_stop = Moment::is_smob (l)
- && *Moment::unsmob (l) <= now - started_mom_;
+ bool early_stop = unsmob<Moment> (l)
+ && *unsmob<Moment> (l) <= now - started_mom_;
end = end || early_stop;
}
void
Volta_engraver::stop_translation_timestep ()
{
- Grob *cc = Grob::unsmob (get_property ("currentCommandColumn"));
+ Grob *cc = unsmob<Grob> (get_property ("currentCommandColumn"));
Item *ci = dynamic_cast<Item *> (cc);
if (end_volta_bracket_ && !end_volta_bracket_->get_bound (RIGHT))
if (end_volta_bracket_ && !volta_bracket_)
{
for (SCM s = get_property ("stavesFound"); scm_is_pair (s); s = scm_cdr (s))
- Side_position_interface::add_support (volta_spanner_, Grob::unsmob (scm_car (s)));
+ Side_position_interface::add_support (volta_spanner_, unsmob<Grob> (scm_car (s)));
volta_spanner_ = 0;
}
% * Add Mordents (reported by Patrick Karl)
%
-\version "2.17.11"
+\version "2.19.22"
#(use-modules (srfi srfi-1))
#(use-modules (srfi srfi-11))
% At last ... here's the music function that applies all the above to a
% score.
-articulate = #(define-music-function (parser location music)
+articulate = #(define-music-function (music)
(ly:music?)
"Adjust times of note to add tenuto, staccato and
normal articulations.
(lambda ()
(music-map
ac:articulate-chord
- (ac:unfoldMusic (event-chord-wrap! music parser))))
+ (ac:unfoldMusic (event-chord-wrap! music (*parser*)))))
(lambda ()
(or (= ac:stealForward 0)
(begin
% Special handling for a gruppetto after a trill.
afterGrace =
#(define-music-function
- (parser location main grace)
+ (main grace)
(ly:music? ly:music?)
- (set! main (event-chord-wrap! main parser))
- (set! grace (event-chord-wrap! grace parser))
+ (set! main (event-chord-wrap! main (*parser*)))
+ (set! grace (event-chord-wrap! grace (*parser*)))
(let*
((main-length (ly:music-length main))
(grace-orig-length (ly:music-length grace))
% Somewhere around the end of the 19th, start of 20th century the rules
% changed, but my main interest is early music.
appoggiatura =
-#(define-music-function (parser location grace main)
+#(define-music-function (grace main)
(ly:music? ly:music?)
- (set! grace (event-chord-wrap! grace parser))
- (set! main (event-chord-wrap! main parser))
+ (set! grace (event-chord-wrap! grace (*parser*)))
+ (set! main (event-chord-wrap! main (*parser*)))
(let* ((maindur (ly:music-length main))
(grace-orig-len (ly:music-length grace))
(main-orig-len (ly:music-length main))
$Id: bagpipe.ly,v 1.12 2006/03/16 14:39:46 hanwen Exp $
%}
-\version "2.19.16"
+\version "2.19.22"
% Notes of the scale of the Great Highland Bagpipe. Extra high notes for bombarde.
% Flat notes used mainly in some modern music.
(b . ,(ly:make-pitch 0 6 NATURAL))
(c . ,(ly:make-pitch 1 0 SHARP))
(c-flat . ,(ly:make-pitch 1 0 FLAT))
+ (cflat . ,(ly:make-pitch 1 0 FLAT))
(d . ,(ly:make-pitch 1 1 NATURAL))
(e . ,(ly:make-pitch 1 2 NATURAL))
(f . ,(ly:make-pitch 1 3 SHARP))
(f-flat . ,(ly:make-pitch 1 3 FLAT))
+ (fflat . ,(ly:make-pitch 1 3 FLAT))
(g . ,(ly:make-pitch 1 4 NATURAL))
(g-flat . ,(ly:make-pitch 1 4 FLAT))
+ (gflat . ,(ly:make-pitch 1 4 FLAT))
(A . ,(ly:make-pitch 1 5 NATURAL))
(B . ,(ly:make-pitch 1 6 NATURAL))
(C . ,(ly:make-pitch 2 0 SHARP))
}
% Add appropriate tweaks needed for piping grace notes to look great.
-stemspace = #(define-music-function (parser location extent) (pair?) #{
+stemspace = #(define-music-function (extent) (pair?) #{
\once \override Staff.Stem.X-extent = #extent
#})
-pgrace = #(define-music-function (parser location notes) (ly:music?) #{
+pgrace = #(define-music-function (notes) (ly:music?) #{
\override Score.GraceSpacing.spacing-increment = #0
\override Score.Stem.beamlet-max-length-proportion = #'(0.5 . 0.5)
\small \grace $notes \normalsize
%%% -*- Mode: Scheme -*-
-\version "2.16.0"
+\version "2.19.22"
%{
Chord repetition behavior is not customizable in the parser. That
is due to it usually being done by the toplevel music handler
%}
chordRepeats =
-#(define-music-function (parser location event-types music)
+#(define-music-function (event-types music)
((list? '()) ly:music?)
"Walk through @var{music} putting the notes of the previous chord
into repeat chords, as well as an optional list of @var{event-types}
(expand-repeat-chords! (cons 'rhythmic-event event-types) music))
tabChordRepeats =
-#(define-music-function (parser location event-types music)
+#(define-music-function (event-types music)
((list? '()) ly:music?)
"Walk through @var{music} putting the notes, fingerings and string
numbers of the previous chord into repeat chords, as well as an
#})
tabChordRepetition =
-#(define-void-function (parser location) ()
+#(define-void-function () ()
(_i "Include the string and fingering information in a chord repetition.
This function is deprecated; try using @code{\\tabChordRepeats} instead.")
- (ly:parser-define! parser '$chord-repeat-events
+ (ly:parser-define! (*parser*) '$chord-repeat-events
'(string-number-event fingering-event)))
%%%% 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.16.0"
+\version "2.19.22"
#(use-modules (scm song))
#(use-modules (srfi srfi-39))
% \festival #"filename" { \tempo N = X } { music }
festival =
-#(define-music-function (parser location filename tempo music)
+#(define-music-function (filename tempo music)
(string? ly:music? ly:music?)
(output-file music tempo filename)
music)
% \festivalsyl #"filename" { \tempo N = X } { music }
festivalsyl =
-#(define-music-function (parser location filename tempo music)
+#(define-music-function (filename tempo music)
(string? ly:music? ly:music?)
(parameterize ((*syllabify* #t))
(output-file music tempo filename))
$Id$
%}
-\version "2.17.30"
+\version "2.19.22"
%
% Declare memorable shortcuts for special unicode characters
% Add unicode 2123 (versicle) as prefix to lyrics.
versus =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
(add-prefix-to-lyrics "℣" music))
% Add unicode 211F (response) as prefix to lyrics.
responsum =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
(add-prefix-to-lyrics "℟" music))
%
% it is applied by one.
%
augmentum =
-#(define-music-function (parser location expr) (ly:music?)
+#(define-music-function (expr) (ly:music?)
(shift-duration-log expr 0 1))
%
;; function has not actually started. A parser clone, in contrast,
;; can run and complete synchronously and shares the module with
;; the current parser.
- (ly:parser-parse-string (ly:parser-clone parser)
+ (ly:parser-parse-string (ly:parser-clone (*parser*))
"\\include \"declarations-init.ly\"")))
-#(note-names-language parser default-language)
+#(note-names-language (*parser*) default-language)
-#(define location #f)
#(define toplevel-scores (list))
#(define toplevel-bookparts (list))
#(define $defaultheader #f)
#(use-modules (ice-9 pretty-print))
$(if (ly:get-option 'include-settings)
- (ly:parser-include-string parser
+ (ly:parser-include-string (*parser*)
(format #f "\\include \"~a\"" (ly:get-option 'include-settings))))
\maininput
(ly:book-add-score! book score))
(reverse! toplevel-scores)))
(set! toplevel-scores (list))
- (book-handler parser book)))
+ (book-handler (*parser*) book)))
((or (pair? toplevel-scores) output-empty-score-list)
(let ((book (apply ly:make-book $defaultpaper
$defaultheader toplevel-scores)))
(set! toplevel-scores (list))
- (book-handler parser book)))))
+ (book-handler (*parser*) book)))))
-#(if (eq? expect-error (ly:parser-has-error? parser))
- (ly:parser-clear-error parser)
+#(if (eq? expect-error (ly:parser-has-error? (*parser*)))
+ (ly:parser-clear-error (*parser*))
(if expect-error
- (ly:parser-error parser (_ "expected error, but none found"))))
+ (ly:parser-error (*parser*) (_ "expected error, but none found"))))
-%\version "2.19.19"
+%\version "2.19.22"
%%% The function used by the built-in templates to
% build a lyrics context and associate it with a voice.
make-one-stanza =
#(define-music-function
- (parser location pos staffPrefix voicePrefix altVoicePrefix lyrics)
+ (pos staffPrefix voicePrefix altVoicePrefix lyrics)
((above-or-below? #f)
voice-prefix?
voice-prefix?
%%%% 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.17.11"
+\version "2.19.22"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TODO: using define-music-function in a .scm causes crash.
absolute =
-#(define-music-function (parser location music)
+#(define-music-function (music)
(ly:music?)
(_i "Make @var{music} absolute. This does not actually change the
music itself but rather hides it from surrounding @code{\\relative}
-commands.")
+and @code{\\fixed} commands.")
(make-music 'RelativeOctaveMusic 'element music))
acciaccatura =
instrument-definitions = #'()
addInstrumentDefinition =
#(define-void-function
- (parser location name lst) (string? list?)
+ (name lst) (string? list?)
(_i "Create instrument @var{name} with properties @var{list}.")
(set! instrument-definitions (acons name lst instrument-definitions)))
addQuote =
-#(define-void-function (parser location name music) (string? ly:music?)
+#(define-void-function (name music) (string? ly:music?)
(_i "Define @var{music} as a quotable music expression named
@var{name}")
- (add-quotable parser name music))
+ (add-quotable (*parser*) name music))
%% keep these two together
afterGraceFraction = #(cons 6 8)
afterGrace =
-#(define-music-function (parser location main grace) (ly:music? ly:music?)
+#(define-music-function (main grace) (ly:music? ly:music?)
(_i "Create @var{grace} note(s) after a @var{main} music expression.")
(let ((main-length (ly:music-length main))
- (fraction (ly:parser-lookup parser 'afterGraceFraction)))
+ (fraction (ly:parser-lookup (*parser*) 'afterGraceFraction)))
(make-simultaneous-music
(list
main
%% music identifiers not allowed at top-level,
%% so this is a music-function instead.
allowPageTurn =
-#(define-music-function (location parser) ()
+#(define-music-function () ()
(_i "Allow a page turn. May be used at toplevel (ie between scores or
markups), or inside a score.")
(make-music 'EventChord
'break-permission 'allow))))
alterBroken =
-#(define-music-function (parser location property arg item)
+#(define-music-function (property arg item)
(symbol-list-or-symbol? list? symbol-list-or-music?)
(_i "Override @var{property} for pieces of broken spanner @var{item}
with values @var{arg}. @var{item} may either be music in the form of
(begin
(ly:music-warning item (_ "not a spanner"))
item))
- (let* ((p (check-grob-path item parser location
+ (let* ((p (check-grob-path item (*parser*) (*location*)
#:default 'Bottom
#:min 2
#:max 2))
#(value-for-spanner-piece arg)
#}
(begin
- (ly:input-warning location (_ "not a spanner name, `~a'") name)
+ (ly:input-warning (*location*) (_ "not a spanner name, `~a'") name)
(make-music 'Music))))))
appendToTag =
-#(define-music-function (parser location tag more music)
+#(define-music-function (tag more music)
(symbol? ly:music? ly:music?)
(_i "Append @var{more} to the @code{elements} of all music
expressions in @var{music} that are tagged with @var{tag}.")
music))
applyContext =
-#(define-music-function (parser location proc) (procedure?)
+#(define-music-function (proc) (procedure?)
(_i "Modify context properties with Scheme procedure @var{proc}.")
(make-music 'ApplyContext
'procedure proc))
applyMusic =
-#(define-music-function (parser location func music) (procedure? ly:music?)
+#(define-music-function (func music) (procedure? ly:music?)
(_i"Apply procedure @var{func} to @var{music}.")
(func music))
applyOutput =
-#(define-music-function (parser location ctx proc) (symbol? procedure?)
+#(define-music-function (ctx proc) (symbol? procedure?)
(_i "Apply function @code{proc} to every layout object in context @code{ctx}")
(make-music 'ApplyOutputEvent
'procedure proc
% for regression testing purposes.
assertBeamQuant =
-#(define-music-function (parser location l r) (pair? pair?)
+#(define-music-function (l r) (pair? pair?)
(_i "Testing function: check whether the beam quants @var{l} and @var{r} are correct")
(make-grob-property-override 'Beam 'positions (check-quant-callbacks l r)))
% for regression testing purposes.
assertBeamSlope =
-#(define-music-function (parser location comp) (procedure?)
+#(define-music-function (comp) (procedure?)
(_i "Testing function: check whether the slope of the beam is the same as @code{comp}")
(make-grob-property-override 'Beam 'positions (check-slope-callbacks comp)))
autochange =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
(_i "Make voices that switch between staves automatically")
- (make-autochange-music parser music))
+ (make-autochange-music (*parser*) music))
balloonGrobText =
-#(define-music-function (parser location grob-name offset text)
+#(define-music-function (grob-name offset text)
(symbol? number-pair? markup?)
(_i "Attach @var{text} to @var{grob-name} at offset @var{offset}
(use like @code{\\once})")
'text text))))
balloonText =
-#(define-event-function (parser location offset text) (number-pair? markup?)
+#(define-event-function (offset text) (number-pair? markup?)
(_i "Attach @var{text} at @var{offset} (use like @code{\\tweak})")
(make-music 'AnnotateOutputEvent
'X-offset (car offset)
'text text))
bar =
-#(define-music-function (parser location type) (string?)
+#(define-music-function (type) (string?)
(_i "Insert a bar line of type @var{type}")
(context-spec-music
(make-property-set 'whichBar type)
'Timing))
barNumberCheck =
-#(define-music-function (parser location n) (integer?)
+#(define-music-function (n) (integer?)
(_i "Print a warning if the current bar number is not @var{n}.")
(make-music 'ApplyContext
'procedure
(lambda (c)
(let ((cbn (ly:context-property c 'currentBarNumber)))
(if (and (number? cbn) (not (= cbn n)))
- (ly:input-warning location
+ (ly:input-warning (*location*)
"Barcheck failed got ~a expect ~a"
cbn n))))))
beamExceptions =
-#(define-scheme-function (parser location music) (ly:music?)
+#(define-scheme-function (music) (ly:music?)
(_i "Extract a value suitable for setting
@code{Timing.beamExceptions} from the given pattern with explicit
beams in @var{music}. A bar check @code{|} has to be used between
(extract-beam-exceptions music))
bendAfter =
-#(define-event-function (parser location delta) (real?)
+#(define-event-function (delta) (real?)
(_i "Create a fall or doit of pitch interval @var{delta}.")
(make-music 'BendAfterEvent
'delta-step delta))
bookOutputName =
-#(define-void-function (parser location newfilename) (string?)
+#(define-void-function (newfilename) (string?)
(_i "Direct output for the current book block to @var{newfilename}.")
- (set! (paper-variable parser #f 'output-filename) newfilename))
+ (set! (paper-variable (*parser*) #f 'output-filename) newfilename))
bookOutputSuffix =
-#(define-void-function (parser location newsuffix) (string?)
+#(define-void-function (newsuffix) (string?)
(_i "Set the output filename suffix for the current book block to
@var{newsuffix}.")
- (set! (paper-variable parser #f 'output-suffix) newsuffix))
+ (set! (paper-variable (*parser*) #f 'output-suffix) newsuffix))
%% \breathe is defined as a music function rather than an event identifier to
%% ensure it gets useful input location information: as an event identifier,
%% it would have to be wrapped in an EventChord to prevent it from being
%% treated as a post_event by the parser
breathe =
-#(define-music-function (parser location) ()
+#(define-music-function () ()
(_i "Insert a breath mark.")
(make-music 'BreathingEvent))
clef =
-#(define-music-function (parser location type) (string?)
+#(define-music-function (type) (string?)
(_i "Set the current clef to @var{type}.")
(make-clef-set type))
compoundMeter =
-#(define-music-function (parser location args) (pair?)
+#(define-music-function (args) (pair?)
(_i "Create compound time signatures. The argument is a Scheme list of
lists. Each list describes one fraction, with the last entry being the
denominator, while the first entries describe the summands in the
#} ))
compressMMRests =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
(_i "Remove the empty bars created by multi-measure rests,
leaving just the first bar containing the MM rest itself.")
(music-map
music))
crossStaff =
-#(define-music-function (parser location notes) (ly:music?)
+#(define-music-function (notes) (ly:music?)
(_i "Create cross-staff stems")
#{
\temporary \override Stem.cross-staff = #cross-staff-connect
#})
cueClef =
-#(define-music-function (parser location type) (string?)
+#(define-music-function (type) (string?)
(_i "Set the current cue clef to @var{type}.")
(make-cue-clef-set type))
cueClefUnset =
-#(define-music-function (parser location) ()
+#(define-music-function () ()
(_i "Unset the current cue clef.")
(make-cue-clef-unset))
cueDuring =
#(define-music-function
- (parser location what dir main-music) (string? ly:dir? ly:music?)
+ (what dir main-music) (string? ly:dir? ly:music?)
(_i "Insert contents of quote @var{what} corresponding to @var{main-music},
in a CueVoice oriented by @var{dir}.")
(make-music 'QuoteMusic
cueDuringWithClef =
#(define-music-function
- (parser location what dir clef main-music) (string? ly:dir? string? ly:music?)
+ (what dir clef main-music) (string? ly:dir? string? ly:music?)
(_i "Insert contents of quote @var{what} corresponding to @var{main-music},
in a CueVoice oriented by @var{dir}.")
(make-music 'QuoteMusic
displayLilyMusic =
-#(define-music-function (parser location port music) ((output-port?) ly:music?)
+#(define-music-function (port music) ((output-port?) ly:music?)
(_i "Display the LilyPond input representation of @var{music}
to @var{port}, defaulting to the console.")
(let ((port (or port (current-output-port))))
(newline port)
- (display-lily-music music parser port))
+ (display-lily-music music (*parser*) port))
music)
displayMusic =
-#(define-music-function (parser location port music) ((output-port?) ly:music?)
+#(define-music-function (port music) ((output-port?) ly:music?)
(_i "Display the internal representation of @var{music} to
@var{port}, default to the console.")
(let ((port (or port (current-output-port))))
music)
displayScheme =
-#(define-scheme-function (parser location port expr) ((output-port?) scheme?)
+#(define-scheme-function (port expr) ((output-port?) scheme?)
(_i "Display the internal representation of @var{expr} to
@var{port}, default to the console.")
(let ((port (or port (current-output-port))))
endSpanners =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
(_i "Terminate the next spanner prematurely after exactly one note
without the need of a specific end spanner.")
(let* ((start-span-evs (filter (lambda (ev)
total))
eventChords =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
(_i "Compatibility function wrapping @code{EventChord} around
isolated rhythmic events occuring since version 2.15.28, after
expanding repeat chords @samp{q}.")
- (event-chord-wrap! music parser))
+ (event-chord-wrap! music (*parser*)))
featherDurations=
-#(define-music-function (parser location factor argument) (ly:moment? ly:music?)
+#(define-music-function (factor argument) (ly:moment? ly:music?)
(_i "Adjust durations of music in @var{argument} by rational @var{factor}.")
(let ((orig-duration (ly:music-length argument))
(multiplier (ly:make-moment 1 1)))
argument))
finger =
-#(define-event-function (parser location finger) (number-or-markup?)
+#(define-event-function (finger) (number-or-markup?)
(_i "Apply @var{finger} as a fingering indication.")
(make-music
(if (number? finger) 'digit 'text)
finger))
+fixed =
+#(define-music-function (pitch music)
+ (ly:pitch? ly:music?)
+ (_i "Use the octave of @var{pitch} as the default octave for @var{music}.")
+ (let ((octave-marks (1+ (ly:pitch-octave pitch))))
+ (cond ((not (= 0 octave-marks))
+ (ly:music-transpose music (ly:make-pitch octave-marks 0 0))
+ ;;In order to leave unchanged the notes in any enclosed
+ ;; \absolute or \fixed or \relative, make a cancelling shift
+ (map (lambda (m)
+ (ly:music-transpose m (ly:make-pitch (- octave-marks) 0 0)))
+ (extract-named-music music 'RelativeOctaveMusic)))))
+ (make-music 'RelativeOctaveMusic 'element music))
+
footnote =
-#(define-music-function (parser location mark offset footnote item)
+#(define-music-function (mark offset footnote item)
((markup?) number-pair? markup? symbol-list-or-music?)
(_i "Make the markup @var{footnote} a footnote on @var{item}. The
footnote is marked with a markup @var{mark} moved by @var{offset} with
(_i "Insert @var{music} as grace notes."))
grobdescriptions =
-#(define-scheme-function (parser location descriptions) (list?)
+#(define-scheme-function (descriptions) (list?)
(_i "Create a context modification from @var{descriptions}, a list
in the format of @code{all-grob-descriptions}.")
(ly:make-context-mod
(list 'assign (car p) (ly:make-grob-properties (cdr p))))
descriptions)))
-harmonicByFret = #(define-music-function (parser location fret music) (number? ly:music?)
+harmonicByFret = #(define-music-function (fret music) (number? ly:music?)
(_i "Convert @var{music} into mixed harmonics; the resulting notes resemble
harmonics played on a fretted instrument by touching the strings at @var{fret}.")
#{
\revert NoteHead.stencil
#})
-harmonicByRatio = #(define-music-function (parser location ratio music) (number? ly:music?)
+harmonicByRatio = #(define-music-function (ratio music) (number? ly:music?)
(_i "Convert @var{music} into mixed harmonics; the resulting notes resemble
harmonics played on a fretted instrument by touching the strings at the point
given through @var{ratio}.")
#{
\set harmonicDots = ##t
\temporary \override TabNoteHead.stencil = #(tab-note-head::print-custom-fret-label (ratio->fret ratio))
- \temporary \override NoteHead.Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height
- (lambda (grob start end)
- (ly:grob::stencil-height grob)))
+ \temporary \override NoteHead.Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height)
\temporary \override NoteHead.stencil = #(lambda (grob) (ly:grob-set-property! grob 'style 'harmonic-mixed)
(ly:note-head::print grob))
#(make-harmonic
#})
hide =
-#(define-music-function (parser location item) (symbol-list-or-music?)
+#(define-music-function (item) (symbol-list-or-music?)
(_i "Set @var{item}'s @samp{transparent} property to @code{#t},
making it invisible while still retaining its dimensions.
#{ \tweak transparent ##t #item #})
inStaffSegno =
-#(define-music-function (parser location) ()
+#(define-music-function () ()
(_i "Put the segno variant 'varsegno' at this position into the staff,
compatible with the repeat command.")
(make-music 'ApplyContext
instrumentSwitch =
#(define-music-function
- (parser location name) (string?)
+ (name) (string?)
(_i "Switch instrument to @var{name}, which must be predefined with
@code{\\addInstrumentDefinition}.")
(let* ((handle (assoc name instrument-definitions))
(instrument-def (if handle (cdr handle) '())))
(if (not handle)
- (ly:input-warning location "No such instrument: ~a" name))
+ (ly:input-warning (*location*) "No such instrument: ~a" name))
(context-spec-music
(make-music 'SimultaneousMusic
'elements
keepWithTag =
-#(define-music-function (parser location tags music)
+#(define-music-function (tags music)
(symbol-list-or-symbol? ly:music?)
(_i "Include only elements of @var{music} that are tagged with one
of the tags in @var{tags}. @var{tags} may be either a single symbol
music))
key =
-#(define-music-function (parser location tonic pitch-alist)
+#(define-music-function (tonic pitch-alist)
((ly:pitch? '()) (list? '()))
(_i "Set key to @var{tonic} and scale @var{pitch-alist}.
If both are null, just generate @code{KeyChangeEvent}.")
(cond ((null? tonic) (make-music 'KeyChangeEvent))
((null? pitch-alist)
- (ly:parser-error parser (_ "second argument must be pitch list")
- location)
+ (ly:parser-error (*parser*) (_ "second argument must be pitch list")
+ (*location*))
(make-music 'SequentialMusic 'void #t))
(else
(ly:music-transpose
tonic))))
killCues =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
(_i "Remove cue notes from @var{music}.")
(music-map
(lambda (mus)
label =
-#(define-music-function (parser location label) (symbol?)
+#(define-music-function (label) (symbol?)
(_i "Create @var{label} as a bookmarking label.")
(make-music 'EventChord
'page-marker #t
language =
-#(define-void-function (parser location language) (string?)
+#(define-void-function (language) (string?)
(_i "Set note names for language @var{language}.")
- (note-names-language parser language))
+ (note-names-language (*parser*) language))
languageSaveAndChange =
-#(define-void-function (parser location language) (string?)
+#(define-void-function (language) (string?)
(_i "Store the previous pitchnames alist, and set a new one.")
(set! previous-pitchnames pitchnames)
- (note-names-language parser language))
+ (note-names-language (*parser*) language))
languageRestore =
-#(define-void-function (parser location) ()
+#(define-void-function () ()
(_i "Restore a previously-saved pitchnames alist.")
(if previous-pitchnames
(begin
(set! pitchnames previous-pitchnames)
- (ly:parser-set-note-names parser pitchnames))
- (ly:input-warning location (_ "No other language was defined previously. Ignoring."))))
+ (ly:parser-set-note-names (*parser*) pitchnames))
+ (ly:input-warning (*location*) (_ "No other language was defined previously. Ignoring."))))
magnifyMusic =
-#(define-music-function (parser location mag music) (positive? ly:music?)
+#(define-music-function (mag music) (positive? ly:music?)
(_i "Magnify the notation of @var{music} without changing the
staff-size, using @var{mag} as a size factor. Stems, beams,
slurs, ties, and horizontal spacing are adjusted automatically.")
#})
magnifyStaff =
-#(define-music-function (parser location mag) (positive?)
+#(define-music-function (mag) (positive?)
(_i "Change the size of the staff, adjusting notation size and
horizontal spacing automatically, using @var{mag} as a size factor.")
#})
makeClusters =
-#(define-music-function (parser location arg) (ly:music?)
+#(define-music-function (arg) (ly:music?)
(_i "Display chords in @var{arg} as clusters.")
(music-map note-to-cluster arg))
modalInversion =
-#(define-music-function (parser location around to scale music)
+#(define-music-function (around to scale music)
(ly:pitch? ly:pitch? ly:music? ly:music?)
(_i "Invert @var{music} about @var{around} using @var{scale} and
transpose from @var{around} to @var{to}.")
music))
modalTranspose =
-#(define-music-function (parser location from to scale music)
+#(define-music-function (from to scale music)
(ly:pitch? ly:pitch? ly:music? ly:music?)
(_i "Transpose @var{music} from pitch @var{from} to pitch @var{to}
using @var{scale}.")
inversion =
#(define-music-function
- (parser location around to music) (ly:pitch? ly:pitch? ly:music?)
+ (around to music) (ly:pitch? ly:pitch? ly:music?)
(_i "Invert @var{music} about @var{around} and
transpose from @var{around} to @var{to}.")
(music-invert around to music))
mark =
#(define-music-function
- (parser location label) ((scheme? '()))
+ (label) ((scheme? '()))
"Make the music for the \\mark command."
(let* ((set (and (integer? label)
(context-spec-music (make-property-set 'rehearsalMark label)
'Score)))
(ev (make-music 'MarkEvent
- 'origin location)))
+ 'origin (*location*))))
(if set
(make-sequential-music (list set ev))
ev))))
musicMap =
-#(define-music-function (parser location proc mus) (procedure? ly:music?)
+#(define-music-function (proc mus) (procedure? ly:music?)
(_i "Apply @var{proc} to @var{mus} and all of the music it contains.")
(music-map proc mus))
%% noPageBreak and noPageTurn are music functions (not music indentifiers),
%% because music identifiers are not allowed at top-level.
noPageBreak =
-#(define-music-function (location parser) ()
+#(define-music-function () ()
(_i "Forbid a page break. May be used at toplevel (i.e., between scores or
markups), or inside a score.")
(make-music 'EventChord
'break-permission '()))))
noPageTurn =
-#(define-music-function (location parser) ()
+#(define-music-function () ()
(_i "Forbid a page turn. May be used at toplevel (i.e., between scores or
markups), or inside a score.")
(make-music 'EventChord
octaveCheck =
-#(define-music-function (parser location pitch) (ly:pitch?)
+#(define-music-function (pitch) (ly:pitch?)
(_i "Octave check.")
(make-music 'RelativeOctaveCheck
'pitch pitch))
offset =
-#(define-music-function (parser location property offsets item)
+#(define-music-function (property offsets item)
(symbol-list-or-symbol? scheme? symbol-list-or-music?)
(_i "Offset the default value of @var{property} of @var{item} by
@var{offsets}. If @var{item} is a string, the result is
(if (symbol? property)
(list property)
property)
- parser location
+ (*parser*) (*location*)
#:start 1 #:default #t #:min 2 #:max 2)))
(if prop-path
; If the head of the grob property path is a symbol--i.e.,
(if (symbol? property)
(list property)
property))
- parser location
+ (*parser*) (*location*)
#:default 'Bottom #:min 3 #:max 3)))
(if prop-path
#{
(make-music 'Music)))))
omit =
-#(define-music-function (parser location item) (symbol-list-or-music?)
+#(define-music-function (item) (symbol-list-or-music?)
(_i "Set @var{item}'s @samp{stencil} property to @code{#f},
effectively omitting it without taking up space.
#{ \tweak stencil ##f #item #})
once =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
(_i "Set @code{once} to @code{#t} on all layout instruction events
in @var{music}. This will complain about music with an actual
duration. As a special exception, if @var{music} contains
music)
ottava =
-#(define-music-function (parser location octave) (integer?)
+#(define-music-function (octave) (integer?)
(_i "Set the octavation.")
(make-music 'OttavaMusic
'ottava-number octave))
overrideTimeSignatureSettings =
#(define-music-function
- (parser location time-signature base-moment beat-structure beam-exceptions)
+ (time-signature base-moment beat-structure beam-exceptions)
(fraction? fraction? list? list?)
(_i "Override @code{timeSignatureSettings}
(override-time-signature-setting time-signature setting)))
overrideProperty =
-#(define-music-function (parser location grob-property-path value)
+#(define-music-function (grob-property-path value)
(symbol-list? scheme?)
(_i "Set the grob property specified by @var{grob-property-path} to
@var{value}. @var{grob-property-path} is a symbol list of the form
@code{Context.GrobName.property} or @code{GrobName.property}, possibly
with subproperties given as well.")
- (let ((p (check-grob-path grob-property-path parser location
+ (let ((p (check-grob-path grob-property-path (*parser*) (*location*)
#:default 'Bottom
#:min 3)))
(if p
%% pageBreak and pageTurn are music functions (iso music indentifiers),
%% because music identifiers are not allowed at top-level.
pageBreak =
-#(define-music-function (location parser) ()
+#(define-music-function () ()
(_i "Force a page break. May be used at toplevel (i.e., between scores or
markups), or inside a score.")
(make-music 'EventChord
'break-permission 'force))))
pageTurn =
-#(define-music-function (location parser) ()
+#(define-music-function () ()
(_i "Force a page turn between two scores or top-level markups.")
(make-music 'EventChord
'page-marker #t
'break-permission 'force))))
parallelMusic =
-#(define-void-function (parser location voice-ids music) (list? ly:music?)
+#(define-void-function (voice-ids music) (list? ly:music?)
(_i "Define parallel music sequences, separated by '|' (bar check signs),
and assign them to the identifiers provided in @var{voice-ids}.
;;
;; bind voice identifiers to the voices
(for-each (lambda (voice-id voice)
- (ly:parser-define! parser voice-id voice))
+ (ly:parser-define! (*parser*) voice-id voice))
voice-ids voices)
(ly:music-warning music
(_ "ignoring parallel music without barchecks")))))
parenthesize =
-#(define-music-function (parser loc arg) (ly:music?)
+#(define-music-function (arg) (ly:music?)
(_i "Tag @var{arg} to be parenthesized.")
(if (memq 'event-chord (ly:music-property arg 'types))
two-context-settings
shared-context-settings)
- (let ((pc-music (make-part-combine-music
- parser (list part1 part2) direction chord-range)))
+ (let* ((pc-music (make-part-combine-music
+ parser (list part1 part2) direction chord-range))
+ (L1 (ly:music-length part1))
+ (L2 (ly:music-length part2))
+ ;; keep the contexts alive for the full duration
+ (skip (make-skip-music (make-duration-of-length
+ (if (ly:moment<? L1 L2) L2 L1)))))
#{ \context Staff <<
- \context Voice = "one" \with #one-context-settings {}
- \context Voice = "two" \with #two-context-settings {}
- \context Voice = "shared" \with #shared-context-settings {}
+ \context Voice = "one" \with #one-context-settings { #skip }
+ \context Voice = "two" \with #two-context-settings { #skip }
+ \context Voice = "shared" \with #shared-context-settings { #skip }
+ \context Voice = "solo" { #skip }
+ \context NullVoice = "null" { #skip }
#pc-music
#(make-part-combine-marks
default-part-combine-mark-state-machine
>> #} ))
partcombine =
-#(define-music-function (parser location chord-range part1 part2)
+#(define-music-function (chord-range part1 part2)
((number-pair? '(0 . 8)) ly:music? ly:music?)
(_i "Take the music in @var{part1} and @var{part2} and return
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-directed-part-combine-music parser #f chord-range part1 part2
+ (make-directed-part-combine-music (*parser*) #f chord-range part1 part2
#{ \with { \voiceOne \override DynamicLineSpanner.direction = #UP } #}
#{ \with { \voiceTwo \override DynamicLineSpanner.direction = #DOWN } #}
#{ #} ))
partcombineUp =
-#(define-music-function (parser location chord-range part1 part2)
+#(define-music-function (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-directed-part-combine-music parser UP chord-range part1 part2
+ (make-directed-part-combine-music (*parser*) UP chord-range part1 part2
#{ \with { \voiceOne \override DynamicLineSpanner.direction = #UP } #}
#{ \with { \voiceThree \override DynamicLineSpanner.direction = #UP } #}
#{ \with { \voiceOne \override DynamicLineSpanner.direction = #UP } #} ))
partcombineDown =
-#(define-music-function (parser location chord-range part1 part2)
+#(define-music-function (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-directed-part-combine-music parser DOWN chord-range part1 part2
+ (make-directed-part-combine-music (*parser*) DOWN chord-range part1 part2
#{ \with { \voiceFour \override DynamicLineSpanner.direction = #DOWN } #}
#{ \with { \voiceTwo \override DynamicLineSpanner.direction = #DOWN } #}
#{ \with { \voiceTwo \override DynamicLineSpanner.direction = #DOWN } #} ))
partcombineForce =
-#(define-music-function (location parser type once) (boolean-or-symbol? boolean?)
+#(define-music-function (type once) (boolean-or-symbol? boolean?)
(_i "Override the part-combiner.")
(make-music 'EventChord
'elements (list (make-music 'PartCombineForceEvent
partcombineAutomaticOnce = \partcombineForce ##f ##t
partial =
-#(define-music-function (parser location dur) (ly:duration?)
+#(define-music-function (dur) (ly:duration?)
(_i "Make a partial measure.")
;; We use `descend-to-context' here instead of `context-spec-music' to
;; ensure \partial still works if the Timing_translator is moved
(descend-to-context
(context-spec-music (make-music 'PartialSet
- 'origin location
+ 'origin (*location*)
'duration dur)
'Timing)
'Score))
pitchedTrill =
#(define-music-function
- (parser location main-note secondary-note)
+ (main-note secondary-note)
(ly:music? ly:music?)
(_i "Print a trill with @var{main-note} as the main note of the trill and
print @var{secondary-note} as a stemless note head in parentheses.")
(for-each (lambda (m)
(ly:music-set-property! m 'pitch trill-pitch)) trill-events)
(begin
- (ly:input-warning location (_ "Second argument of \\pitchedTrill should be single note: "))
+ (ly:input-warning (*location*) (_ "Second argument of \\pitchedTrill should be single note: "))
(display sec-note-events)))
(if (eq? forced #t)
main-note))
pushToTag =
-#(define-music-function (parser location tag more music)
+#(define-music-function (tag more music)
(symbol? ly:music? ly:music?)
(_i "Add @var{more} to the front of @code{elements} of all music
expressions in @var{music} that are tagged with @var{tag}.")
music))
quoteDuring =
-#(define-music-function (parser location what main-music) (string? ly:music?)
+#(define-music-function (what main-music) (string? ly:music?)
(_i "Indicate a section of music to be quoted. @var{what} indicates the name
of the quoted voice, as specified in an @code{\\addQuote} command.
@var{main-music} is used to indicate the length of music to be quoted;
'quoted-music-name what))
relative =
-#(define-music-function (parser location pitch music)
+#(define-music-function (pitch music)
((ly:pitch?) ly:music?)
(_i "Make @var{music} relative to @var{pitch}. If @var{pitch} is
omitted, the first note in @var{music} is given in absolute pitch.")
'element music))
removeWithTag =
-#(define-music-function (parser location tags music)
+#(define-music-function (tags music)
(symbol-list-or-symbol? ly:music?)
(_i "Remove elements of @var{music} that are tagged with one of the
tags in @var{tags}. @var{tags} may be either a single symbol or a list
music))
resetRelativeOctave =
-#(define-music-function (parser location pitch) (ly:pitch?)
+#(define-music-function (pitch) (ly:pitch?)
(_i "Set the octave inside a \\relative section.")
(make-music 'SequentialMusic
(lambda (music last-pitch) pitch)))
retrograde =
-#(define-music-function (parser location music)
+#(define-music-function (music)
(ly:music?)
(_i "Return @var{music} in reverse order.")
(retrograde-music music))
revertTimeSignatureSettings =
#(define-music-function
- (parser location time-signature)
+ (time-signature)
(pair?)
(_i "Revert @code{timeSignatureSettings}
(revert-time-signature-setting time-signature))
rightHandFinger =
-#(define-event-function (parser location finger) (number-or-markup?)
+#(define-event-function (finger) (number-or-markup?)
(_i "Apply @var{finger} as a fingering indication.")
(make-music
finger))
scaleDurations =
-#(define-music-function (parser location fraction music)
+#(define-music-function (fraction music)
(fraction? ly:music?)
(_i "Multiply the duration of events in @var{music} by @var{fraction}.")
(ly:music-compress music
(ly:make-moment (car fraction) (cdr fraction))))
settingsFrom =
-#(define-scheme-function (parser location ctx music)
+#(define-scheme-function (ctx music)
((symbol?) ly:music?)
(_i "Take the layout instruction events from @var{music}, optionally
restricted to those applying to context type @var{ctx}, and return
mods))
shape =
-#(define-music-function (parser location offsets item)
+#(define-music-function (offsets item)
(list? symbol-list-or-music?)
(_i "Offset control-points of @var{item} by @var{offsets}. The
argument is a list of number pairs or list of such lists. Each
#{ \once \tweak control-points #shape-curve #item #})
shiftDurations =
-#(define-music-function (parser location dur dots arg)
+#(define-music-function (dur dots arg)
(integer? integer? ly:music?)
(_i "Change the duration of @var{arg} by adding @var{dur} to the
@code{durlog} of @var{arg} and @var{dots} to the @code{dots} of @var{arg}.")
(shift-duration-log arg dur dots))
single =
-#(define-music-function (parser location overrides music)
+#(define-music-function (overrides music)
(ly:music? ly:music?)
(_i "Convert @var{overrides} to tweaks and apply them to @var{music}.
This does not convert @code{\\revert}, @code{\\set} or @code{\\unset}.")
music)
skip =
-#(define-music-function (parser location dur) (ly:duration?)
+#(define-music-function (dur) (ly:duration?)
(_i "Skip forward by @var{dur}.")
(make-music 'SkipMusic
'duration dur))
the following music expression"))
spacingTweaks =
-#(define-music-function (parser location parameters) (list?)
+#(define-music-function (parameters) (list?)
(_i "Set the system stretch, by reading the 'system-stretch property of
the `parameters' assoc list.")
#{
#})
styledNoteHeads =
-#(define-music-function (parser location style heads music)
+#(define-music-function (style heads music)
(symbol? symbol-list-or-symbol? ly:music?)
(_i "Set @var{heads} in @var{music} to @var{style}.")
(style-note-heads heads style music))
tag =
-#(define-music-function (parser location tags music) (symbol-list-or-symbol? ly:music?)
+#(define-music-function (tags music) (symbol-list-or-symbol? ly:music?)
(_i "Tag the following @var{music} with @var{tags} and return the
result, by adding the single symbol or symbol list @var{tags} to the
@code{tags} property of @var{music}.")
music)
tagGroup =
-#(define-void-function (parser location tags) (symbol-list?)
+#(define-void-function (tags) (symbol-list?)
(_i "Define a tag group comprising the symbols in the symbol list
@var{tags}. Tag groups must not overlap.")
(let ((err (define-tag-group tags)))
- (if err (ly:parser-error parser err location))))
+ (if err (ly:parser-error (*parser*) err (*location*)))))
temporary =
-#(define-music-function (parser location music)
+#(define-music-function (music)
(ly:music?)
(_i "Make any @code{\\override} in @var{music} replace an existing
grob property value only temporarily, restoring the old value when a
(else
(if (not warned)
(begin
- (ly:input-warning location (_ "Cannot make ~a revertible")
+ (ly:input-warning (*location*) (_ "Cannot make ~a revertible")
(ly:music-property m 'name))
(set! warned #t)))
#t))))
music)
time =
-#(define-music-function (parser location beat-structure fraction)
+#(define-music-function (beat-structure fraction)
((number-list? '()) fraction?)
(_i "Set @var{fraction} as time signature, with optional
number list @var{beat-structure} before it.")
'beat-structure beat-structure))
times =
-#(define-music-function (parser location fraction music)
+#(define-music-function (fraction music)
(fraction? ly:music?)
(_i "Scale @var{music} in time by @var{fraction}.")
(make-music 'TimeScaledMusic
transpose =
#(define-music-function
- (parser location from to music)
+ (from to music)
(ly:pitch? ly:pitch? ly:music?)
(_i "Transpose @var{music} from pitch @var{from} to pitch @var{to}.")
transposedCueDuring =
#(define-music-function
- (parser location what dir pitch main-music)
+ (what dir pitch main-music)
(string? ly:dir? ly:pitch? ly:music?)
(_i "Insert notes from the part @var{what} into a voice called @code{cue},
'quoted-transposition pitch))
transposition =
-#(define-music-function (parser location pitch) (ly:pitch?)
+#(define-music-function (pitch) (ly:pitch?)
(_i "Set instrument transposition")
(context-spec-music
'Staff))
tuplet =
-#(define-music-function (parser location ratio tuplet-span music)
+#(define-music-function (ratio tuplet-span music)
(fraction? (ly:duration? '()) ly:music?)
(_i "Scale the given @var{music} to tuplets. @var{ratio} is a
fraction that specifies how many notes are played in place of the
'duration tuplet-span))
tupletSpan =
-#(define-music-function (parser location tuplet-span)
+#(define-music-function (tuplet-span)
((ly:duration?))
(_i "Set @code{tupletSpannerDuration}, the length into which
@code{\\tuplet} without an explicit @samp{tuplet-span} argument of its
#{ \unset tupletSpannerDuration #}))
tweak =
-#(define-music-function (parser location prop value item)
+#(define-music-function (prop value item)
(symbol-list-or-symbol? scheme? symbol-list-or-music?)
(_i "Add a tweak to the following @var{item}, usually music.
Layout objects created by @var{item} get their property @var{prop}
@var{prop} can contain additional elements in which case a nested
property (inside of an alist) is tweaked.")
(if (ly:music? item)
- (let ((p (check-grob-path prop parser location
+ (let ((p (check-grob-path prop (*parser*) (*location*)
#:start 1
#:default #t
#:min 2)))
;; diagnostics.
(let ((p (check-grob-path
(append item (if (symbol? prop) (list prop) prop))
- parser location
+ (*parser*) (*location*)
#:default 'Bottom #:min 3)))
(if p
#{ \override #p = #value #}
(make-music 'Music)))))
undo =
-#(define-music-function (parser location music)
+#(define-music-function (music)
(ly:music?)
(_i "Convert @code{\\override} and @code{\\set} in @var{music} to
@code{\\revert} and @code{\\unset}, respectively. Any reverts and
(else
(if (not warned)
(begin
- (ly:input-warning location (_ "Cannot revert ~a")
+ (ly:input-warning (*location*) (_ "Cannot revert ~a")
(ly:music-property m 'name))
(set! warned #t)))
overrides)))
(else (make-sequential-music lst))))))
unfoldRepeats =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
(_i "Force any @code{\\repeat volta}, @code{\\repeat tremolo} or
@code{\\repeat percent} commands in @var{music} to be interpreted
as @code{\\repeat unfold}.")
(unfold-repeats music))
void =
-#(define-void-function (parser location arg) (scheme?)
+#(define-void-function (arg) (scheme?)
(_i "Accept a scheme argument, return a void expression.
Use this if you want to have a scheme expression evaluated
because of its side-effects, but its value ignored."))
withMusicProperty =
-#(define-music-function (parser location sym val music)
+#(define-music-function (sym val music)
(symbol? scheme? ly:music?)
(_i "Set @var{sym} to @var{val} in @var{music}.")
-%\version "2.19.19"
+%\version "2.19.22"
\include "staff-tkit.ly"
make-pianostaff =
-#(define-music-function (parser location) ()
+#(define-music-function () ()
(if (not PianoRHMidiInstrument)
(set! PianoRHMidiInstrument
%%%% 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.16.0"
+\version "2.19.22"
% chord-shape-table is a hash-table of chord shapes
% in the form of diagram-descriptions that can be
% chord-shape-table
addChordShape =
-#(define-void-function (parser location key-symbol tuning shape-definition)
+#(define-void-function (key-symbol tuning shape-definition)
(symbol? pair? string-or-pair?)
(_i "Add chord shape @var{shape-definition} to the @var{chord-shape-table}
hash with the key @code{(cons @var{key-symbol} @var{tuning})}.")
storePredefinedDiagram =
#(define-void-function
- (parser location fretboard-table chord tuning diagram-definition)
+ (fretboard-table chord tuning diagram-definition)
(hash-table? ly:music? pair? string-or-pair?)
(_i "Add predefined fret diagram defined by @var{diagram-definition}
for the chord pitches @var{chord} and the stringTuning @var{tuning}.")
% property-init.ly
-\version "2.17.24"
+\version "2.19.22"
%% for dashed slurs, phrasing slurs, and ties
#(define (make-simple-dash-definition dash-fraction dash-period)
%% common definition for all note head styles reverting
%% (palm mute, harmonics, dead notes, ...)
defaultNoteHeads =
-#(define-music-function (parser location) ()
- (_i "Revert to the default note head style.")
- (revert-head-style '(NoteHead TabNoteHead)))
+#(define-music-function () ()
+ (_i "Revert to the default note head style.")
+ (context-spec-music
+ (revert-head-style '(NoteHead TabNoteHead)) 'Bottom))
accidentalStyle =
#(define-music-function
- (parser location style) (symbol-list?)
+ (style) (symbol-list?)
(_i "Set accidental style to symbol list @var{style} in the form
@samp{piano-cautionary}. If @var{style} has a form like
@samp{Staff.piano-cautionary}, the settings are applied to that
((1) (set-accidental-style (car style)))
((2) (set-accidental-style (cadr style) (car style)))
(else
- (ly:parser-error parser (_ "not an accidental style")
- location)
+ (ly:parser-error (*parser*) (_ "not an accidental style")
+ (*location*))
(make-music 'Music))))
%% arpeggios
defineBarLine =
#(define-void-function
- (parser location bar glyph-list) (string? list?)
+ (bar glyph-list) (string? list?)
(_i "Define bar line settings for bar line @var{bar}.
The list @var{glyph-list} must have three entries which define
the appearance at the end of line, at the beginning of the next line,
%% harmonics
harmonicsOn =
-#(define-music-function (parser location) ()
- (_i "Set the default note head style to a diamond-shaped style.")
- (override-head-style '(NoteHead TabNoteHead) 'harmonic))
+#(define-music-function () ()
+ (_i "Set the default note head style to a diamond-shaped style.")
+ (context-spec-music
+ (override-head-style '(NoteHead TabNoteHead) 'harmonic) 'Bottom))
harmonicsOff = \defaultNoteHeads
harmonicNote =
-#(define-music-function (parser location note) (ly:music?)
+#(define-music-function (note) (ly:music?)
(_i "Print @var{note} with a diamond-shaped note head.")
(style-note-heads 'NoteHead 'harmonic note))
%% incipit
incipit =
-#(define-music-function (parser location incipit-music) (ly:music?)
+#(define-music-function (incipit-music) (ly:music?)
(_i "Output @var{incipit-music} before the main staff as an indication of
its appearance in the original music.")
#{
%% palm mutes
palmMuteOn =
-#(define-music-function (parser location) ()
- (_i "Set the default note head style to a triangle-shaped style.")
- (override-head-style 'NoteHead 'do))
+#(define-music-function () ()
+ (_i "Set the default note head style to a triangle-shaped style.")
+ (context-spec-music
+ (override-head-style 'NoteHead 'do) 'Bottom))
palmMuteOff = \defaultNoteHeads
palmMute =
-#(define-music-function (parser location note) (ly:music?)
+#(define-music-function (note) (ly:music?)
(_i "Print @var{note} with a triangle-shaped note head.")
(style-note-heads 'NoteHead 'do note))
% dash-patterns (make-simple-dash-definition defined at top of file)
phrasingSlurDashPattern =
-#(define-music-function (parser location dash-fraction dash-period)
+#(define-music-function (dash-fraction dash-period)
(number? number?)
(_i "Set up a custom style of dash pattern for @var{dash-fraction} ratio of
line to space repeated at @var{dash-period} interval for phrasing slurs.")
%% point and click
pointAndClickOn =
-#(define-void-function (parser location) ()
+#(define-void-function () ()
(_i "Enable generation of code in final-format (e.g. pdf) files to reference the
originating lilypond source statement;
this is helpful when developing a score but generates bigger final-format files.")
(ly:set-option 'point-and-click #t))
pointAndClickOff =
-#(define-void-function (parser location) ()
+#(define-void-function () ()
(_i "Suppress generating extra code in final-format (e.g. pdf) files to point
back to the lilypond source statement.")
(ly:set-option 'point-and-click #f))
pointAndClickTypes =
-#(define-void-function (parser location types) (symbol-list-or-symbol?)
+#(define-void-function (types) (symbol-list-or-symbol?)
(_i "Set a type or list of types (such as @code{#'note-event}) for which point-and-click info is generated.")
(ly:set-option 'point-and-click types))
% dash-patterns (make-simple-dash-definition defined at top of file)
slurDashPattern =
-#(define-music-function (parser location dash-fraction dash-period)
+#(define-music-function (dash-fraction dash-period)
(number? number?)
(_i "Set up a custom style of dash pattern for @var{dash-fraction}
ratio of line to space repeated at @var{dash-period} interval for slurs.")
% dash-patterns (make-simple-dash-definition defined at top of file)
tieDashPattern =
-#(define-music-function (parser location dash-fraction dash-period)
+#(define-music-function (dash-fraction dash-period)
(number? number?)
(_i "Set up a custom style of dash pattern for @var{dash-fraction}
ratio of line to space repeated at @var{dash-period} interval for ties.")
%% volta brackets
allowVoltaHook =
-#(define-void-function (parser location bar) (string?)
+#(define-void-function (bar) (string?)
(allow-volta-hook bar))
%% x notes
xNotesOn =
-#(define-music-function (parser location) ()
- (_i "Set the default note head style to a cross-shaped style.")
- (override-head-style '(TabNoteHead NoteHead) 'cross))
+#(define-music-function () ()
+ (_i "Set the default note head style to a cross-shaped style.")
+ (context-spec-music
+ (override-head-style '(TabNoteHead NoteHead) 'cross) 'Bottom))
xNotesOff = \defaultNoteHeads
xNote =
-#(define-music-function (parser location note) (ly:music?)
+#(define-music-function (note) (ly:music?)
(_i "Print @var{note} with a cross-shaped note head.")
(style-note-heads '(TabNoteHead NoteHead) 'cross note))
context structure for a score arrangement consisting
of the following staves:
- Descant Staff
+ Solo Staff (outside Choir grouping)
+ Descant Staff (within Choir grouping)
Women Staff (single voice on one staff)
Soprano and Alto (optionally on two Staves or one Staff each)
Multiple verses (up to 9)
\header { ... }
Key = { ... }
Time = { ... }
+ SoloMusic = \relative { ... }
DescantMusic = \relative { ... }
DescantLyrics = \lyricmode { ... }
WomenMusic = \relative { ... }
"Piano"
"PianoLH"
"PianoRH"
+ "Solo"
"Soprano"
"Tenor"
"Women"
satb-lyrics-postfixes
satb-lyrics-variable-names)
+%% override the usual default value
+#(if (not SoloShortInstrumentName)
+ (set! SoloShortInstrumentName ""))
SATB =
-{
+<<
+ \make-one-voice-vocal-staff "Solo" "treble"
\new ChoirStaff
\with {
\override VerticalAxisGroup.remove-empty = ##t
#} )
\make-one-voice-vocal-staff "Men" "bass"
>>
-}
+>>
Piano = \make-pianostaff
-%\version "2.19.19"
+%\version "2.19.22"
\include "voice-tkit.ly"
make-one-voice-staff =
-#(define-music-function (parser location show-instrName name clef dynamic-direction)
+#(define-music-function (show-instrName name clef dynamic-direction)
((boolean? #t) voice-prefix? string? (up-or-down? ""))
"Make a staff with one voice (no lyrics)
make-two-voice-staff =
-#(define-music-function (parser location name clef v1name v2name)
+#(define-music-function (name clef v1name v2name)
(voice-prefix? string? voice-prefix? voice-prefix?)
"Make a vocal staff with two voices
%%%% 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.16.0"
+\version "2.19.22"
%% A stringTuning is a list of pitches ordered by string number
%% from 1 to N.
%% lowest string number
stringTuning =
-#(define-scheme-function (parser location chord)
+#(define-scheme-function (chord)
(ly:music?)
(_i "Convert @var{chord} to a string tuning.
@var{chord} must be in absolute pitches and should have the highest
defaultStringTunings = #'()
makeDefaultStringTuning =
-#(define-void-function (parser location symbol pitches) (symbol? list?)
+#(define-void-function (symbol pitches) (symbol? list?)
(_i "This defines a string tuning @var{symbol} via a list of @var{pitches}.
The @var{symbol} also gets registered in @code{defaultStringTunings}
for documentation purposes.")
- (ly:parser-define! parser symbol pitches)
+ (ly:parser-define! (*parser*) symbol pitches)
(set! defaultStringTunings (acons symbol pitches defaultStringTunings)))
%% guitar tunings
-\version "2.16.0"
+\version "2.19.22"
%% defined later, in a closure
#(define-public (add-toc-item! markup-symbol text)
(toc-items)))))
tocItem =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
"Add a line to the table of content, using the @code{tocItemMarkup} paper
variable markup"
(add-toc-item! 'tocItemMarkup text))
-%\version "2.19.19"
+%\version "2.19.22"
\include "lyrics-tkit.ly"
\include "staff-tkit.ly"
make-one-voice-vocal-staff =
-#(define-music-function (parser location name clef)
+#(define-music-function (name clef)
(voice-prefix? string?)
"Make a staff with one voice and lyrics beneath
(make-music 'SequentialMusic 'void #t)))
make-two-voice-vocal-staff =
-#(define-music-function (parser location name clef v1name v2name)
+#(define-music-function (name clef v1name v2name)
(voice-prefix? string? voice-prefix? voice-prefix?)
"Make a vocal staff with two voices and lyrics above and below
make-two-vocal-staves-with-stanzas =
#(define-music-function
- (parser location
- upperName upperClef lowerName lowerClef
+ (upperName upperClef lowerName lowerClef
v1name v2name v3name v4name verses)
(voice-prefix? string? voice-prefix? string?
voice-prefix? voice-prefix? voice-prefix? voice-prefix? list?)
-%\version "2.19.19"
+%\version "2.19.22"
\include "base-tkit.ly"
make-voice =
-#(define-music-function (parser location name) (voice-prefix?)
+#(define-music-function (name) (voice-prefix?)
(define music (make-id name "Music"))
(if music
#{
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: lilypond 2.19.20\n"
+"Project-Id-Version: lilypond 2.19.21\n"
"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
"lilypond.bugs\n"
-"POT-Creation-Date: 2015-05-10 13:24+0100\n"
+"POT-Creation-Date: 2015-05-24 13:11+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "natural alteration glyph not found"
msgstr ""
-#: all-font-metrics.cc:149
+#: all-font-metrics.cc:159
#, c-format
msgid "cannot find font: `%s'"
msgstr ""
msgid "cannot find or create `%s' called `%s'"
msgstr ""
-#: context.cc:419
+#: context.cc:415
#, c-format
msgid "cannot find or create: `%s'"
msgstr ""
-#: context.cc:433
+#: context.cc:429
#, c-format
msgid "cannot find or create new Bottom = \"%s\""
msgstr ""
msgid "custos `%s' not found"
msgstr ""
-#: dispatcher.cc:83
+#: dispatcher.cc:82
msgid "Event class should be a list"
msgstr ""
-#: dispatcher.cc:166
+#: dispatcher.cc:165
#, c-format
msgid "Junking event: %s"
msgstr ""
-#: dispatcher.cc:271
+#: dispatcher.cc:279
msgid "Attempting to remove nonexisting listener."
msgstr ""
-#: dispatcher.cc:297
+#: dispatcher.cc:305
msgid "Already listening to dispatcher, ignoring request"
msgstr ""
msgid "type check for `%s' failed; value `%s' must be of type `%s'"
msgstr ""
+#. Uh oh. unsmob<T> delivered 0, yet
+#. unsmob<T> delivers true. This means that unsmob<T> is a
+#. matching check from a base class of T, but var is of an
+#. incompatible derived type.
+#: lily-guile.cc:462
+msgid "Wrong kind of "
+msgstr ""
+
#: lily-lexer.cc:249
msgid "include files are not allowed in safe mode"
msgstr ""
msgid "Not drawing a box with negative dimension, %.2f by %.2f."
msgstr ""
-#: lyric-combine-music-iterator.cc:204
+#: lyric-combine-music-iterator.cc:203
msgid "argument of \\lyricsto should contain Lyrics context"
msgstr ""
-#: lyric-combine-music-iterator.cc:349
+#: lyric-combine-music-iterator.cc:347
#, c-format
msgid "cannot find %s `%s'"
msgstr ""
msgid "unexpected case fall-through"
msgstr ""
-#: midi-control-function-performer.cc:109 staff-performer.cc:152
+#: midi-control-function-performer.cc:107 staff-performer.cc:152
#, c-format
msgid "ignoring out-of-range value change for MIDI property `%s'"
msgstr ""
msgid "rest `%s' not found"
msgstr ""
-#: score-engraver.cc:79
+#: score-engraver.cc:77
#, c-format
msgid "cannot find `%s'"
msgstr ""
-#: score-engraver.cc:81
+#: score-engraver.cc:79
msgid "Music font has not been installed properly."
msgstr ""
-#: score-engraver.cc:83
+#: score-engraver.cc:81
#, c-format
msgid "Search path `%s'"
msgstr ""
-#: score-engraver.cc:85
+#: score-engraver.cc:83
msgid "Aborting"
msgstr ""
msgid "strange time signature found: %d/%d"
msgstr ""
-#: translator-ctors.cc:65
+#: translator-ctors.cc:68
#, c-format
msgid "unknown translator: `%s'"
msgstr ""
msgid "fatal error. Couldn't find type: %s"
msgstr ""
-#: translator-group.cc:188
+#: translator-group.cc:187
#, c-format
msgid "cannot find: `%s'"
msgstr ""
-#: translator.cc:320
+#: translator.cc:310
#, c-format
msgid "Two simultaneous %s events, junking this one"
msgstr ""
-#: translator.cc:321
+#: translator.cc:311
#, c-format
msgid "Previous %s event here"
msgstr ""
msgid "`~a' failed (~a)\n"
msgstr ""
-#: backend-library.scm:94
+#: backend-library.scm:92
#, scheme-format
msgid "Converting to `~a'...\n"
msgstr ""
#. Do not try to guess the name of the png file,
#. GS produces PNG files like BASE-page%d.png.
-#: backend-library.scm:103
+#: backend-library.scm:102
#, scheme-format
msgid "Converting to ~a..."
msgstr ""
-#: backend-library.scm:141
+#: backend-library.scm:118
+#, scheme-format
+msgid "Copying to `~a'...\n"
+msgstr ""
+
+#: backend-library.scm:184
+#, scheme-format
+msgid "Deleting `~a'...\n"
+msgstr ""
+
+#: backend-library.scm:203
#, scheme-format
msgid "Writing header field `~a' to `~a'..."
msgstr ""
-#: backend-library.scm:190
+#: backend-library.scm:252
#, scheme-format
msgid "missing stencil expression `~S'"
msgstr ""
msgid "flag stroke `~a' or `~a' not found"
msgstr ""
-#: framework-eps.scm:108
+#: framework-eps.scm:112
#, scheme-format
msgid "Writing ~a..."
msgstr ""
msgid "do not know how to embed font ~s ~s ~s"
msgstr ""
-#: framework-ps.scm:729
+#: framework-ps.scm:723
msgid ""
"\n"
"The PostScript backend does not support the\n"
msgid "negative replication count; ignoring"
msgstr ""
-#: music-functions.scm:310
+#: music-functions.scm:311
#, scheme-format
msgid "invalid tremolo repeat count: ~a"
msgstr ""
-#: music-functions.scm:339
+#: music-functions.scm:340
#, scheme-format
msgid "unknown repeat type `~S': must be volta, unfold, percent, or tremolo"
msgstr ""
-#: music-functions.scm:343
+#: music-functions.scm:344
msgid "More alternatives than repeats. Junking excess alternatives"
msgstr ""
-#: music-functions.scm:479
+#: music-functions.scm:480
#, scheme-format
msgid "bad grob property path ~a"
msgstr ""
-#: music-functions.scm:778
+#: music-functions.scm:779
msgid "Bad chord repetition"
msgstr ""
-#: music-functions.scm:883
+#: music-functions.scm:884
#, scheme-format
msgid "music expected: ~S"
msgstr ""
-#: music-functions.scm:1225
+#: music-functions.scm:1226
#, scheme-format
msgid "cannot find quoted music: `~S'"
msgstr ""
-#: music-functions.scm:1365
+#: music-functions.scm:1366
msgid "Add @var{octave-shift} to the octave of @var{pitch}."
msgstr ""
-#: music-functions.scm:1428
+#: music-functions.scm:1429
#, scheme-format
msgid "Unknown octaveness type: ~S "
msgstr ""
-#: music-functions.scm:1429
+#: music-functions.scm:1430
msgid "Defaulting to 'any-octave."
msgstr ""
-#: music-functions.scm:1821
+#: music-functions.scm:1822
#, scheme-format
msgid "unknown accidental style: ~S"
msgstr ""
-#: music-functions.scm:2039
+#: music-functions.scm:2040
msgid "Missing duration"
msgstr ""
-#: music-functions.scm:2548
+#: music-functions.scm:2549
#, scheme-format
msgid "not a symbol list: ~a"
msgstr ""
-#: music-functions.scm:2551
+#: music-functions.scm:2552
#, scheme-format
msgid "conflicting tag group ~a"
msgstr ""
msgid "error in #{ ... #}"
msgstr ""
-#: part-combiner.scm:830
+#: part-combiner.scm:828
#, scheme-format
msgid "quoted music `~a' is empty"
msgstr ""
return r"[^{}]*?(?:{"*n+r"[^{}]*?"+r"}[^{}]*?)*?"*n
matchstring = r'"(?:[^"\\]|\\.)*"'
-matcharg = (r"\s+(?:[$#]['`]?\s*(?:[a-zA-Z]\S*|" + matchstring + r"|\("
- + paren_matcher(20) + r"\))|" + matchstring + r"|\\[a-z_A-Z]+)")
-matchmarkup = (r'(?:\\markup\s*(?:{' + brace_matcher (20) +r'}|' +
+matcharg = (r"\s+(?:[$#]['`]?\s*(?:[a-zA-Z][^ \t\n()\\]*|" + matchstring
+ + r"|#?\(" + paren_matcher(20) + r"\)|"
+ + r"-?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)|"
+ + r"#(?:[tf]|\\.|@?\{" + brace_matcher (10) + r"#@?\}))|"
+ + matchstring + r"|\\[a-z_A-Z]+|[0-9]+(?:/[0-9]+)?|-[0-9]+)")
+matchmarkup = (r'(?:\\markup\s*(?:@?\{' + brace_matcher (20) +r'\}|' +
matchstring + r'|(?:\\[a-z_A-Z][a-z_A-Z-]*(?:' + matcharg +
- r')*?\s*)*(?:' + matchstring + "|{" + brace_matcher (20) +
- "}))|" + matchstring + ")")
+ r')*?\s*)*(?:' + matchstring + r"|@?\{" + brace_matcher (20) +
+ r"\}))|" + matchstring + ")")
@rule((2, 15, 25), r"\(auto)?Footnote(Grob)? -> \footnote")
def conv (str):
@rule((2, 17, 27), r'''\stringTuning \notemode -> \stringTuning''')
def conv(str):
- str = re.sub (r"\\stringTuning\s*\\notemode(\s*)@?\{\s*(.*?)\s*@?}",
+ str = re.sub (r"\\stringTuning\s*\\notemode(\s*)@?\{\s*(.*?)\s*@?\}",
r"\\stringTuning\1\2", str)
if re.search (r'[^-\w]staff-padding[^-\w]', str):
stderr_write (NOT_SMART % "staff-padding")
+ after_id, r'\1-\2', str)
return str
+@rule ((2, 19, 22), "(define-xxx-function (parser location ...) -> (define-xxx-function (...)")
+def conv(str):
+ def subst(m):
+ def subsub(m):
+ str = (m.group (1)
+ + re.sub ('(?<=\s|["\\()])' + m.group (2) + r'(?=\s|["\\()])',
+ r'(*location*)',
+ re.sub (r'(?<=\s|["\\()])parser(?=\s|["\\()])',
+ r'(*parser*)', m.group (3))))
+ return str
+ return re.sub (r'(\([-a-z]+\s*\(+)parser\s+([-a-z]+)\s*((?:.|\n)*)$',
+ subsub, m.group (0))
+ str = re.sub (r'\(define-(?:music|event|scheme|void)-function(?=\s|["(])'
+ + paren_matcher (20) + r'\)', subst, str)
+ return str
+
# Guidelines to write rules (please keep this at the end of this file)
#
# - keep at most one rule per version; if several conversions should be done,
(ly:assoc-get 'reedbanks register))))))))
(define-public ,set-symbol
- (define-music-function (parser position register)
+ (define-music-function (register)
(string?)
,(format #f "Equivalent to @code{<>^\\markup \\~a@var{REGISTER}}."
set-symbol)
(music 'ContextSpeccedMusic
context-id "shared"
context-type 'Voice)
+ (music 'ContextSpeccedMusic
+ context-id "solo"
+ context-type 'Voice)
+ (music 'ContextSpeccedMusic
+ context-id "null"
+ context-type 'NullVoice)
?pc-music))))
(with-music-match
(?pc-music (music 'PartCombineMusic))
))
(RelativeOctaveMusic
- . ((description . "Music that was entered in relative octave notation.")
+ . ((description . "Music in which the assignment of octaves is complete.")
(to-relative-callback . ,ly:relative-octave-music::relative-callback)
(iterator-ctor . ,ly:music-wrapper-iterator::constructor)
(length-callback . ,ly:music-wrapper::length-callback)
(car this-list)
;; fret
(- (second this-list) base-fret)
- ;; finger
- (if (or (null? (cddr this-list))
- (not (number? (caddr this-list))))
- '()
- (third this-list))
+ ;; finger-number or markup
+ (if (and (not (null? (cddr this-list)))
+ (or (markup? (caddr this-list))
+ (number? (caddr this-list))))
+ (third this-list)
+ '())
;; inverted
(dot-is-inverted this-list)
;; parenthesis
(string-downcase
(car (string-tokenize (utsname:sysname (uname)) char-set:letter)))))
+;; We don't use (srfi srfi-39) (parameter objects) here because that
+;; does not give us a name/handle to the underlying fluids themselves.
+
+(define %parser (make-fluid))
+(define %location (make-fluid))
+;; No public setters: should not get overwritten in action
+(define-public (*parser*) (fluid-ref %parser))
+(define-public (*location*) (fluid-ref %location))
+
+;; It would be nice to convert occurences of parser/location to
+;; (*parser*)/(*location*) using the syncase module but it is utterly
+;; broken in GUILE 1 and would require changing a lot of unrelated
+;; innocuous constructs which just happen to fall apart with
+;; inscrutable error messages.
+
;;
;; Session-handling variables and procedures.
;;
(let* ((sig (ly:music-function-signature fun))
(pred (if (pair? (car sig)) (caar sig) (car sig)))
(good (proper-list? args))
- (m (and good (apply (ly:music-function-extract fun)
- parser loc (reverse! args rest)))))
+ (m (and good (with-fluids ((%parser parser) (%location loc))
+ (apply (ly:music-function-extract fun)
+ (reverse! args rest))))))
(if (and good (pred m))
(begin
(if (ly:music? m)
(defmacro-public def-grace-function (start stop . docstring)
"Helper macro for defining grace music"
- `(define-music-function (parser location music) (ly:music?)
+ `(define-music-function (music) (ly:music?)
,@docstring
(make-music 'GraceMusic
- 'origin location
'element (make-music 'SequentialMusic
'elements (list (ly:music-deep-copy ,start)
music
(defmacro-public define-syntax-function (type args signature . body)
"Helper macro for `ly:make-music-function'.
Syntax:
- (define-syntax-function result-type? (parser location arg1 arg2 ...) (arg1-type arg2-type ...)
+ (define-syntax-function result-type? (arg1 arg2 ...) (arg1-type arg2-type ...)
...function body...)
argX-type can take one of the forms @code{predicate?} for mandatory
predicates, to be used in case of a type error in arguments or
result."
+ (define (has-parser/location? arg where)
+ (let loop ((arg arg))
+ (if (list? arg)
+ (any loop arg)
+ (memq arg where))))
(define (currying-lambda args doc-string? body)
(if (and (pair? args)
(pair? (car args)))
(currying-lambda (car args) doc-string?
`((lambda ,(cdr args) ,@body)))
- `(lambda ,args
- ,(format #f "~a\n~a" (cddr args) (or doc-string? ""))
- ,@body)))
-
- (set! signature (map (lambda (pred)
- (if (pair? pred)
- `(cons ,(car pred)
- ,(and (pair? (cdr pred)) (cadr pred)))
- pred))
- (cons type signature)))
+ (let* ((compatibility? (if (list? args)
+ (= (length args) (+ 2 (length signature)))
+ (and (pair? args) (pair? (cdr args))
+ (eq? (car args) 'parser))))
+ (realargs (if compatibility? (cddr args) args)))
+ `(lambda ,realargs
+ ,(format #f "~a\n~a" realargs (or doc-string? ""))
+ ,@(if (and compatibility?
+ (has-parser/location? body (take args 2)))
+ `((let ((,(car args) (*parser*)) (,(cadr args) (*location*)))
+ ,@body))
+ body)))))
(let ((docstring
(and (pair? body) (pair? (cdr body))
;; When the music function definition contains an i10n doc string,
;; (_i "doc string"), keep the literal string only
`(ly:make-music-function
- (list ,@signature)
+ (list ,@(map (lambda (pred)
+ (if (pair? pred)
+ `(cons ,(car pred)
+ ,(and (pair? (cdr pred)) (cadr pred)))
+ pred))
+ (cons type signature)))
,(currying-lambda args docstring (if docstring (cdr body) body)))))
(defmacro-public define-music-function rest
"Defining macro returning music functions.
Syntax:
- (define-music-function (parser location arg1 arg2 ...) (arg1-type? arg2-type? ...)
+ (define-music-function (arg1 arg2 ...) (arg1-type? arg2-type? ...)
...function body...)
argX-type can take one of the forms @code{predicate?} for mandatory
(defmacro-public define-scheme-function rest
"Defining macro returning Scheme functions.
Syntax:
- (define-scheme-function (parser location arg1 arg2 ...) (arg1-type? arg2-type? ...)
+ (define-scheme-function (arg1 arg2 ...) (arg1-type? arg2-type? ...)
...function body...)
argX-type can take one of the forms @code{predicate?} for mandatory
(defmacro-public define-event-function rest
"Defining macro returning event functions.
Syntax:
- (define-event-function (parser location arg1 arg2 ...) (arg1-type? arg2-type? ...)
+ (define-event-function (arg1 arg2 ...) (arg1-type? arg2-type? ...)
...function body...)
argX-type can take one of the forms @code{predicate?} for mandatory
(ly:parser-error parser (_ "error in #{ ... #}")))
result))
(list embedded-lilypond
- 'parser lily-string filename line
+ (list *parser*) lily-string filename line
(cons 'list (reverse! closures))
- 'location)))
+ (list *location*))))
(read-hash-extend #\{ read-lily-expression)
(note-events vs))
note<?))
-(define-method (rest-and-skip-events (vs <Voice-state>))
- (define (f? x)
- (or (ly:in-event-class? x 'rest-event)
- (ly:in-event-class? x 'skip-event)))
- (filter f? (events vs)))
+(define-method (rest-or-skip-events (vs <Voice-state>))
+ (define (filtered-events event-class)
+ (filter (lambda(x) (ly:in-event-class? x event-class))
+ (events vs)))
+ (let ((result (filtered-events 'rest-event)))
+ ;; There may be skips in the same part with rests for various
+ ;; reasons. Regard the skips only if there are no rests.
+ (if (and (not (pair? result)) (not (any-mmrest-events vs)))
+ (set! result (filtered-events 'skip-event)))
+ result))
(define-method (any-mmrest-events (vs <Voice-state>))
(define (f? x)
(vs2 (cdr (voice-states now-state))))
(define (analyse-synced-silence)
- (let ((rests1 (if vs1 (rest-and-skip-events vs1) '()))
- (rests2 (if vs2 (rest-and-skip-events vs2) '())))
+ (let ((rests1 (if vs1 (rest-or-skip-events vs1) '()))
+ (rests2 (if vs2 (rest-or-skip-events vs2) '())))
(cond
;; multi-measure rests (probably), which the
(let* ((now-state (vector-ref result result-idx))
(vs1 (current-voice-state now-state 1))
(vs2 (current-voice-state now-state 2))
- (rests1 (if vs1 (rest-and-skip-events vs1) '()))
- (rests2 (if vs2 (rest-and-skip-events vs2) '()))
+ (rests1 (if vs1 (rest-or-skip-events vs1) '()))
+ (rests2 (if vs2 (rest-or-skip-events vs2) '()))
(prev-state (if (> result-idx 0)
(vector-ref result (- result-idx 1))
#f))
(define-public _ gettext)
-(define PLATFORM
- (string->symbol
- (string-downcase
- (car (string-tokenize (utsname:sysname (uname)) char-set:letter)))))
-
(define (re-sub re sub string)
(regexp-substitute/global #f re string 'pre sub 'post))
-(define (search-executable names)
- (define (helper path lst)
- (if (null? (cdr lst))
- (car lst)
- (if (search-path path (car lst)) (car lst)
- (helper path (cdr lst)))))
-
- (let ((path (parse-path (getenv "PATH"))))
- (helper path names)))
-
-(define (search-gs)
- (search-executable '("gs-nox" "gs-8.15" "gs")))
-
-(define (gulp-port port max-length)
- (let ((str (make-string max-length)))
- (read-string!/partial str port 0 max-length)
- str))
-
(define-public (gulp-file file-name . max-size)
(ly:gulp-file file-name (if (pair? max-size) (car max-size))))
(if exit-on-error (exit 1))))
status)
-(define (scale-down-image be-verbose factor file)
- (define (with-pbm)
- (let* ((status 0)
- (old (string-append file ".old")))
-
- (rename-file file old)
- (my-system
- be-verbose #t
- (format #f
- "pngtopnm \"~a\" | pnmscale -reduce ~a 2>/dev/null | pnmtopng -compression 9 2>/dev/null > \"~a\""
- old factor file))
- (delete-file old)))
-
- (with-pbm))
+(define (scale-down-image factor file)
+ (let* ((old (string-append file ".old"))
+ ;; Netpbm commands (pngtopnm, pnmscale, pnmtopng)
+ ;; outputs only standard output instead of a file.
+ ;; So we need pipe and redirection.
+ ;; However, ly:system can't handle them.
+ ;; Therefore, we use /bin/sh for handling them.
+ ;; FIXME: MinGW (except Cygwin) doesn't have /bin/sh.
+ (cmd
+ (list
+ "/bin/sh"
+ "-c"
+ (ly:format
+ "pngtopnm \"~a\" | pnmscale -reduce ~a | pnmtopng -compression 9 > \"~a\""
+ old factor file))))
+
+ (rename-file file old)
+ (ly:system cmd)
+ (delete-file old)))
(define-public (ps-page-count ps-name)
(let* ((byte-count 10240)
(pngn (format #f "~a-page%d.~a" base-name extension))
(page-count (ps-page-count tmp-name))
(multi-page? (> page-count 1))
- (output-file (if multi-page? pngn png1))
-
- (gs-variable-options
- (if is-eps
- "-dEPSCrop"
- (format #f "-dDEVICEWIDTHPOINTS=~,2f -dDEVICEHEIGHTPOINTS=~,2f"
- page-width page-height)))
- (cmd (ly:format "~a\
- ~a\
- ~a\
- -dGraphicsAlphaBits=4\
- -dTextAlphaBits=4\
- -dNOPAUSE\
- -sDEVICE=~a\
- -sOutputFile=~S\
- -r~a\
- ~S\
- -c quit"
- (search-gs)
- (if be-verbose "" "-q")
- gs-variable-options
- pixmap-format
- output-file
- (* anti-alias-factor resolution) tmp-name))
- (status 0)
- (files '()))
- ;; The wrapper on windows cannot handle `=' signs,
- ;; gs has a workaround with #.
- (if (eq? PLATFORM 'windows)
- (begin
- (set! cmd (re-sub "=" "#" cmd))
- (set! cmd (re-sub "-dSAFER " "" cmd))))
+ ;; Escape `%' (except `page%d') for ghostscript
+ (base-name-gs (string-join
+ (string-split base-name #\%)
+ "%%"))
+ (png1-gs (format #f "~a.~a" base-name-gs extension))
+ (pngn-gs (format #f "~a-page%d.~a" base-name-gs extension))
+ (output-file (if multi-page? pngn-gs png1-gs))
+
+ (*unspecified* (if #f #f))
+ (cmd
+ (remove (lambda (x) (eq? x *unspecified*))
+ (list
+ (search-gs)
+ (if (ly:get-option 'verbose) *unspecified* "-q")
+ (if (or (ly:get-option 'gs-load-fonts)
+ (ly:get-option 'gs-load-lily-fonts)
+ (eq? PLATFORM 'windows))
+ "-dNOSAFER"
+ "-dSAFER")
+
+ (if is-eps
+ "-dEPSCrop"
+ (ly:format "-dDEVICEWIDTHPOINTS=~$" page-width))
+ (if is-eps
+ *unspecified*
+ (ly:format "-dDEVICEHEIGHTPOINTS=~$" page-height))
+ "-dGraphicsAlphaBits=4"
+ "-dTextAlphaBits=4"
+ "-dNOPAUSE"
+ "-dBATCH"
+ (ly:format "-sDEVICE=~a" pixmap-format)
+ (string-append "-sOutputFile=" output-file)
+ (ly:format "-r~a" (* anti-alias-factor resolution))
+ (string-append "-f" tmp-name))))
+ (files '()))
- (set! status (my-system be-verbose #f cmd))
+ (ly:system cmd)
(set! files
(if multi-page?
(iota page-count))
(list (format #f "~a.png" base-name))))
- (if (not (= 0 status))
- (begin
- (for-each delete-file files)
- (exit 1)))
-
(if (and rename-page-1 multi-page?)
(begin
(rename-file (re-sub "%d" "1" pngn) png1)
(if (not (= 1 anti-alias-factor))
(for-each
- (lambda (f) (scale-down-image be-verbose anti-alias-factor f)) files))
+ (lambda (f) (scale-down-image anti-alias-factor f)) files))
files)))
s = strip_white_spaces_re.sub ('', s)
s = final_empty_lines_re.sub ('\n', s)
s = escape_backslashes_in_header (s)
+ s = s.replace ("\r\n", "\n")
sys.stderr.write ("makelsr.py: writing %s\n" % dest)
open (dest, 'w').write (s)
### update manuals
find Documentation/ -path 'Documentation/snippets' -prune -o -name out -prune \
-o -name 'out-*' -prune -o -name '*.itely' -print \
- | xargs $BUILD_DIR/out/bin/convert-ly -e -d
+ | xargs $BUILD_DIR/out/bin/convert-ly -e -d "$@"
### update .ly files
# don't look in . otherwise it'll find stuff in build/ !
find Documentation/ input/ ly/ -name out -prune -o -name 'out-*' -prune \
-o \( -name '*.ly' -o -name '*.ily' \) -print \
- | xargs $BUILD_DIR/out/bin/convert-ly -e -d
+ | xargs $BUILD_DIR/out/bin/convert-ly -e -d "$@"
else:
input = sys.stdin.read ()
- from_version = None
to_version = None
- if global_options.from_version:
- from_version = global_options.from_version
- else:
- guess = guess_lilypond_version (input)
- if not guess:
- raise UnknownVersion ()
- from_version = str_to_tuple (guess)
+ org_version = None
+ guess = guess_lilypond_version (input)
+ org_version = guess and str_to_tuple (guess)
+ from_version = global_options.from_version or org_version
+ if not from_version:
+ raise UnknownVersion ()
if global_options.to_version:
to_version = global_options.to_version
# the same if two conversion rules cancelled out
if result == input:
# make no (actual) change to the version number
- last = from_version
+ last = org_version or from_version
else:
last = last_change
# If the last update was to an unstable version
\catcode\count255=#1\relax
\advance\count255 by 1
\repeat
-
}
% @documentencoding sets the definition of non-ASCII characters