--- /dev/null
+;;; Directory Local Variables
+;;; See Info node `(emacs) Directory Variables' for more information.
+
+((c++-mode
+ (c-default-style . "gnu")
+ (indent-tabs-mode))
+ (scheme-mode
+ (indent-tabs-mode))
+ (texinfo-mode
+ (fill-column . 66)
+ (indent-tabs-mode)))
\#*
\#.*
a.out
-aclocal.m4
autom4te.cache
config-*.hh
config-*.make
semantic.cache
.lock-wscript
build/
+.gitfilelist
NAME = documentation
LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py)
-MANUALS_SUBDIRS = usage contributor essay \
- web learning notation extending
-SUBDIRS = $(MANUALS_SUBDIRS) snippets logo pictures misc po css topdocs \
- included ly-examples $(LANGS)
+SUBDIRS = logo pictures misc po css topdocs \
+ ly-examples $(LANGS)
STEPMAKE_TEMPLATES = documentation texinfo tex omf
LOCALSTEPMAKE_TEMPLATES = lilypond ly
### Extra source files
-README_TOP_FILES= DEDICATION THANKS
+README_TOP_FILES= DEDICATION
IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely)
SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly)
OUT_SNIPPET_LY_FILES = $(SNIPPET_LY_FILES:%.ly=out/%.ly)
-EXTRA_DIST_FILES = $(call src-wildcard,*.init) $(call src-wildcard,*.bst)
-
### Out files
# Dependencies
### AJAX scripts
JS_FILES = $(call src-wildcard,*.js)
PHP_FILES = $(call src-wildcard,*.php)
-EXTRA_DIST_FILES += $(JS_FILES) $(PHP_FILES)
OUT_JS_FILES = $(JS_FILES:%.js=$(outdir)/%.js)
OUT_PHP_FILES = $(PHP_FILES:%.php=$(outdir)/%.php)
BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \
-s $(top-src-dir)/Documentation/lily-bib \
-o $(outdir)/colorado.itexi \
+ -q \
$(src-dir)/essay/colorado.bib
$(outdir)/computer-notation.itexi:
BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \
-s $(top-src-dir)/Documentation/lily-bib \
-o $(outdir)/computer-notation.itexi \
+ -q \
$(src-dir)/essay/computer-notation.bib
$(outdir)/engravingbib.itexi:
BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \
-s $(top-src-dir)/Documentation/lily-bib \
-o $(outdir)/engravingbib.itexi \
+ -q \
$(src-dir)/essay/engravingbib.bib
$(outdir)/essay.texi: \
@echo
info: $(INFO_FILES)
- @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
- @echo export PYTHONPATH=$(PYTHONPATH)
xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
cp -f $< $@
$(OUT_TXT_FILES:%.txt=%.html): $(outdir)/%.html: $(outdir)/%.txt
- $(PYTHON) $(step-bindir)/text2html.py $<
+ $(buildscript-dir)/text2html $<
# Explicitly list the dependencies on generated content
$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi
ifneq ($(ISOLANG),)
new-lang-dir:
mkdir -p $(ISOLANG)/$(DIR)
- cp fr/GNUmakefile $(ISOLANG)
- cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
- sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
rm -f $(outdir)/*.*tely $(outdir)/*.*texi
$(PYTHON) $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
new-lang:
# Also for updating/adding missing files
- mkdir -p $(ISOLANG)
+ mkdir -p $(ISOLANG)/included
+ if test -z "`ls $(ISOLANG)/included`"; then touch $(ISOLANG)/included/.gitignore; fi
+ cp fr/GNUmakefile $(ISOLANG)
+ sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile
$(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
@finalout
-@node Top, Fixes and changes after 2.16.0, (dir), (dir)
-@top New features in 2.16
-
-@menu
-* Fixes and changes after 2.16.0::
-* New features in 2.16 since 2.14::
-@end menu
-
+@node Top
+@top New features in 2.18 since 2.16
@allowcodebreaks false
-@node Fixes and changes after 2.16.0, New features in 2.16 since 2.14, Top, Top
-@section Fixes and changes after 2.16.0
-@table @b
-@item 2.16.1
-Please refer to the bug tracker for
-@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=Fixed_2_16_1,
-issues fixed in 2.16.1}.
-@end table
-
-@node New features in 2.16 since 2.14, , Fixes and changes after 2.16.0, Top
-@section New features in 2.16 since 2.14
@itemize
@ignore
* only show user-visible changes.
@end ignore
-@item
-Support for cross-staff stems on chords, using @code{crossStaff}
-and the @code{Span_stem_engraver}. This calculates the length of
-cross-staff stems automatically.
-@lilypondfile[quote]
-{cross-staff-stems.ly}
-
-@item
-The syntax of words (character sequences recognized without enclosing
-quotes) and commands (now always a backslash @samp{\} followed by a
-word) has been unified across all modes: it now consists of alphabetic
-characters, possibly enclosing isolated dashes @samp{-} and underlines
-@samp{_}.
-
-As one consequence, using unquoted text scripts like (literally!)
-@example
-@{ c-script c\f_script @}
-@end example
-will now tend to result in invalid music. Omitting quote marks
-for arbitrary text rather than keywords has never been good practice or
-even documented, and it is unlikely to have seen significant use.
-
-Staying with established conventions (like not using dashes or
-underlines for command names intended to be used inside of music)
-remains advisable. The reason for this change is more robust
-recognition of LilyPond's lexical units for LilyPond itself as well as
-external tools interpreting its syntax.
-
-@item
-Support for Kievan square notation:
-@lilypond[quote,relative=1,verbatim]
-\new KievanVoice {
- \cadenzaOn
- c d e f g a bes
- \bar "kievan"
-}
-@end lilypond
@item
-Augmentation dots now avoid the other voice in two-voice polyphony
-so that users can move the @code{Dot_column_engraver} to set dots
-independently for each @code{Voice}.
-@lilypond[quote]
-\layout {
- \context {
- \Staff
- \remove Dot_column_engraver
- } \context {
- \Voice
- \consists Dot_column_engraver
- }
-}
-\relative c'' <<
- { \time 6/8
- <d f g>4. <d f g> <f, g> b
- } \\ {
- <f g b>4. <g b d> <b d> <e, g>
- } >>
+The @code{\clef} command supports optional octavation:
+@lilypond[verbatim,quote,relative=1]
+\clef "treble_(8)"
+c2 c
+\clef "bass^[15]"
+c2 c
@end lilypond
@item
-A Scheme function to adjust the control points of curves such as slurs
-and ties, developed by several users, is now included in LilyPond.
-@lilypond[quote,verbatim,relative=2]
-g8->( bes,-.) d4
-\shape Slur #'((-0.5 . 1.5) (-3 . 0) (0 . 0) (0 . 0))
-g8->( bes,!-.) d4
-@end lilypond
-
-@item
-Use of @code{\tempo} specifications in @code{\midi} blocks (removed in
-2.9.16 in favor of explicit @code{tempoWholesPerMinute} settings) has
-seen a revival: now any kind of property-setting music is turned into
-context definitions within output specifications, allowing for
-declarations like
+The LilyPond syntax of dot-separated words @code{Voice.Accidental}
+has been made interchangeable with @code{#'(Voice Accidental)}, a
+Scheme list of symbols. As one result, code like
@example
-\layout @{ \accidentalStyle modern @}
-\midi @{ \tempo 4. = 66 @}
+\override Voice.TextSpanner #'(bound-details left text) = "rit."
+@end example
+is now equivalent to
+@example
+\override Voice.TextSpanner bound-details.left.text = "rit."
+@end example
+or even
+@example
+\override #'(Voice TextSpanner) bound-details.left.text = "rit."
@end example
@item
-The LilyPond G clef has been redesigned - upper loop is now more balanced,
-bottom crook sticks out less and the "spine" (main vertical line) is more
-evenly curved. The old and new versions can be compared by looking at the
-documentation:
-@uref{http://lilypond.org/doc/v2.14/Documentation/notation/the-feta-font.html#clef-glyphs, old version},
-@uref{http://lilypond.org/doc/v2.15/Documentation/notation/the-feta-font.html#clef-glyphs, new version}.
-
-@item
-Lilypond's stencil commands have been simplified to allow for less code
-duplication and better height approximations of graphical objects. The
-following stencil commands have been eliminated:
-@itemize
-@item @code{beam}
-@item @code{bezier-sandwich}
-@item @code{bracket}
-@item @code{dashed-slur}
-@item @code{dot}
-@item @code{oval}
-@item @code{repeat-slash}
-@item @code{zigzag-line}
-@end itemize
-
-@item
-Flags are now treated as separate objects rather than as stem parts.
-@lilypond[fragment,quote,relative=2]
-\override Flag #'color = #red
-g8
-@end lilypond
-
-@item
-Two alternative methods for bar numbering can be set, especially for
-when using repeated music;
-
-@lilypond[fragment,quote,relative=1,noragged-right]
-\relative c'{
- \set Score.alternativeNumberingStyle = #'numbers
- \repeat volta 3 { c4 d e f | }
- \alternative {
- { c4 d e f | c2 d \break }
- { f4 g a b | f4 g a b | f2 a | \break }
- { c4 d e f | c2 d }
- }
- c1 \break
- \set Score.alternativeNumberingStyle = #'numbers-with-letters
- \repeat volta 3 { c,4 d e f | }
- \alternative {
- { c4 d e f | c2 d \break }
- { f4 g a b | f4 g a b | f2 a | \break }
- { c4 d e f | c2 d }
- }
- c1
-}
-@end lilypond
-
-@item
-The following is a fundamental change in LilyPond's music
-representation: Rhythmic events like @code{LyricEvent} and
-@code{NoteEvent} are no longer wrapped in @code{EventChord} unless they
-have been actually entered as part of a chord in the input. If you
-manipulate music expressions in Scheme, the new behavior may require
-changes in your code. Calling the music function @code{\eventChords} or
-the Scheme function @code{event-chord-wrap!} converts to the old
-representation; using one of those might be easiest for keeping legacy
-code operative.
-
-The following three items are consequences of this change.
-
-@item
-The repetitive chord entry aid @code{q} has been reimplemented.
-Repeated chords are now replaced right before interpreting a music
-expression. In case the user wants to retain some events of the
-original chord, he can run the repeat chord replacement function
-@code{\chordRepeats} manually.
-
-@item
-String numbers and right hand fingerings on single notes now appear
-without having to be written inside of chord brackets.
-
-@item
-Music functions now work the same when used inside or outside of chords,
-including all the possibilities of argument parsing. Music variables
-can be used inside of chords: a construct like
-@lilypond[verbatim,quote,ragged-right]
-tonic=fis'
-{ <\tonic \transpose c g \tonic> }
-@end lilypond
-@noindent
-now works as expected. One can use @code{#@{@dots{}#@}} for
-constructing chord constituents. @code{\tweak} now works on single
-notes without needing to wrap them in a chord. Using it on command
-events and lyrics is now possible, but not likely to give results yet.
-
-@item
-@code{\tweak} now takes an optional layout object specification. It can
-be used for tweaking layout objects that are only indirectly caused by
-the tweaked event, like accidentals, stems, and flags:
-
-@lilypond[verbatim,quote,ragged-right,relative=2]
-<\tweak Accidental #'color #red cis4
- \tweak Accidental #'color #green es
- g>
-@end lilypond
-
-@item
-Scheme expressions inside of embedded Lilypond (@code{#@{@dots{}#@}})
-are now executed in lexical closure of the surrounding Scheme code.
-@code{$} is no longer special in embedded Lilypond. It can be used
-unconditionally in Lilypond code for immediate evaluation of Scheme
-expressions, similar to how @code{ly:export} could previously be used.
-@code{ly:export} has been removed. As a consequence, @code{#} is now
-free to delay evaluation of its argument until the parser actually
-reduces the containing expression, greatly reducing the potential for
-premature evaluation. There are also @q{splicing} operators @code{$@@}
-and @code{#@@} for interpreting the members of a list individually.
-
-@item
-To reduce the necessity for using @code{$}, Scheme expressions written
-with @code{#} are interpreted as music inside of music lists, and as
-markups or markup lists inside of markups.
-
-@item
-Support for jazz-like chords has been improved: Lydian and altered
-chords are recognised; separators between chord modifiers are now
-treated independently of separators between ``slash'' chords and their
-bass notes (and by default, slashes are now only used for the latter
-type of separator); additional pitches are no longer prefixed with
-``add'' by default; and the ``m'' in minor chords can be customized.
-@ruser{Customizing chord names} for more information.
-
-@item
-The @code{\markuplines} command has been renamed to @code{\markuplist}
-for a better match with its semantics and general Lilypond
-nomenclature.
-
-@item
-The interface for specifying string tunings in tablature has been
-simplified considerably and employs the scheme function
-@code{\stringTuning} for most purposes.
-
-@item
-Beams can now have their slopes preserved over line breaks.
-@lilypond[fragment,quote,relative=2]
-\override Beam #'breakable = ##t
-a8[ b c d e f g \bar "" \break f e d c b a]
-\once \override Beam #'positions = #beam::align-with-broken-parts
-a8[ b c d e f g \bar "" \break f e d c b a]
-\once \override Beam #'positions = #beam::slope-like-broken-parts
-a8[ b c d e f g \bar "" \break f e d c b a]
-@end lilypond
-To do this, several callback functions are now deprecated.
-@itemize
-@item @code{ly:beam::calc-least-squares-positions}
-@item @code{ly:beam::slope-damping}
-@item @code{ly:beam::shift-region-to-valid}
-@end itemize
-Furthermore, @code{ly:beam::quanting} now takes an additional argument
-to help calculations over line breaks. All of these functions are now
-automatically called when setting the @code{positions} parameter.
-
-@item
-In function arguments music, markups and Scheme expressions (as well as
-several other syntactic entities) have become mostly interchangeable and
-are told apart only by evaluating the respective predicate. In several
-cases, the predicate is consulted by the parser, like when deciding
-whether to interpret @code{-3} as a number or a fingering event.
-
-@item
-Music functions (and their close relatives) can now be defined with
-optional arguments.
-
-@item
-For defining commands executed only for their side-effects,
-@code{define-void-function} is now available.
-
-@item
-There is a new @code{define-event-function} command in analogy to
-@code{define-music-function} that can be used for defining music
-functions acting as post events without requiring a direction specifier
-(@code{-}, @code{^}, or @code{_}) placed before them.
-@lilypond[quote,verbatim,ragged-right]
-dyn=#(define-event-function (parser location arg) (markup?)
- (make-dynamic-script arg))
-\relative c' { c\dyn pfsss }
-@end lilypond
-
-@item
-A list of ASCII aliases for special characters can be included.
-@lilypond[quote,verbatim]
-\paper {
- #(include-special-characters)
-}
-\markup "• † ©right; &OE; &ss; ¶"
-@end lilypond
-
-@item
-There is a new @code{define-scheme-function} command in analogy to
-@code{define-music-function} that can be used to define functions
-evaluating to Scheme expressions while accepting arguments in Lilypond
-syntax.
-
-@item
-The construct @code{#@{ @dots{} #@}} can now be used not just for
-constructing sequential music lists, but also for pitches (distinguished
-from single note events by the absence of a duration or other
-information that can't be part of a pitch), single music events, void
-music expressions, post events, markups (mostly freeing users from
-having to use the @code{markup} macro), markup lists, number
-expressions, context definitions and modifications, and a few other
-things. If it encloses nothing or only a single music event, it no
-longer returns a sequential music list but rather a void music
-expression or just the music event itself, respectively.
-
-@item
-Pitches can be used on the right side of assignments. They are
-distinguished from single note events by the absence of a duration or
-other information that can't be part of a pitch.
-
-@item
-New command-line option @option{--loglevel=@var{level}} to control how much output
-LilyPond creates. Possible values are ERROR, WARN, BASIC_PROGRESS, PROGRESS, DEBUG.
-
-@item
-@code{\once \set} now correctly resets the property value to the previous value.
-@lilypond[fragment,quote,relative=2]
- \set fingeringOrientations = #'(left)
- <e-1>4
- \once \set fingeringOrientations = #'(right)
- <e-1>
- <e-1>-"left"
-@end lilypond
-
-@item
-The alignment of dynamic spanners (hairpins, text crescendo, etc.) is now
-automatically broken if a different direction is explicitly given.
-@lilypond[fragment,quote,relative=2]
-c4_\< c c^\> c c1_\p
-@end lilypond
-
-
-@item
-Appoggiaturas and acciaccaturas now also work inside a slur, not only inside
-a phrasing slur. Also, a function @code{\slashedGrace} was added that does
-not use a slur from the acciaccatura note.
-@lilypond[fragment,quote,relative=2]
-c4( \appoggiatura e8 d4 \acciaccatura e8 d4 \slashedGrace e8 c4)
-@end lilypond
-
-
-@item
-To suppress the line on a crescendo text spanner (and other similar spanners),
-LilyPond now fully supports the @code{#'style = #'none} property.
-@lilypond[fragment,quote,relative=2]
-\override DynamicTextSpanner #'style = #'none
-c4\cresc c c g, c'\p
+Grob and grob property path no longer need to be specified as two
+separate arguments to commands like @samp{\override} and
+@code{\revert}, allowing for the syntax
+@example
+\override Voice.TextSpanner.bound-details.left.text = "rit."
+@end example
+Since complementary music functions like @samp{\overrideProperty}
+cannot support forms with and without separating space at the same
+time, using a single dotted path is now the preferred form.
+Specifying grob path and grob property path separately, currently
+still supported with @samp{\override} and @samp{\revert} for
+compatibility reasons, is deprecated.
+
+@item
+Due to words now being accepted as symbol function arguments, the
+interfaces of @samp{\accidentalStyle}, @samp{\alterBroken},
+@samp{\footnote} and @samp{\tweak} had to be redesigned where
+optional symbol arguments were involved. Please check the
+respective music function documentation for details.
+
+@item
+Several commands now accept symbol lists (conveniently entered as
+dot-separated words) for various kinds of arguments. These
+include @samp{\accidentalStyle}, @samp{\alterBroken},
+@samp{\footnote}, @samp{\hide}, @samp{\omit},
+@samp{\overrideProperty}, @samp{\shape}, and @samp{\tweak}.
+
+@item
+The bar line user interface has changed. Bar glyphs now resemble the
+appearance of the bar line, so a left repeat sign has to be coded
+as @code{.|:}. The command @code{\defineBarLine} provides an easy way
+to define additional bar line styles.
+
+@item
+Accidentals in the key signature may be printed in octaves other
+than their traditional positions, or in multiple octaves.
+@lilypond[quote,relative=0]
+\override Staff.KeySignature #'flat-positions = #'((-5 . 5))
+\override Staff.KeyCancellation #'flat-positions = #'((-5 . 5))
+\clef bass \key es\major es g bes d
+\clef treble \bar "||" \key es\major es g bes d
+\override Staff.KeySignature #'sharp-positions = #'(2)
+\bar "||" \key d\major b fis b2
@end lilypond
-@item
-LilyPond.app now supports MacOS X 10.7, thanks Christian Hitz!
-
-@item
-Glissandi can now span multiple lines.
-
@end itemize
@ifhtml
For older news, go to
+@uref{http://lilypond.org/doc/v2.16/Documentation/changes/},
@uref{http://lilypond.org/doc/v2.14/Documentation/changes/},
-@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS.html},
or @uref{../,go back} to the Documentation index.
\fi
@end tex
+@include cyrillic.itexi
@c ***** Displaying text *****
+++ /dev/null
-depth = ../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
predefined @ref{Environment variables}.
@item @strong{mailing lists}:
-given on @rweb{Contacts}.
+given on @rweb{Contact}.
@item @strong{branches}:
Monday: Colin H
Tuesday: Eluze
Wednesday: Marek
-Thursday: Ralph
+Thursday: Joe
Friday: Marek
-Saturday: Mark
+Saturday: Ralph
Sunday: Colin H
@end example
(ps), grobs (pgrob), and parsed music expressions (pmusic).
@example
-file ~/lilypond-git/build/out/bin/lilypond
+file $LILYPOND_GIT/build/out/bin/lilypond
b programming_error
b Grob::programming_error
can write relevant material for inclusion in the Notation
Reference. If the developer does not feel qualified to write
the documentation, a documentation editor will be able to
-write it from the regression tests. The text that is added to
-or removed from the documentation should be changed only in
-the English version.
+write it from the regression tests. In this case the developer
+should raise a new issue with the Type=Documentation tag containing
+a reference to the original issue number and/or the committish of
+the pushed patch so that the need for new documention is not
+overlooked.
+
+Any text that is added to or removed from the documentation should
+be changed only in the English version.
@node Edit changes.tely
@item
Finally, lily-git is always part of the LilyPond source code and is
-located in @file{~/lilypond-git/scripts/auxillar/lily-git.tcl}.
+located in @file{$LILYPOND_GIT/scripts/auxillar/lily-git.tcl}.
@end itemize
@item
Click on the @qq{Get source} button.
-A directory called @file{lilypond-git/} is now created within
+A directory called @file{$LILYPOND_GIT} is now created within
your home directory and the complete source code will start to be
downloaded into it.
problem persists, please ask for help.}
@item
-Close the lily-git GUI and navigate to the @file{lilypond-git/}
+Close the lily-git GUI and navigate to the @file{$LILYPOND_GIT}
directory to view and edit the source files.
@end enumerate
hopelessly confused!}
The button labeled @qq{Abort changes -- Reset to origin} will copy
-all changed files to a subdirectory of @file{lilypond-git/} named
+all changed files to a subdirectory of @file{$LILYPOND_GIT} named
@file{aborted_edits/}, and will reset the repository to the
current state of the remote repository (at @code{git.sv.gnu.org}).
@c we heavily recommend the out-of-tree build; do not change this!
@example
-cd ~/lilypond-git/
+cd $LILYPOND_GIT
sh autogen.sh --noconfigure
mkdir -p build/
cd build/
speed.
@example
-cd ~/lilypond-git/build/
+cd $LILYPOND_GIT/build/
make
@end example
You may run the compiled @code{lilypond} with:
@example
-cd ~/lilypond-git/build/
+cd $LILYPOND_GIT/build/
out/bin/lilypond my-file.ly
@end example
will likely take 2 to 10 hours.
@example
-cd ~/lilypond-git/build/
+cd $LILYPOND_GIT/build/
make
make doc
@end example
you bookmark the resulting page:
@example
-firefox ~/lilypond-git/build/out-www/offline-root/index.html
+firefox $LILYPOND_GIT/build/out-www/offline-root/index.html
@end example
@subsubheading Installing
Don't. There is no reason to install lilypond within LilyDev.
All development work can (and should) stay within the
-@file{$HOME/lilypond-git/} directory, and any personal composition
+@file{$LILYPOND_GIT} directory, and any personal composition
or typesetting work should be done with an official GUB release.
@item
Before making changes to the code, establish a baseline for the comparison by
-going to the @file{lilypond-git/build/} directory and running:
+going to the @file{$LILYPOND_GIT/build/} directory and running:
@example
make test-baseline
@end enumerate
@warning{Throughout the rest of this manual, most command-line
-input should be entered from @file{~/lilypond-git/}. This is
+input should be entered from @file{$LILYPOND_GIT}. This is
referred to as the @emph{top source directory}.}
Further instructions are in @ref{How to use lily-git}.
@subsubheading Technical details
-This creates (within the @file{~/lilypond-git/} directory) a
+This creates (within the @file{$LILYPOND_GIT} directory) a
subdirectory called @file{.git/}, which Git uses to keep track of
changes to the repository, among other things. Normally you don't
need to access it, but it's good to know it's there.
@warning{Throughout the rest of this manual, all command-line
input should be entered from the top directory of the Git
-repository being discussed (eg. @file{~/lilypond-git/}). This is
+repository being discussed (eg. @file{$LILYPOND_GIT}). This is
referred to as the @emph{top source directory}.}
Before working with the copy of the main LilyPond repository, you
@end example
By now the source files should be accessible---you should be able
-to edit any files in the @file{lilypond-git/} directory using a
+to edit any files in the @file{$LILYPOND_GIT} directory using a
text editor of your choice. But don't start just yet! Before
editing any source files, learn how to keep your changes organized
and prevent problems later---read @ref{Basic Git procedures}.
question, just answer with a newline (CR).
@example
-cd $HOME/lilypond-git/
+cd $LILYPOND_GIT
git cl config
@end example
ISOLANG = cs
depth = ../..
-# SUBDIRS = web learning notation texidocs usage included essay extending
-SUBDIRS = web learning texidocs essay usage included
STEPMAKE_TEMPLATES = documentation texinfo
LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
NO_PDF_FILES = 1
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Pavel Fric
@node Základní pojmy
\\ % Voice four
{
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'force-hshift = #0
+ \once \override NoteColumn.force-hshift = #0
<ees c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
>> |
\\ % Voice four
{ \voiceThreeStyle
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'force-hshift = #0
+ \once \override NoteColumn.force-hshift = #0
<ees c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
>>
@}
>> % end ManualOne Staff context
\new Staff = "ManualTwo" \with @{
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
@} <<
\keyTime
\clef "bass"
}
>> % end ManualOne Staff context
\new Staff = "ManualTwo" \with {
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
} <<
\keyTime
\clef "bass"
@c TODO Avoid padtext - not needed with skylining
@lilypond[quote,verbatim,ragged-right]
dolce = \markup { \italic \bold dolce }
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
fthenp=_\markup {
\dynamic f \italic \small { 2nd } \hspace #0.1 dynamic p
}
violin = \relative c'' @{
\repeat volta 2 @{
c4._\markup @{ \italic \bold dolce @} b8 a8 g a b
- \once \override TextScript #'padding = #5.0
+ \once \override TextScript.padding = #5.0
c4.^"hi there!" d8 e' f g d
c,4.\markup @{
\dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = $padding
+ \once \override TextScript.padding = $padding
#})
\relative c''' {
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Ladění výstupu
@chapter Ladění výstupu
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
g4 a b c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
b4 c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\once \override NoteHead #'color = #red
+\once \override NoteHead.color = #red
e4 f |
-\once \override NoteHead #'color = #green
+\once \override NoteHead.color = #green
g4 a b c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>4
-\once \override NoteHead #'font-size = #-3
+\once \override NoteHead.font-size = #-3
<c e g>4
<c e g>4
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>4
-<c \tweak #'font-size #-3 e g>4
+<c \tweak font-size #-3 e g>4
@end lilypond
Beachten Sie, dass die Syntax des @code{\tweak}-Befehls sich
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
a4^"Black"
- -\tweak #'color #red ^"Red"
- -\tweak #'color #green _"Green"
+ -\tweak color #red ^"Red"
+ -\tweak color #green _"Green"
@end lilypond
@noindent
@cindex direction-Eigenschaft, Beispiel
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
+\tweak direction #up
\times 4/3 {
- \tweak #'color #red
+ \tweak color #red
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
@c See issue 509
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
\times 2/3 { c8[ c c] }
-\once \override TupletNumber
- #'text = #tuplet-number::calc-fraction-text
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
\times 2/3 {
c8[ c]
c8[ c]
- \once \override TupletNumber #'transparent = ##t
+ \once \override TupletNumber.transparent = ##t
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
}
Befehl auch funktioniert. Also:
@example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
@end example
Vergessen Sie nicht das Rautenzeichen und Apostroph
\time 6/8
{
% Increase thickness of all following slurs from 1.2 to 5.0
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
r4 bes8 bes[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
\key es \major
r4 bes8
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes8[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
{
r4 bes8
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes[( g]) g |
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
g8[( es]) es d[( f]) as |
as8 g
}
{
r4 bes8
% Increase thickness of all following slurs from 1.2 to 5.0
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
bes[( g]) g |
g8[( es]) es
% Revert thickness of all following slurs to default of 1.2
- \revert Slur #'thickness
+ \revert Slur.thickness
d8[( f]) as |
as8 g
}
kursiv gesetzt wird, lautet:
@example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
@end example
@noindent
as8 g
}
\addlyrics {
- \override LyricText #'font-shape = #'italic
+ \override LyricText.font-shape = #'italic
The man who | feels love's sweet e -- | mo -- tion
}
}
werden. Der Befehl muss also lauten:
@example
-\override Lyrics . LyricText #'font-shape = #'italic
+\override Lyrics.LyricText.font-shape = #'italic
@end example
@warning{Innerhalb von Gesangstext muss immer ein
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override BarLine #'stencil = ##f
+ \override BarLine.stencil = ##f
c4 b8 c d16 c d8
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'stencil = ##f
+ \override Staff.BarLine.stencil = ##f
c4 b8 c d16 c d8
g,8 a16 b8 c d4 e16
e8
@lilypond[quote,verbatim,relative=2]
{
c4 c
- \once \override NoteHead #'stencil = #point-stencil
+ \once \override NoteHead.stencil = #point-stencil
c4 c
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+ \override Staff.BarLine.break-visibility = #'#(#f #f #f)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'transparent = ##t
+ \override Staff.TimeSignature.transparent = ##t
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #white
+ \override Staff.BarLine.color = #white
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #(x11-color 'white)
+ \override Staff.BarLine.color = #(x11-color 'white)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+ \override Staff.BarLine.color = #(rgb-color 1 1 1)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.StaffSymbol #'color = #(x11-color 'grey30)
- \override Staff.TimeSignature #'color = #(x11-color 'grey60)
- \override Staff.Clef #'color = #(x11-color 'grey60)
- \override Voice.NoteHead #'color = #(x11-color 'grey85)
- \override Voice.Stem #'color = #(x11-color 'grey85)
- \override Staff.BarLine #'color = #(x11-color 'grey10)
+ \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+ \override Staff.TimeSignature.color = #(x11-color 'grey60)
+ \override Staff.Clef.color = #(x11-color 'grey60)
+ \override Voice.NoteHead.color = #(x11-color 'grey85)
+ \override Voice.Stem.color = #(x11-color 'grey85)
+ \override Staff.BarLine.color = #(x11-color 'grey10)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
alignAboveContext = #"main"
}
{
- \override Staff.Clef #'stencil = ##f
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.Clef.stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
{ f8 f c }
}
>>
\new Staff \with {
alignAboveContext = #"main"
% Don't print clefs in this staff
- \override Clef #'stencil = ##f
+ \override Clef.stencil = ##f
% Don't print time signatures in this staff
- \override TimeSignature #'stencil = ##f
+ \override TimeSignature.stencil = ##f
}
{ f8 f c }
>>
mit einem eigenen Befehl, etwa:
@example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
@end example
@noindent
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \override Clef.stencil = ##f
+ \override TimeSignature.stencil = ##f
% Reduce all font sizes by ~24%
fontSize = #-2
}
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \override Clef.stencil = ##f
+ \override TimeSignature.stencil = ##f
fontSize = #-2
% Reduce stem length and line spacing to match
- \override StaffSymbol #'staff-space = #(magstep -2)
+ \override StaffSymbol.staff-space = #(magstep -2)
}
{ f8 f c }
>>
@lilypond[quote,verbatim,relative=2]
a4 g c a
-\override Stem #'direction = #DOWN
+\override Stem.direction = #DOWN
a4 g c a
-\override Stem #'direction = #UP
+\override Stem.direction = #UP
a4 g c a
-\revert Stem #'direction
+\revert Stem.direction
a4 g c a
@end lilypond
@lilypond[quote,verbatim,relative=2]
c4-5 a-3 f-1 c'-5
-\override Fingering #'direction = #DOWN
+\override Fingering.direction = #DOWN
c4-5 a-3 f-1 c'-5
-\override Fingering #'direction = #UP
+\override Fingering.direction = #UP
c4-5 a-3 f-1 c'-5
@end lilypond
er ist @code{-5}, versuchen wir es also mit @code{-7}.
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
+\override Fingering.font-size = #-7
\set fingeringOrientations = #'(left)
<f-2>4
<c-1 e-2 g-3 b-5>4
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
% Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% Place dynamics above staff
\dynamicUp
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
% Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% Place dynamics above staff
\dynamicUp
% Place following Ottava Bracket below Text Spanners
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
% Start Ottava Bracket
\ottava #1
c'4 \startTextSpan
@lilypond[quote,verbatim,relative=2]
c4( c^\markup { \tiny \sharp } d4.) c8
c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
c4^\markup { \tiny \sharp } d4.) c8
-\once \override Slur #'outside-staff-priority = #500
+\once \override Slur.outside-staff-priority = #500
c4( c^\markup { \tiny \sharp } d4.) c8
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
c2^"Text1"
c2^"Text2" |
-\once \override TextScript #'outside-staff-priority = #500
+\once \override TextScript.outside-staff-priority = #500
c2^"Text3"
c2^"Text4" |
@end lilypond
R1 |
% Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
c,,2^"Long Text " c'' |
R1 |
% Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
\textLengthOn % and turn on textLengthOn
c,,2^"Long Text " % Spaces at end are honored
c''2 |
Dynamik-Zeichen erledigt:
@example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
@end example
@noindent
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
% Extend width by 1 staff space
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
c2\fermata
-\override Script #'padding = #3
+\override Script.padding = #3
b2\fermata
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
% This will not work, see below
-\override MetronomeMark #'padding = #3
+\override MetronomeMark.padding = #3
\tempo 4 = 120
c1 |
% This works
-\override Score.MetronomeMark #'padding = #3
+\override Score.MetronomeMark.padding = #3
\tempo 4 = 80
d1 |
@end lilypond
\relative c'' {
c4
% This prints a sesquisharp but the spacing is too small
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4 c
% This improves the spacing
- \once \override Score.AccidentalPlacement #'right-padding = #0.6
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Score.AccidentalPlacement.right-padding = #0.6
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
% Extend width by 1 unit
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
% Align dynamics to a base line 2 units above staff
-\override DynamicLineSpanner #'staff-padding = #2
+\override DynamicLineSpanner.staff-padding = #2
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=3]
\voiceOne
< a\2 >
-\once \override StringNumber #'self-alignment-X = #RIGHT
+\once \override StringNumber.self-alignment-X = #RIGHT
< a\2 >
@end lilypond
<<
{ c4 c c c }
\\
- \override MultiMeasureRest #'staff-position = #-8
+ \override MultiMeasureRest.staff-position = #-8
{ R1 }
>>
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
\stemUp
f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
f4-5
@end lilypond
@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
+\once \override PhrasingSlur.positions = #'(-4 . -3)
\acciaccatura e8\( d8 c~ c d c d\)
@end lilypond
{
\clef "bass"
<<
- \override Beam #'positions = #'(3 . 3)
+ \override Beam.positions = #'(3 . 3)
{ b,8 ais, b, g, }
\\
{ e, g e, g }
\\
{
\voiceFour
- \once \override NoteColumn #'force-hshift = #0
+ \once \override NoteColumn.force-hshift = #0
<ees c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
>> |
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\voiceTwo
c,8~
% Reposition the c2 to the right of the merged note
- \once \override NoteColumn #'force-hshift = #1.0
+ \once \override NoteColumn.force-hshift = #1.0
% Move the c2 out of the main note column so the merge will work
\shiftOnn
c2
% Stem on the d2 must be down to permit merging
\stemDown
% Stem on the d2 should be invisible
- \once \override Stem #'transparent = ##t
- \once \override Flag #'transparent = ##t
+ \once \override Stem.transparent = ##t
+ \once \override Flag.transparent = ##t
d2
}
\new Voice {
den Bindebogen (@code{tie}) 3,5 halbe Notenlinienabstände
über die Mittellinie:
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
Damit ist auch der zweite Takt vollständig:
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\voiceTwo
c,8~
% Reposition the c2 to the right of the merged note
- \once \override NoteColumn #'force-hshift = #1.0
+ \once \override NoteColumn.force-hshift = #1.0
% Move the c2 out of the main note column so the merge will work
\shiftOnn
c2
% Stem on the d2 must be down to permit merging
\stemDown
% Stem on the d2 should be invisible
- \once \override Stem #'transparent = ##t
- \once \override Flag #'transparent = ##t
+ \once \override Stem.transparent = ##t
+ \once \override Flag.transparent = ##t
d2
}
\new Voice {
@lilypond[quote,fragment,relative=2,verbatim]
<<
{
- \once \override Stem #'transparent = ##t
- \once \override Flag #'transparent = ##t
+ \once \override Stem.transparent = ##t
+ \once \override Flag.transparent = ##t
b8~ b\noBeam
}
\\
@lilypond[quote,fragment,relative=2,verbatim]
<<
{
- \once \override Stem #'transparent = ##t
- \once \override Flag #'transparent = ##t
- \once \override Stem #'length = #8
+ \once \override Stem.transparent = ##t
+ \once \override Flag.transparent = ##t
+ \once \override Stem.length = #8
b8~ b\noBeam
}
\\
% Visible tempo marking
\tempo 4=120
a4 a a
- \once \override Score.MetronomeMark #'transparent = ##t
+ \once \override Score.MetronomeMark.transparent = ##t
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
a4\fermata
% Visible tempo marking
\tempo 4=120
a4 a a
- \once \override Score.MetronomeMark #'stencil = ##f
+ \once \override Score.MetronomeMark.stencil = ##f
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
a4\fermata
@code{\override} und @code{\revert} zu konstruieren.
@example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
@end example
Das wäre natürlich noch viel mühsamer, wenn viele Wörter eine
@lilypond[quote,verbatim]
emphasize = {
- \override Lyrics.LyricText #'font-shape = #'italic
- \override Lyrics.LyricText #'font-series = #'bold
+ \override Lyrics.LyricText.font-shape = #'italic
+ \override Lyrics.LyricText.font-series = #'bold
}
normal = {
- \revert Lyrics.LyricText #'font-shape
- \revert Lyrics.LyricText #'font-series
+ \revert Lyrics.LyricText.font-shape
+ \revert Lyrics.LyricText.font-series
}
global = { \key c \major \time 4/4 \partial 4 }
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
\layout{
\context {
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
}
\context {
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
}
\context {
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
\layout{
\context { \Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
}
\context { \Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
@example
tieDotted = @{
- \override Tie #'dash-period = #0.75
- \override Tie #'dash-fraction = #0.1
+ \override Tie.dash-period = #0.75
+ \override Tie.dash-fraction = #0.1
@}
@end example
\Score
% Um sicher zu gehen, dass Texte und Liedtext
% innerhalb der Papierränder bleiben
- \override PaperColumn #'keep-inside-line = ##t
- \override NonMusicalPaperColumn #'keep-inside-line = ##t
+ \override PaperColumn.keep-inside-line = ##t
+ \override NonMusicalPaperColumn.keep-inside-line = ##t
@}
@}
@}
\relative c' {
% Arrange to obtain color from color-notehead procedure
- \override NoteHead #'color = #color-notehead
+ \override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
}
@end lilypond
+++ /dev/null
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Pavel Fric
Notenköpfe immernoch schwarz im unteren System erscheinen.
@lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
\new Staff { a }
@end lilypond
@lilypond[quote,verbatim,relative=2]
\new Staff {
- \override Staff.NoteHead #'color = #red
+ \override Staff.NoteHead.color = #red
a
}
@end lilypond
zu Beginn hinzufügt:
@example
-\override VerticalAxisGroup #'staff-affinity = ##f
+\override VerticalAxisGroup.staff-affinity = ##f
@end example
Zu Einzelheiten siehe @qq{Abstand von Nicht-Notensystemzeilen} in
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
CSS_FILES = $(call src-wildcard,*.css)
-EXTRA_DIST_FILES = $(CSS_FILES)
-
OUT_CSS_FILES = $(CSS_FILES:%=$(outdir)/%)
STEPMAKE_TEMPLATES = documentation
-moz-border-radius-bottomright: 7px;
-webkit-border-bottom-left-radius: 7px;
-webkit-border-bottom-right-radius: 7px;
+ border-bottom-left-radius: 7px;
+ border-bottom-right-radius: 7px;
margin: 0;
}
text-indent: -999em;
background: #6aec7c url(../pictures/lily-home-nav-bg.png) no-repeat 50% 50%;
width: 9%;
- /* css3 no go yet? */
- border-bottom-left-radius: 30px;
-moz-border-radius-bottomleft: 7px;
-webkit-border-bottom-left-radius: 7px;
+ border-bottom-left-radius: 7px;
}
#tocframe > ul:first-child > li:first-child a:hover {
width: 9%;
-moz-border-radius-bottomright: 7px;
-webkit-border-bottom-right-radius: 7px;
+ border-bottom-right-radius: 7px;
}
#tocframe li {
-moz-border-radius-bottomright: 20px;
-webkit-border-top-right-radius: 20px;
-webkit-border-bottom-right-radius: 20px;
+ border-top-right-radius: 20px;
+ border-bottom-right-radius: 20px;
}
#tocframe li form input[type="hidden"] {
-moz-border-radius-bottomleft: 7px;
-webkit-border-top-left-radius: 7px;
-webkit-border-bottom-left-radius: 7px;
+ border-top-left-radius: 7px;
+ border-bottom-left-radius: 7px;
}
#tocframe .toc .toc li:last-child a {
-moz-border-radius-bottomright: 7px;
-webkit-border-top-right-radius: 7px;
-webkit-border-bottom-right-radius: 7px;
+ border-top-right-radius: 7px;
+ border-bottom-right-radius: 7px;
}
#tocframe .toc .toc li a {
/* Experimental rounded corners */
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
+ border-radius: 10px;
margin: 1em;
}
--- /dev/null
+@c -*- coding: utf-8; mode: texinfo; -*-
+@c
+@c cyrillic.itexi
+@c
+@c
+@c Cyrillic support for texinfo, using UTF-8 input encoding and LH fonts,
+@c with all the restrictions for non-CM fonts (this is, no kerning and no
+@c hyphenation).
+@c
+@c For outline fonts, we also use the cm-super family; the setup is the same
+@c as with the EC fonts except that the prefix is not `ec' but `la'.
+
+@tex
+\gdef\cyrfont{%
+ % Use the EC size information.
+ \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
+ \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
+ \ifmonospace
+ \font\thiscyrfont = latt\ecsize \space at \nominalsize
+ \else
+ \ifx\curfontstyle\bfstylename
+ \font\thiscyrfont = lab\ifusingit{i}{x}\ecsize \space at \nominalsize
+ \else
+ \font\thiscyrfont = la\ifusingit{ti}{rm}\ecsize \space at \nominalsize
+ \fi
+ \fi
+ \thiscyrfont
+}
+
+
+% Glyph names, taken from LaTeX's `t2aenc.def' font encoding definition file
+% for T2A encoding.
+
+\gdef\textnumero{{\cyrfont \char 157}}
+\gdef\CYRpalochka{{\cyrfont \char 13}}
+
+\gdef\CYRA{{\cyrfont \char 192}}
+\gdef\cyra{{\cyrfont \char 224}}
+\gdef\CYRB{{\cyrfont \char 193}}
+\gdef\cyrb{{\cyrfont \char 225}}
+\gdef\CYRV{{\cyrfont \char 194}}
+\gdef\cyrv{{\cyrfont \char 226}}
+\gdef\CYRG{{\cyrfont \char 195}}
+\gdef\cyrg{{\cyrfont \char 227}}
+\gdef\CYRD{{\cyrfont \char 196}}
+\gdef\cyrd{{\cyrfont \char 228}}
+\gdef\CYRE{{\cyrfont \char 197}}
+\gdef\cyre{{\cyrfont \char 229}}
+\gdef\CYRZH{{\cyrfont \char 198}}
+\gdef\cyrzh{{\cyrfont \char 230}}
+\gdef\CYRZ{{\cyrfont \char 199}}
+\gdef\cyrz{{\cyrfont \char 231}}
+\gdef\CYRI{{\cyrfont \char 200}}
+\gdef\cyri{{\cyrfont \char 232}}
+\gdef\CYRISHRT{{\cyrfont \char 201}}
+\gdef\cyrishrt{{\cyrfont \char 233}}
+\gdef\CYRK{{\cyrfont \char 202}}
+\gdef\cyrk{{\cyrfont \char 234}}
+\gdef\CYRL{{\cyrfont \char 203}}
+\gdef\cyrl{{\cyrfont \char 235}}
+\gdef\CYRM{{\cyrfont \char 204}}
+\gdef\cyrm{{\cyrfont \char 236}}
+\gdef\CYRN{{\cyrfont \char 205}}
+\gdef\cyrn{{\cyrfont \char 237}}
+\gdef\CYRO{{\cyrfont \char 206}}
+\gdef\cyro{{\cyrfont \char 238}}
+\gdef\CYRP{{\cyrfont \char 207}}
+\gdef\cyrp{{\cyrfont \char 239}}
+\gdef\CYRR{{\cyrfont \char 208}}
+\gdef\cyrr{{\cyrfont \char 240}}
+\gdef\CYRS{{\cyrfont \char 209}}
+\gdef\cyrs{{\cyrfont \char 241}}
+\gdef\CYRT{{\cyrfont \char 210}}
+\gdef\cyrt{{\cyrfont \char 242}}
+\gdef\CYRU{{\cyrfont \char 211}}
+\gdef\cyru{{\cyrfont \char 243}}
+\gdef\CYRF{{\cyrfont \char 212}}
+\gdef\cyrf{{\cyrfont \char 244}}
+\gdef\CYRH{{\cyrfont \char 213}}
+\gdef\cyrh{{\cyrfont \char 245}}
+\gdef\CYRC{{\cyrfont \char 214}}
+\gdef\cyrc{{\cyrfont \char 246}}
+\gdef\CYRCH{{\cyrfont \char 215}}
+\gdef\cyrch{{\cyrfont \char 247}}
+\gdef\CYRSH{{\cyrfont \char 216}}
+\gdef\cyrsh{{\cyrfont \char 248}}
+\gdef\CYRSHCH{{\cyrfont \char 217}}
+\gdef\cyrshch{{\cyrfont \char 249}}
+\gdef\CYRHRDSN{{\cyrfont \char 218}}
+\gdef\cyrhrdsn{{\cyrfont \char 250}}
+\gdef\CYRERY{{\cyrfont \char 219}}
+\gdef\cyrery{{\cyrfont \char 251}}
+\gdef\CYRSFTSN{{\cyrfont \char 220}}
+\gdef\cyrsftsn{{\cyrfont \char 252}}
+\gdef\CYREREV{{\cyrfont \char 221}}
+\gdef\cyrerev{{\cyrfont \char 253}}
+\gdef\CYRYU{{\cyrfont \char 222}}
+\gdef\cyryu{{\cyrfont \char 254}}
+\gdef\CYRYA{{\cyrfont \char 223}}
+\gdef\cyrya{{\cyrfont \char 255}}
+\gdef\CYRGUP{{\cyrfont \char 128}}
+\gdef\cyrgup{{\cyrfont \char 160}}
+\gdef\CYRGHCRS{{\cyrfont \char 129}}
+\gdef\cyrghcrs{{\cyrfont \char 161}}
+\gdef\CYRDJE{{\cyrfont \char 130}}
+\gdef\cyrdje{{\cyrfont \char 162}}
+\gdef\CYRTSHE{{\cyrfont \char 131}}
+\gdef\cyrtshe{{\cyrfont \char 163}}
+\gdef\CYRSHHA{{\cyrfont \char 132}}
+\gdef\cyrshha{{\cyrfont \char 164}}
+\gdef\CYRZHDSC{{\cyrfont \char 133}}
+\gdef\cyrzhdsc{{\cyrfont \char 165}}
+\gdef\CYRZDSC{{\cyrfont \char 134}}
+\gdef\cyrzdsc{{\cyrfont \char 166}}
+\gdef\CYRLJE{{\cyrfont \char 135}}
+\gdef\cyrlje{{\cyrfont \char 167}}
+\gdef\CYRYI{{\cyrfont \char 136}}
+\gdef\cyryi{{\cyrfont \char 168}}
+\gdef\CYRKDSC{{\cyrfont \char 137}}
+\gdef\cyrkdsc{{\cyrfont \char 169}}
+\gdef\CYRKBEAK{{\cyrfont \char 138}}
+\gdef\cyrkbeak{{\cyrfont \char 170}}
+\gdef\CYRKVCRS{{\cyrfont \char 139}}
+\gdef\cyrkvcrs{{\cyrfont \char 171}}
+\gdef\CYRAE{{\cyrfont \char 140}}
+\gdef\cyrae{{\cyrfont \char 172}}
+\gdef\CYRNDSC{{\cyrfont \char 141}}
+\gdef\cyrndsc{{\cyrfont \char 173}}
+\gdef\CYRNG{{\cyrfont \char 142}}
+\gdef\cyrng{{\cyrfont \char 174}}
+\gdef\CYRDZE{{\cyrfont \char 143}}
+\gdef\cyrdze{{\cyrfont \char 175}}
+\gdef\CYROTLD{{\cyrfont \char 144}}
+\gdef\cyrotld{{\cyrfont \char 176}}
+\gdef\CYRSDSC{{\cyrfont \char 145}}
+\gdef\cyrsdsc{{\cyrfont \char 177}}
+\gdef\CYRUSHRT{{\cyrfont \char 146}}
+\gdef\cyrushrt{{\cyrfont \char 178}}
+\gdef\CYRY{{\cyrfont \char 147}}
+\gdef\cyry{{\cyrfont \char 179}}
+\gdef\CYRYHCRS{{\cyrfont \char 148}}
+\gdef\cyryhcrs{{\cyrfont \char 180}}
+\gdef\CYRHDSC{{\cyrfont \char 149}}
+\gdef\cyrhdsc{{\cyrfont \char 181}}
+\gdef\CYRDZHE{{\cyrfont \char 150}}
+\gdef\cyrdzhe{{\cyrfont \char 182}}
+\gdef\CYRCHVCRS{{\cyrfont \char 151}}
+\gdef\cyrchvcrs{{\cyrfont \char 183}}
+\gdef\CYRCHRDSC{{\cyrfont \char 152}}
+\gdef\cyrchrdsc{{\cyrfont \char 184}}
+\gdef\CYRIE{{\cyrfont \char 153}}
+\gdef\cyrie{{\cyrfont \char 185}}
+\gdef\CYRSCHWA{{\cyrfont \char 154}}
+\gdef\cyrschwa{{\cyrfont \char 186}}
+\gdef\CYRNJE{{\cyrfont \char 155}}
+\gdef\cyrnje{{\cyrfont \char 187}}
+\gdef\CYRYO{{\cyrfont \char 156}}
+\gdef\cyryo{{\cyrfont \char 188}}
+\gdef\CYRII{{\cyrfont \char 73}}
+\gdef\cyrii{{\cyrfont \char 105}}
+\gdef\CYRJE{{\cyrfont \char 74}}
+\gdef\cyrje{{\cyrfont \char 106}}
+\gdef\CYRQ{{\cyrfont \char 81}}
+\gdef\cyrq{{\cyrfont \char 113}}
+\gdef\CYRW{{\cyrfont \char 87}}
+\gdef\cyrw{{\cyrfont \char 119}}
+
+% Composite glyphs.
+
+\gdef\CYREGRAVE{{\cyrfont \accent 0 \char 197}}
+\gdef\cyregrave{{\cyrfont \accent 0 \char 229}}
+\gdef\CYRGGRAVE{{\cyrfont \accent 0 \char 195}}
+\gdef\cyrggrave{{\cyrfont \accent 0 \char 227}}
+\gdef\CYRKGRAVE{{\cyrfont \accent 0 \char 202}}
+\gdef\cyrkgrave{{\cyrfont \accent 0 \char 234}}
+\gdef\CYRIGRAVE{{\cyrfont \accent 0 \char 200}}
+\gdef\cyrigrave{{\cyrfont \accent 0 \char 232}}
+
+\gdef\CYRZHBREVE{{\cyrfont \accent 20 \char 198}}
+\gdef\cyrzhbreve{{\cyrfont \accent 20 \char 230}}
+\gdef\CYRABREVE{{\cyrfont \accent 20 \char 192}}
+\gdef\cyrabreve{{\cyrfont \accent 20 \char 224}}
+\gdef\CYREBREVE{{\cyrfont \accent 20 \char 197}}
+\gdef\cyrebreve{{\cyrfont \accent 20 \char 229}}
+
+\gdef\CYRADIAERESIS{{\cyrfont \accent 4 \char 192}}
+\gdef\cyradiaeresis{{\cyrfont \accent 4 \char 224}}
+\gdef\CYRSCHWADIAERESIS{{\cyrfont \accent 4 \char 154}}
+\gdef\cyrschwadiaeresis{{\cyrfont \accent 4 \char 186}}
+\gdef\CYRZHDIAERESIS{{\cyrfont \accent 4 \char 198}}
+\gdef\cyrzhdiaeresis{{\cyrfont \accent 4 \char 230}}
+\gdef\CYRZDIAERESIS{{\cyrfont \accent 4 \char 199}}
+\gdef\cyrzdiaeresis{{\cyrfont \accent 4 \char 231}}
+\gdef\CYRIDIAERESIS{{\cyrfont \accent 4 \char 200}}
+\gdef\cyridiaeresis{{\cyrfont \accent 4 \char 232}}
+\gdef\CYRODIAERESIS{{\cyrfont \accent 4 \char 206}}
+\gdef\cyrodiaeresis{{\cyrfont \accent 4 \char 238}}
+\gdef\CYREREVDIAERESIS{{\cyrfont \accent 4 \char 221}}
+\gdef\cyrerevdiaeresis{{\cyrfont \accent 4 \char 253}}
+\gdef\CYRUDIAERESIS{{\cyrfont \accent 4 \char 211}}
+\gdef\cyrudiaeresis{{\cyrfont \accent 4 \char 243}}
+\gdef\CYRCHDIAERESIS{{\cyrfont \accent 4 \char 215}}
+\gdef\cyrchdiaeresis{{\cyrfont \accent 4 \char 247}}
+\gdef\CYRERYDIAERESIS{{\cyrfont \accent 4 \char 219}}
+\gdef\cyrerydiaeresis{{\cyrfont \accent 4 \char 251}}
+
+\gdef\CYRIMACRON{{\cyrfont \accent 9 \char 200}}
+\gdef\cyrimacron{{\cyrfont \accent 9 \char 232}}
+\gdef\CYRUMACRON{{\cyrfont \accent 9 \char 211}}
+\gdef\cyrumacron{{\cyrfont \accent 9 \char 243}}
+
+\gdef\CYRUDOUBLEACUTE{{\cyrfont \accent 5 \char 211}}
+\gdef\cyrudoubleacute{{\cyrfont \accent 5 \char 243}}
+
+
+% UTF-8 mappings, taken from LaTeX's t2aenc.dfu input encoding definition
+% file for T2A encoding (adapted to use the above composite glyph names).
+
+\DeclareUnicodeCharacter{0400}{\CYREGRAVE}
+\DeclareUnicodeCharacter{0401}{\CYRYO}
+\DeclareUnicodeCharacter{0402}{\CYRDJE}
+\DeclareUnicodeCharacter{0403}{\CYRGGRAVE}
+\DeclareUnicodeCharacter{0404}{\CYRIE}
+\DeclareUnicodeCharacter{0405}{\CYRDZE}
+\DeclareUnicodeCharacter{0406}{\CYRII}
+\DeclareUnicodeCharacter{0407}{\CYRYI}
+\DeclareUnicodeCharacter{0408}{\CYRJE}
+\DeclareUnicodeCharacter{0409}{\CYRLJE}
+\DeclareUnicodeCharacter{040A}{\CYRNJE}
+\DeclareUnicodeCharacter{040B}{\CYRTSHE}
+\DeclareUnicodeCharacter{040C}{\CYRKGRAVE}
+\DeclareUnicodeCharacter{040D}{\CYRIGRAVE}
+\DeclareUnicodeCharacter{040E}{\CYRUSHRT}
+\DeclareUnicodeCharacter{040F}{\CYRDZHE}
+\DeclareUnicodeCharacter{0410}{\CYRA}
+\DeclareUnicodeCharacter{0411}{\CYRB}
+\DeclareUnicodeCharacter{0412}{\CYRV}
+\DeclareUnicodeCharacter{0413}{\CYRG}
+\DeclareUnicodeCharacter{0414}{\CYRD}
+\DeclareUnicodeCharacter{0415}{\CYRE}
+\DeclareUnicodeCharacter{0416}{\CYRZH}
+\DeclareUnicodeCharacter{0417}{\CYRZ}
+\DeclareUnicodeCharacter{0418}{\CYRI}
+\DeclareUnicodeCharacter{0419}{\CYRISHRT}
+\DeclareUnicodeCharacter{041A}{\CYRK}
+\DeclareUnicodeCharacter{041B}{\CYRL}
+\DeclareUnicodeCharacter{041C}{\CYRM}
+\DeclareUnicodeCharacter{041D}{\CYRN}
+\DeclareUnicodeCharacter{041E}{\CYRO}
+\DeclareUnicodeCharacter{041F}{\CYRP}
+\DeclareUnicodeCharacter{0420}{\CYRR}
+\DeclareUnicodeCharacter{0421}{\CYRS}
+\DeclareUnicodeCharacter{0422}{\CYRT}
+\DeclareUnicodeCharacter{0423}{\CYRU}
+\DeclareUnicodeCharacter{0424}{\CYRF}
+\DeclareUnicodeCharacter{0425}{\CYRH}
+\DeclareUnicodeCharacter{0426}{\CYRC}
+\DeclareUnicodeCharacter{0427}{\CYRCH}
+\DeclareUnicodeCharacter{0428}{\CYRSH}
+\DeclareUnicodeCharacter{0429}{\CYRSHCH}
+\DeclareUnicodeCharacter{042A}{\CYRHRDSN}
+\DeclareUnicodeCharacter{042B}{\CYRERY}
+\DeclareUnicodeCharacter{042C}{\CYRSFTSN}
+\DeclareUnicodeCharacter{042D}{\CYREREV}
+\DeclareUnicodeCharacter{042E}{\CYRYU}
+\DeclareUnicodeCharacter{042F}{\CYRYA}
+\DeclareUnicodeCharacter{0430}{\cyra}
+\DeclareUnicodeCharacter{0431}{\cyrb}
+\DeclareUnicodeCharacter{0432}{\cyrv}
+\DeclareUnicodeCharacter{0433}{\cyrg}
+\DeclareUnicodeCharacter{0434}{\cyrd}
+\DeclareUnicodeCharacter{0435}{\cyre}
+\DeclareUnicodeCharacter{0436}{\cyrzh}
+\DeclareUnicodeCharacter{0437}{\cyrz}
+\DeclareUnicodeCharacter{0438}{\cyri}
+\DeclareUnicodeCharacter{0439}{\cyrishrt}
+\DeclareUnicodeCharacter{043A}{\cyrk}
+\DeclareUnicodeCharacter{043B}{\cyrl}
+\DeclareUnicodeCharacter{043C}{\cyrm}
+\DeclareUnicodeCharacter{043D}{\cyrn}
+\DeclareUnicodeCharacter{043E}{\cyro}
+\DeclareUnicodeCharacter{043F}{\cyrp}
+\DeclareUnicodeCharacter{0440}{\cyrr}
+\DeclareUnicodeCharacter{0441}{\cyrs}
+\DeclareUnicodeCharacter{0442}{\cyrt}
+\DeclareUnicodeCharacter{0443}{\cyru}
+\DeclareUnicodeCharacter{0444}{\cyrf}
+\DeclareUnicodeCharacter{0445}{\cyrh}
+\DeclareUnicodeCharacter{0446}{\cyrc}
+\DeclareUnicodeCharacter{0447}{\cyrch}
+\DeclareUnicodeCharacter{0448}{\cyrsh}
+\DeclareUnicodeCharacter{0449}{\cyrshch}
+\DeclareUnicodeCharacter{044A}{\cyrhrdsn}
+\DeclareUnicodeCharacter{044B}{\cyrery}
+\DeclareUnicodeCharacter{044C}{\cyrsftsn}
+\DeclareUnicodeCharacter{044D}{\cyrerev}
+\DeclareUnicodeCharacter{044E}{\cyryu}
+\DeclareUnicodeCharacter{044F}{\cyrya}
+\DeclareUnicodeCharacter{0450}{\cyregrave}
+\DeclareUnicodeCharacter{0451}{\cyryo}
+\DeclareUnicodeCharacter{0452}{\cyrdje}
+\DeclareUnicodeCharacter{0453}{\cyrggrave}
+\DeclareUnicodeCharacter{0454}{\cyrie}
+\DeclareUnicodeCharacter{0455}{\cyrdze}
+\DeclareUnicodeCharacter{0456}{\cyrii}
+\DeclareUnicodeCharacter{0457}{\cyryi}
+\DeclareUnicodeCharacter{0458}{\cyrje}
+\DeclareUnicodeCharacter{0459}{\cyrlje}
+\DeclareUnicodeCharacter{045A}{\cyrnje}
+\DeclareUnicodeCharacter{045B}{\cyrtshe}
+\DeclareUnicodeCharacter{045C}{\cyrkgrave}
+\DeclareUnicodeCharacter{045D}{\cyrigrave}
+\DeclareUnicodeCharacter{045E}{\cyrushrt}
+\DeclareUnicodeCharacter{045F}{\cyrdzhe}
+\DeclareUnicodeCharacter{0490}{\CYRGUP}
+\DeclareUnicodeCharacter{0491}{\cyrgup}
+\DeclareUnicodeCharacter{0492}{\CYRGHCRS}
+\DeclareUnicodeCharacter{0493}{\cyrghcrs}
+\DeclareUnicodeCharacter{0496}{\CYRZHDSC}
+\DeclareUnicodeCharacter{0497}{\cyrzhdsc}
+\DeclareUnicodeCharacter{0498}{\CYRZDSC}
+\DeclareUnicodeCharacter{0499}{\cyrzdsc}
+\DeclareUnicodeCharacter{049A}{\CYRKDSC}
+\DeclareUnicodeCharacter{049B}{\cyrkdsc}
+\DeclareUnicodeCharacter{049C}{\CYRKVCRS}
+\DeclareUnicodeCharacter{049D}{\cyrkvcrs}
+\DeclareUnicodeCharacter{04A0}{\CYRKBEAK}
+\DeclareUnicodeCharacter{04A1}{\cyrkbeak}
+\DeclareUnicodeCharacter{04A2}{\CYRNDSC}
+\DeclareUnicodeCharacter{04A3}{\cyrndsc}
+\DeclareUnicodeCharacter{04A4}{\CYRNG}
+\DeclareUnicodeCharacter{04A5}{\cyrng}
+\DeclareUnicodeCharacter{04AA}{\CYRSDSC}
+\DeclareUnicodeCharacter{04AB}{\cyrsdsc}
+\DeclareUnicodeCharacter{04AE}{\CYRY}
+\DeclareUnicodeCharacter{04AF}{\cyry}
+\DeclareUnicodeCharacter{04B0}{\CYRYHCRS}
+\DeclareUnicodeCharacter{04B1}{\cyryhcrs}
+\DeclareUnicodeCharacter{04B2}{\CYRHDSC}
+\DeclareUnicodeCharacter{04B3}{\cyrhdsc}
+\DeclareUnicodeCharacter{04B6}{\CYRCHRDSC}
+\DeclareUnicodeCharacter{04B7}{\cyrchrdsc}
+\DeclareUnicodeCharacter{04B8}{\CYRCHVCRS}
+\DeclareUnicodeCharacter{04B9}{\cyrchvcrs}
+\DeclareUnicodeCharacter{04BA}{\CYRSHHA}
+\DeclareUnicodeCharacter{04BB}{\cyrshha}
+\DeclareUnicodeCharacter{04C0}{\CYRpalochka}
+\DeclareUnicodeCharacter{04C1}{\CYRZHBREVE}
+\DeclareUnicodeCharacter{04C2}{\cyrzhbreve}
+\DeclareUnicodeCharacter{04D0}{\CYRABREVE}
+\DeclareUnicodeCharacter{04D1}{\cyrabreve}
+\DeclareUnicodeCharacter{04D2}{\CYRADIAERESIS}
+\DeclareUnicodeCharacter{04D3}{\cyradiaeresis}
+\DeclareUnicodeCharacter{04D4}{\CYRAE}
+\DeclareUnicodeCharacter{04D5}{\cyrae}
+\DeclareUnicodeCharacter{04D6}{\CYREBREVE}
+\DeclareUnicodeCharacter{04D7}{\cyrebreve}
+\DeclareUnicodeCharacter{04D8}{\CYRSCHWA}
+\DeclareUnicodeCharacter{04D9}{\cyrschwa}
+\DeclareUnicodeCharacter{04DA}{\CYRSCHWADIAERESIS}
+\DeclareUnicodeCharacter{04DB}{\cyrschwadiaeresis}
+\DeclareUnicodeCharacter{04DC}{\CYRZHDIAERESIS}
+\DeclareUnicodeCharacter{04DD}{\cyrzhdiaeresis}
+\DeclareUnicodeCharacter{04DE}{\CYRZDIAERESIS}
+\DeclareUnicodeCharacter{04DF}{\cyrzdiaeresis}
+\DeclareUnicodeCharacter{04E2}{\CYRIMACRON}
+\DeclareUnicodeCharacter{04E3}{\cyrimacron}
+\DeclareUnicodeCharacter{04E4}{\CYRIDIAERESIS}
+\DeclareUnicodeCharacter{04E5}{\cyridiaeresis}
+\DeclareUnicodeCharacter{04E6}{\CYRODIAERESIS}
+\DeclareUnicodeCharacter{04E7}{\cyrodiaeresis}
+\DeclareUnicodeCharacter{04E8}{\CYROTLD}
+\DeclareUnicodeCharacter{04E9}{\cyrotld}
+\DeclareUnicodeCharacter{04EC}{\CYREREVDIAERESIS}
+\DeclareUnicodeCharacter{04ED}{\cyrerevdiaeresis}
+\DeclareUnicodeCharacter{04EE}{\CYRUMACRON}
+\DeclareUnicodeCharacter{04EF}{\cyrumacron}
+\DeclareUnicodeCharacter{04F0}{\CYRUDIAERESIS}
+\DeclareUnicodeCharacter{04F1}{\cyrudiaeresis}
+\DeclareUnicodeCharacter{04F2}{\CYRUDOUBLEACUTE}
+\DeclareUnicodeCharacter{04F3}{\cyrudoubleacute}
+\DeclareUnicodeCharacter{04F4}{\CYRCHDIAERESIS}
+\DeclareUnicodeCharacter{04F5}{\cyrchdiaeresis}
+\DeclareUnicodeCharacter{04F8}{\CYRERYDIAERESIS}
+\DeclareUnicodeCharacter{04F9}{\cyrerydiaeresis}
+
+\DeclareUnicodeCharacter{2116}{\textnumero}
+
+
+% Add all Cyrillic character names to \commondummies.
+
+\gdef\cyrdummies{%
+ \definedummyword\textnumero
+ \definedummyword\CYRpalochka
+%
+ \definedummyword\CYRA
+ \definedummyword\cyra
+ \definedummyword\CYRB
+ \definedummyword\cyrb
+ \definedummyword\CYRV
+ \definedummyword\cyrv
+ \definedummyword\CYRG
+ \definedummyword\cyrg
+ \definedummyword\CYRD
+ \definedummyword\cyrd
+ \definedummyword\CYRE
+ \definedummyword\cyre
+ \definedummyword\CYRZH
+ \definedummyword\cyrzh
+ \definedummyword\CYRZ
+ \definedummyword\cyrz
+ \definedummyword\CYRI
+ \definedummyword\cyri
+ \definedummyword\CYRISHRT
+ \definedummyword\cyrishrt
+ \definedummyword\CYRK
+ \definedummyword\cyrk
+ \definedummyword\CYRL
+ \definedummyword\cyrl
+ \definedummyword\CYRM
+ \definedummyword\cyrm
+ \definedummyword\CYRN
+ \definedummyword\cyrn
+ \definedummyword\CYRO
+ \definedummyword\cyro
+ \definedummyword\CYRP
+ \definedummyword\cyrp
+ \definedummyword\CYRR
+ \definedummyword\cyrr
+ \definedummyword\CYRS
+ \definedummyword\cyrs
+ \definedummyword\CYRT
+ \definedummyword\cyrt
+ \definedummyword\CYRU
+ \definedummyword\cyru
+ \definedummyword\CYRF
+ \definedummyword\cyrf
+ \definedummyword\CYRH
+ \definedummyword\cyrh
+ \definedummyword\CYRC
+ \definedummyword\cyrc
+ \definedummyword\CYRCH
+ \definedummyword\cyrch
+ \definedummyword\CYRSH
+ \definedummyword\cyrsh
+ \definedummyword\CYRSHCH
+ \definedummyword\cyrshch
+ \definedummyword\CYRHRDSN
+ \definedummyword\cyrhrdsn
+ \definedummyword\CYRERY
+ \definedummyword\cyrery
+ \definedummyword\CYRSFTSN
+ \definedummyword\cyrsftsn
+ \definedummyword\CYREREV
+ \definedummyword\cyrerev
+ \definedummyword\CYRYU
+ \definedummyword\cyryu
+ \definedummyword\CYRYA
+ \definedummyword\cyrya
+ \definedummyword\CYRGUP
+ \definedummyword\cyrgup
+ \definedummyword\CYRGHCRS
+ \definedummyword\cyrghcrs
+ \definedummyword\CYRDJE
+ \definedummyword\cyrdje
+ \definedummyword\CYRTSHE
+ \definedummyword\cyrtshe
+ \definedummyword\CYRSHHA
+ \definedummyword\cyrshha
+ \definedummyword\CYRZHDSC
+ \definedummyword\cyrzhdsc
+ \definedummyword\CYRZDSC
+ \definedummyword\cyrzdsc
+ \definedummyword\CYRLJE
+ \definedummyword\cyrlje
+ \definedummyword\CYRYI
+ \definedummyword\cyryi
+ \definedummyword\CYRKDSC
+ \definedummyword\cyrkdsc
+ \definedummyword\CYRKBEAK
+ \definedummyword\cyrkbeak
+ \definedummyword\CYRKVCRS
+ \definedummyword\cyrkvcrs
+ \definedummyword\CYRAE
+ \definedummyword\cyrae
+ \definedummyword\CYRNDSC
+ \definedummyword\cyrndsc
+ \definedummyword\CYRNG
+ \definedummyword\cyrng
+ \definedummyword\CYRDZE
+ \definedummyword\cyrdze
+ \definedummyword\CYROTLD
+ \definedummyword\cyrotld
+ \definedummyword\CYRSDSC
+ \definedummyword\cyrsdsc
+ \definedummyword\CYRUSHRT
+ \definedummyword\cyrushrt
+ \definedummyword\CYRY
+ \definedummyword\cyry
+ \definedummyword\CYRYHCRS
+ \definedummyword\cyryhcrs
+ \definedummyword\CYRHDSC
+ \definedummyword\cyrhdsc
+ \definedummyword\CYRDZHE
+ \definedummyword\cyrdzhe
+ \definedummyword\CYRCHVCRS
+ \definedummyword\cyrchvcrs
+ \definedummyword\CYRCHRDSC
+ \definedummyword\cyrchrdsc
+ \definedummyword\CYRIE
+ \definedummyword\cyrie
+ \definedummyword\CYRSCHWA
+ \definedummyword\cyrschwa
+ \definedummyword\CYRNJE
+ \definedummyword\cyrnje
+ \definedummyword\CYRYO
+ \definedummyword\cyryo
+ \definedummyword\CYRII
+ \definedummyword\cyrii
+ \definedummyword\CYRJE
+ \definedummyword\cyrje
+ \definedummyword\CYRQ
+ \definedummyword\cyrq
+ \definedummyword\CYRW
+ \definedummyword\cyrw
+%
+ \definedummyword\CYREGRAVE
+ \definedummyword\cyregrave
+ \definedummyword\CYRGGRAVE
+ \definedummyword\cyrggrave
+ \definedummyword\CYRKGRAVE
+ \definedummyword\cyrkgrave
+ \definedummyword\CYRIGRAVE
+ \definedummyword\cyrigrave
+%
+ \definedummyword\CYRZHBREVE
+ \definedummyword\cyrzhbreve
+ \definedummyword\CYRABREVE
+ \definedummyword\cyrabreve
+ \definedummyword\CYREBREVE
+ \definedummyword\cyrebreve
+%
+ \definedummyword\CYRADIAERESIS
+ \definedummyword\cyradiaeresis
+ \definedummyword\CYRSCHWADIAERESIS
+ \definedummyword\cyrschwadiaeresis
+ \definedummyword\CYRZHDIAERESIS
+ \definedummyword\cyrzhdiaeresis
+ \definedummyword\CYRZDIAERESIS
+ \definedummyword\cyrzdiaeresis
+ \definedummyword\CYRIDIAERESIS
+ \definedummyword\cyridiaeresis
+ \definedummyword\CYRODIAERESIS
+ \definedummyword\cyrodiaeresis
+ \definedummyword\CYREREVDIAERESIS
+ \definedummyword\cyrerevdiaeresis
+ \definedummyword\CYRUDIAERESIS
+ \definedummyword\cyrudiaeresis
+ \definedummyword\CYRCHDIAERESIS
+ \definedummyword\cyrchdiaeresis
+ \definedummyword\CYRERYDIAERESIS
+ \definedummyword\cyrerydiaeresis
+%
+ \definedummyword\CYRIMACRON
+ \definedummyword\cyrimacron
+ \definedummyword\CYRUMACRON
+ \definedummyword\cyrumacron
+%
+ \definedummyword\CYRUDOUBLEACUTE
+ \definedummyword\cyrudoubleacute
+}
+
+\toks0 = \expandafter{\commondummies\cyrdummies}
+\xdef\commondummies{\the\toks0}
+
+
+% Add all Cyrillic character names to \indexnofonts.
+%
+% TODO: Fix the index entries. Right now, entries \CYRAAA and \cyrbbb get
+% simply mapped to ZZZZAAA and zzzzbbb, respectively.
+
+\gdef\cyrindexnofonts{%
+ \def\textnumero{ZZZZNo}%
+ \def\CYRpalochka{ZZZZpalochka}%
+%
+ \def\CYRA{ZZZZA}%
+ \def\cyra{zzzza}%
+ \def\CYRB{ZZZZB}%
+ \def\cyrb{zzzzb}%
+ \def\CYRV{ZZZZV}%
+ \def\cyrv{zzzzv}%
+ \def\CYRG{ZZZZG}%
+ \def\cyrg{zzzzg}%
+ \def\CYRD{ZZZZD}%
+ \def\cyrd{zzzzd}%
+ \def\CYRE{ZZZZE}%
+ \def\cyre{zzzze}%
+ \def\CYRZH{ZZZZZH}%
+ \def\cyrzh{zzzzzh}%
+ \def\CYRZ{ZZZZZ}%
+ \def\cyrz{zzzzz}%
+ \def\CYRI{ZZZZI}%
+ \def\cyri{zzzzi}%
+ \def\CYRISHRT{ZZZZI}%
+ \def\cyrishrt{zzzzi}%
+ \def\CYRK{ZZZZK}%
+ \def\cyrk{zzzzk}%
+ \def\CYRL{ZZZZL}%
+ \def\cyrl{zzzzl}%
+ \def\CYRM{ZZZZM}%
+ \def\cyrm{zzzzm}%
+ \def\CYRN{ZZZZN}%
+ \def\cyrn{zzzzn}%
+ \def\CYRO{ZZZZO}%
+ \def\cyro{zzzzo}%
+ \def\CYRP{ZZZZP}%
+ \def\cyrp{zzzzp}%
+ \def\CYRR{ZZZZR}%
+ \def\cyrr{zzzzr}%
+ \def\CYRS{ZZZZS}%
+ \def\cyrs{zzzzs}%
+ \def\CYRT{ZZZZT}%
+ \def\cyrt{zzzzt}%
+ \def\CYRU{ZZZZU}%
+ \def\cyru{zzzzu}%
+ \def\CYRF{ZZZZF}%
+ \def\cyrf{zzzzf}%
+ \def\CYRH{ZZZZH}%
+ \def\cyrh{zzzzh}%
+ \def\CYRC{ZZZZC}%
+ \def\cyrc{zzzzc}%
+ \def\CYRCH{ZZZZCH}%
+ \def\cyrch{zzzzch}%
+ \def\CYRSH{ZZZZSH}%
+ \def\cyrsh{zzzzsh}%
+ \def\CYRSHCH{ZZZZSHCH}%
+ \def\cyrshch{zzzzshch}%
+ \def\CYRHRDSN{ZZZZHRDSN}%
+ \def\cyrhrdsn{zzzzhrdsn}%
+ \def\CYRERY{ZZZZERY}%
+ \def\cyrery{zzzzery}%
+ \def\CYRSFTSN{ZZZZSFTSN}%
+ \def\cyrsftsn{zzzzsftsn}%
+ \def\CYREREV{ZZZZEREV}%
+ \def\cyrerev{zzzzerev}%
+ \def\CYRYU{ZZZZYU}%
+ \def\cyryu{zzzzyu}%
+ \def\CYRYA{ZZZZYA}%
+ \def\cyrya{zzzzya}%
+ \def\CYRGUP{ZZZZGUP}%
+ \def\cyrgup{zzzzgup}%
+ \def\CYRGHCRS{ZZZZGHCRS}%
+ \def\cyrghcrs{zzzzghcrs}%
+ \def\CYRDJE{ZZZZDJE}%
+ \def\cyrdje{zzzzdje}%
+ \def\CYRTSHE{ZZZZTSHE}%
+ \def\cyrtshe{zzzztshe}%
+ \def\CYRSHHA{ZZZZSHHA}%
+ \def\cyrshha{zzzzshha}%
+ \def\CYRZHDSC{ZZZZZHDSC}%
+ \def\cyrzhdsc{zzzzzhdsc}%
+ \def\CYRZDSC{ZZZZZDSC}%
+ \def\cyrzdsc{zzzzzdsc}%
+ \def\CYRLJE{ZZZZLJE}%
+ \def\cyrlje{zzzzlje}%
+ \def\CYRYI{ZZZZYI}%
+ \def\cyryi{zzzzyi}%
+ \def\CYRKDSC{ZZZZKDSC}%
+ \def\cyrkdsc{zzzzkdsc}%
+ \def\CYRKBEAK{ZZZZKBEAK}%
+ \def\cyrkbeak{zzzzkbeak}%
+ \def\CYRKVCRS{ZZZZKVCRS}%
+ \def\cyrkvcrs{zzzzkvcrs}%
+ \def\CYRAE{ZZZZAE}%
+ \def\cyrae{zzzzae}%
+ \def\CYRNDSC{ZZZZNDSC}%
+ \def\cyrndsc{zzzzndsc}%
+ \def\CYRNG{ZZZZNG}%
+ \def\cyrng{zzzzng}%
+ \def\CYRDZE{ZZZZDZE}%
+ \def\cyrdze{zzzzdze}%
+ \def\CYROTLD{ZZZZOTLD}%
+ \def\cyrotld{zzzzotld}%
+ \def\CYRSDSC{ZZZZSDSC}%
+ \def\cyrsdsc{zzzzsdsc}%
+ \def\CYRUSHRT{ZZZZUSHRT}%
+ \def\cyrushrt{zzzzushrt}%
+ \def\CYRY{ZZZZY}%
+ \def\cyry{zzzzy}%
+ \def\CYRYHCRS{ZZZZYHCRS}%
+ \def\cyryhcrs{zzzzyhcrs}%
+ \def\CYRHDSC{ZZZZHDSC}%
+ \def\cyrhdsc{zzzzhdsc}%
+ \def\CYRDZHE{ZZZZDZHE}%
+ \def\cyrdzhe{zzzzdzhe}%
+ \def\CYRCHVCRS{ZZZZCHVCRS}%
+ \def\cyrchvcrs{zzzzchvcrs}%
+ \def\CYRCHRDSC{ZZZZCHRDSC}%
+ \def\cyrchrdsc{zzzzchrdsc}%
+ \def\CYRIE{ZZZZIE}%
+ \def\cyrie{zzzzie}%
+ \def\CYRSCHWA{ZZZZSCHWA}%
+ \def\cyrschwa{zzzzschwa}%
+ \def\CYRNJE{ZZZZNJE}%
+ \def\cyrnje{zzzznje}%
+ \def\CYRYO{ZZZZYO}%
+ \def\cyryo{zzzzyo}%
+ \def\CYRII{ZZZZII}%
+ \def\cyrii{zzzzii}%
+ \def\CYRJE{ZZZZJE}%
+ \def\cyrje{zzzzje}%
+ \def\CYRQ{ZZZZQ}%
+ \def\cyrq{zzzzq}%
+ \def\CYRW{ZZZZW}%
+ \def\cyrw{zzzzw}%
+%
+ \def\CYREGRAVE{ZZZZE}%
+ \def\cyregrave{zzzze}%
+ \def\CYRGGRAVE{ZZZZG}%
+ \def\cyrggrave{zzzzg}%
+ \def\CYRKGRAVE{ZZZZK}%
+ \def\cyrkgrave{zzzzk}%
+ \def\CYRIGRAVE{ZZZZI}%
+ \def\cyrigrave{zzzzi}%
+%
+ \def\CYRZHBREVE{ZZZZZH}%
+ \def\cyrzhbreve{zzzzzh}%
+ \def\CYRABREVE{ZZZZA}%
+ \def\cyrabreve{zzzza}%
+ \def\CYREBREVE{ZZZZE}%
+ \def\cyrebreve{zzzze}%
+%
+ \def\CYRADIAERESIS{ZZZZA}%
+ \def\cyradiaeresis{zzzza}%
+ \def\CYRSCHWADIAERESIS{ZZZZSCHWA}%
+ \def\cyrschwadiaeresis{zzzzschwa}%
+ \def\CYRZHDIAERESIS{ZZZZZH}%
+ \def\cyrzhdiaeresis{zzzzzh}%
+ \def\CYRZDIAERESIS{ZZZZZ}%
+ \def\cyrzdiaeresis{zzzzz}%
+ \def\CYRIDIAERESIS{ZZZZI}%
+ \def\cyridiaeresis{zzzzi}%
+ \def\CYRODIAERESIS{ZZZZO}%
+ \def\cyrodiaeresis{zzzzo}%
+ \def\CYREREVDIAERESIS{ZZZZEREV}%
+ \def\cyrerevdiaeresis{zzzzerev}%
+ \def\CYRUDIAERESIS{ZZZZU}%
+ \def\cyrudiaeresis{zzzzu}%
+ \def\CYRCHDIAERESIS{ZZZZCH}%
+ \def\cyrchdiaeresis{zzzzch}%
+ \def\CYRERYDIAERESIS{ZZZZERY}%
+ \def\cyrerydiaeresis{zzzzery}%
+%
+ \def\CYRIMACRON{ZZZZI}%
+ \def\cyrimacron{zzzzi}%
+ \def\CYRUMACRON{ZZZZU}%
+ \def\cyrumacron{zzzzu}%
+%
+ \def\CYRUDOUBLEACUTE{ZZZZU}%
+ \def\cyrudoubleacute{zzzzu}%
+}
+
+\toks0 = \expandafter{\indexnofonts\cyrindexnofonts}
+\xdef\indexnofonts{\the\toks0}
+
+@end tex
+
+@c end of cyrillic.itexi
ISOLANG = de
depth = ../..
-SUBDIRS = web learning notation texidocs essay usage extending included
STEPMAKE_TEMPLATES = documentation texinfo
LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
\layout {
\context {
\Staff
- \override NoteSpacing #'stem-spacing-correction = #0.0
- \override NoteSpacing #'same-direction-correction = #0.0
- \override StaffSpacing #'stem-spacing-correction = #0.0
+ \override NoteSpacing.stem-spacing-correction = #0.0
+ \override NoteSpacing.same-direction-correction = #0.0
+ \override StaffSpacing.stem-spacing-correction = #0.0
}
}
}
\layout {
\context {
\Staff
- \override NoteSpacing #'stem-spacing-correction = #0.6
+ \override NoteSpacing.stem-spacing-correction = #0.6
}
}
}
<<
\new Staff \with {
fontSize = #-4
- \override StaffSymbol #'staff-space = #(magstep -4)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -4)
+ \override StaffSymbol.thickness = #(magstep -3)
}
\relative c' {
\global
\clef "bass"
<<
{
- \once \override DynamicText #'X-offset = #-3
+ \once \override DynamicText.X-offset = #-3
<ees g c>2.~->^\f
<ees g c>4.~ <ees g c>8
} \\ {
@lilypond
\relative c {
\clef bass
- \once \override Slur #'positions = #'(1.5 . 1)
+ \once \override Slur.positions = #'(1.5 . 1)
e8[( f] g[ a b d,)] r4
- \once \override Slur #'positions = #'(2 . 3)
+ \once \override Slur.positions = #'(2 . 3)
e8[( f] g[ a b d,)] r4
e8[( f] g[ a b d,)] r4
}
@lilypond
\relative c {
\clef bass
- \once \override Slur #'positions = #'(1.5 . 1)
+ \once \override Slur.positions = #'(1.5 . 1)
e8[(_"15.39" f] g[ a b d,)] r4
}
@end lilypond
@lilypond
\relative c {
\clef bass
- \once \override Slur #'positions = #'(2 . 3)
+ \once \override Slur.positions = #'(2 . 3)
e8[(_"13.08" f] g[ a b d,)] r4
}
@end lilypond
}
\context {
\PianoStaff
- \override StaffGrouper #'staff-staff-spacing #'padding = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #1
}
}
}
die untere und obere Stimme zeitweise ausgetauscht werden:
@lilypond
-collide = \once \override NoteColumn #'force-hshift = #0
+collide = \once \override NoteColumn.force-hshift = #0
\score {
<<
\change Staff = "LH" \oneVoice
\stemUp g,( c}
r4
- \override Stem #'cross-staff = ##t
- \override Stem #'length = #12
+ \override Stem.cross-staff = ##t
+ \override Stem.length = #12
<fis, b>) r\fermata
}
>>
\score {
\relative c' {
\stemDown <e g b>4_>-\arpeggio
- \override Arpeggio #'direction = #RIGHT
+ \override Arpeggio.direction = #RIGHT
\stemUp <e g b>4^>-\arpeggio
}
\layout {
\context {
\Score
- \override SpacingSpanner #'spacing-increment = #3
- \override TimeSignature #'transparent = ##t
+ \override SpacingSpanner.spacing-increment = #3
+ \override TimeSignature.transparent = ##t
}
}
}
<<
\new Staff \fragment
\new Staff \with {
- \override Beam #'beam-thickness = #0.3
- \override Stem #'thickness = #0.5
- \override Bar #'thickness = #3.6
- \override Tie #'thickness = #2.2
- \override StaffSymbol #'thickness = #3.0
- \override Tie #'extra-offset = #'(0 . 0.3)
+ \override Beam.beam-thickness = #0.3
+ \override Stem.thickness = #0.5
+ \override Bar.thickness = #3.6
+ \override Tie.thickness = #2.2
+ \override StaffSymbol.thickness = #3.0
+ \override Tie.extra-offset = #'(0 . 0.3)
}
\fragment
>>
\set autoBeaming = ##f
\time 2/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
- \once \override NoteHead #'font-series = #'bold
+ \once \override NoteHead.stencil = #note-head::brew-ez-stencil
+ \once \override NoteHead.font-size = #-7
+ \once \override NoteHead.font-family = #'sans
+ \once \override NoteHead.font-series = #'bold
<d f g>4
- \once \override NoteHead #'style = #'cross
+ \once \override NoteHead.style = #'cross
<d f g>4
\applyOutput #'Voice #mc-squared
<d f g>4
\time 4/8
\key c \minor
<< {
- \revert Stem #'direction
+ \revert Stem.direction
\change Staff = down
\set subdivideBeams = ##t
g16.[
\clef bass
\key c \minor
\set subdivideBeams = ##f
- \override Stem #'french-beaming = ##t
- \override Beam #'beam-thickness = #0.3
- \override Stem #'thickness = #4.0
+ \override Stem.french-beaming = ##t
+ \override Beam.beam-thickness = #0.3
+ \override Stem.thickness = #4.0
g'16[ b16 fis16 g16]
<< \makeClusters {
as16 <as b>
<g b>
<g cis>
} \\ {
- \override Staff.Arpeggio #'arpeggio-direction =#down
+ \override Staff.Arpeggio.arpeggio-direction =#down
<cis, e, gis, b, cis>4\arpeggio
}
>> }
}
\context {
\PianoStaff
- \override StaffGrouper #'staff-staff-spacing #'padding = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #1
}
}
}
+++ /dev/null
-depth = ../../..
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
(parser location beg-end)
(pair?)
#@{
- \once \override Beam #'positions = #beg-end
+ \once \override Beam.positions = #beg-end
#@})
\relative c' @{
(parser location beg end)
(number? number?)
#{
- \once \override Beam #'positions = #(cons beg end)
+ \once \override Beam.positions = #(cons beg end)
#})
\relative c' {
(parser location mag)
(number?)
#{
- \override Stem #'length = #(* 7.0 mag)
- \override NoteHead #'font-size =
+ \override Stem.length = #(* 7.0 mag)
+ \override NoteHead.font-size =
#(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
#})
AltOff = {
- \revert Stem #'length
- \revert NoteHead #'font-size
+ \revert Stem.length
+ \revert NoteHead.font-size
}
\relative c' {
(parser location mag music)
(number? ly:music?)
#{
- \override Stem #'length = #(* 7.0 mag)
- \override NoteHead #'font-size =
+ \override Stem.length = #(* 7.0 mag)
+ \override NoteHead.font-size =
#(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
#music
- \revert Stem #'length
- \revert NoteHead #'font-size
+ \revert Stem.length
+ \revert NoteHead.font-size
#})
\relative c' {
(parser location)
()
(if (eq? #t (ly:get-option 'display-bar-numbers))
- #@{ \once \override Score.BarNumber #'break-visibility = ##f #@}
+ #@{ \once \override Score.BarNumber.break-visibility = ##f #@}
#@{#@}))
@end example
usw.) können mit @code{\override} auf feste Werte gesetzt werden, etwa:
@example
-\override Stem #'thickness = #2.0
+\override Stem.thickness = #2.0
@end example
Eigenschaften können auch auf eine Scheme-Prozedur gesetzt werden:
@lilypond[fragment,verbatim,quote,relative=2]
-\override Stem #'thickness = #(lambda (grob)
+\override Stem.thickness = #(lambda (grob)
(if (= UP (ly:grob-property grob 'direction))
2.0
7.0))
TODO: das Beispiel für diesen Abschnitt ist nicht gut gewähtl:
@example
-F = -\tweak #'font-size #-3 -\flageolet
+F = -\tweak font-size #-3 -\flageolet
@end example
(beachte @samp{-}, was ein Nachereignis anzeigt) funktioniert
für den geschilderten Zweck sehr gut. Aber bis der Abschnitt
ergibt einen Syntaxfehler:
@example
-F = \tweak #'font-size #-3 -\flageolet
+F = \tweak font-size #-3 -\flageolet
\relative c'' @{
c4^\F c4_\F
(ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
\relative c'' {
- \override Tie #'after-line-breaking =
+ \override Tie.after-line-breaking =
#my-callback
c1 ~ \break c2 ~ c
}
@example
\overrideProperty
-#"Score.NonMusicalPaperColumn" % Grob-Bezeichnung
+Score.NonMusicalPaperColumn % Grob-Bezeichnung
#'line-break-system-details % Eigenschaftsbezeichnung
#'((next-padding . 20)) % Wert
@end example
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Scheme-Übung
@chapter Scheme-Übung
LilyPond-Syntax hierfür ist:
@example
-\override Stem #'thickness = #2.6
+\override Stem.thickness = #2.6
@end example
Diese Anweisung verändert die Erscheinung der Notenhälse. Der Alist-Eintrag
Y-Koordinate.
@example
-\override TextScript #'extra-offset = #'(1 . 2)
+\override TextScript.extra-offset = #'(1 . 2)
@end example
Hierdurch wird das Paar @code{(1 . 2)} mit der Eigenschaft @code{extra-offset}
Wir haben gesehen wie LilyPond-Eingabe massiv beeinflusst
werden kann, indem Befehle wie etwa
-@code{\override TextScript #'extra-offset = ( 1 . -1)}
+@code{\override TextScript.extra-offset = ( 1 . -1)}
benutzt werden. Aber es wurde gezeigt, dass Scheme noch
mächtiger ist. Eine bessere Erklärung findet sich in der@ref{Scheme-Übung} und in
@ruser{Schnittstellen für Programmierer}.
@lilypond[quote,verbatim,ragged-right]
padText = #(define-music-function (parser location padding) (number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
tempoPadded = #(define-music-function (parser location padding tempotext)
(number? markup?)
#{
- \once \override Score.MetronomeMark #'padding = #padding
+ \once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
+++ /dev/null
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala, Reinhold Kainhofer
@node Grundbegriffe
\\ % Voice two
{
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'ignore-collision = ##t
+ \once \override NoteColumn.ignore-collision = ##t
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\ % No voice three
\\ % Voice four
{
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
\\ % Voice two
{ \voiceTwoStyle
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'ignore-collision = ##t
+ \once \override NoteColumn.ignore-collision = ##t
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\ % No Voice three (we want stems down)
\\ % Voice four
{ \voiceThreeStyle
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
@}
>> % end ManualOne Staff context
\new Staff = "ManualTwo" \with @{
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
@} <<
\keyTime
\clef "bass"
}
>> % end ManualOne Staff context
\new Staff = "ManualTwo" \with {
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
} <<
\keyTime
\clef "bass"
@c TODO Avoid padtext - not needed with skylining
@lilypond[quote,verbatim,ragged-right]
dolce = \markup { \italic \bold dolce }
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
fthenp=_\markup {
\dynamic f \italic \small { 2nd } \hspace #0.1 dynamic p
}
violin = \relative c'' @{
\repeat volta 2 @{
c4._\markup @{ \italic \bold dolce @} b8 a8 g a b
- \once \override TextScript #'padding = #5.0
+ \once \override TextScript.padding = #5.0
c4.^"hi there!" d8 e' f g d
c,4.\markup @{
\dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Die Ausgabe verändern
@chapter Die Ausgabe verändern
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
g4 a b c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
b4 c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\once \override NoteHead #'color = #green
+\once \override NoteHead.color = #green
g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
b c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>4
-\once \override NoteHead #'font-size = #-3
+\once \override NoteHead.font-size = #-3
<c e g>4
<c e g>4
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>4
-<c \tweak #'font-size #-3 e g>4
+<c \tweak font-size #-3 e g>4
@end lilypond
Beachten Sie, dass die Syntax des @code{\tweak}-Befehls sich
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
a4^"Black"
- -\tweak #'color #red ^"Red"
- -\tweak #'color #green _"Green"
+ -\tweak color #red ^"Red"
+ -\tweak color #green _"Green"
@end lilypond
@noindent
bis zu dem ursprünglichen Ereignis zurück verfolgen kann:
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-<\tweak Accidental #'color #red cis4
- \tweak Accidental #'color #green es
+<\tweak Accidental.color #red cis4
+ \tweak Accidental.color #green es
g>
@end lilypond
@cindex direction-Eigenschaft, Beispiel
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
+\tweak direction #up
\times 4/3 {
- \tweak #'color #red
+ \tweak color #red
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
@c See issue 509
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
\times 2/3 { c8[ c c] }
-\once \override TupletNumber
- #'text = #tuplet-number::calc-fraction-text
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
\times 2/3 {
c8[ c]
c8[ c]
- \once \override TupletNumber #'transparent = ##t
+ \once \override TupletNumber.transparent = ##t
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
}
Befehl auch funktioniert. Also:
@example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
@end example
Vergessen Sie nicht das Rautenzeichen und Apostroph
\time 6/8
{
% Increase thickness of all following slurs from 1.2 to 5.0
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
r4 bes8 bes[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
\key es \major
r4 bes8
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes8[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
{
r4 bes8
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes[( g]) g |
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
g8[( es]) es d[( f]) as |
as8 g
}
{
r4 bes8
% Increase thickness of all following slurs from 1.2 to 5.0
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
bes[( g]) g |
g8[( es]) es
% Revert thickness of all following slurs to default of 1.2
- \revert Slur #'thickness
+ \revert Slur.thickness
d8[( f]) as |
as8 g
}
kursiv gesetzt wird, lautet:
@example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
@end example
@noindent
as8 g
}
\addlyrics {
- \override LyricText #'font-shape = #'italic
+ \override LyricText.font-shape = #'italic
The man who | feels love's sweet e -- | mo -- tion
}
}
werden. Der Befehl muss also lauten:
@example
-\override Lyrics . LyricText #'font-shape = #'italic
+\override Lyrics.LyricText.font-shape = #'italic
@end example
@warning{Innerhalb von Gesangstext muss immer ein
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override BarLine #'stencil = ##f
+ \override BarLine.stencil = ##f
c4 b8 c d16 c d8
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'stencil = ##f
+ \override Staff.BarLine.stencil = ##f
c4 b8 c d16 c d8
g,8 a16 b8 c d4 e16
e8
@lilypond[quote,verbatim,relative=2]
{
c4 c
- \once \override NoteHead #'stencil = #point-stencil
+ \once \override NoteHead.stencil = #point-stencil
c4 c
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+ \override Staff.BarLine.break-visibility = #'#(#f #f #f)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'transparent = ##t
+ \override Staff.TimeSignature.transparent = ##t
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #white
+ \override Staff.BarLine.color = #white
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #(x11-color 'white)
+ \override Staff.BarLine.color = #(x11-color 'white)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+ \override Staff.BarLine.color = #(rgb-color 1 1 1)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.StaffSymbol #'color = #(x11-color 'grey30)
- \override Staff.TimeSignature #'color = #(x11-color 'grey60)
- \override Staff.Clef #'color = #(x11-color 'grey60)
- \override Voice.NoteHead #'color = #(x11-color 'grey85)
- \override Voice.Stem #'color = #(x11-color 'grey85)
- \override Staff.BarLine #'color = #(x11-color 'grey10)
+ \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+ \override Staff.TimeSignature.color = #(x11-color 'grey60)
+ \override Staff.Clef.color = #(x11-color 'grey60)
+ \override Voice.NoteHead.color = #(x11-color 'grey85)
+ \override Voice.Stem.color = #(x11-color 'grey85)
+ \override Staff.BarLine.color = #(x11-color 'grey10)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
alignAboveContext = #"main"
}
{
- \override Staff.Clef #'stencil = ##f
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.Clef.stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
{ f8 f c }
}
>>
\new Staff \with {
alignAboveContext = #"main"
% Don't print clefs in this staff
- \override Clef #'stencil = ##f
+ \override Clef.stencil = ##f
% Don't print time signatures in this staff
- \override TimeSignature #'stencil = ##f
+ \override TimeSignature.stencil = ##f
}
{ f8 f c }
>>
mit einem eigenen Befehl, etwa:
@example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
@end example
@noindent
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \override Clef.stencil = ##f
+ \override TimeSignature.stencil = ##f
% Reduce all font sizes by ~24%
fontSize = #-2
}
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \override Clef.stencil = ##f
+ \override TimeSignature.stencil = ##f
fontSize = #-2
% Reduce stem length and line spacing to match
- \override StaffSymbol #'staff-space = #(magstep -2)
+ \override StaffSymbol.staff-space = #(magstep -2)
}
{ f8 f c }
>>
@lilypond[quote,verbatim,relative=2]
a4 g c a
-\override Stem #'direction = #DOWN
+\override Stem.direction = #DOWN
a4 g c a
-\override Stem #'direction = #UP
+\override Stem.direction = #UP
a4 g c a
-\revert Stem #'direction
+\revert Stem.direction
a4 g c a
@end lilypond
@lilypond[quote,verbatim,relative=2]
c4-5 a-3 f-1 c'-5
-\override Fingering #'direction = #DOWN
+\override Fingering.direction = #DOWN
c4-5 a-3 f-1 c'-5
-\override Fingering #'direction = #UP
+\override Fingering.direction = #UP
c4-5 a-3 f-1 c'-5
@end lilypond
er ist @w{@code{-5}}, versuchen wir es also mit @w{@code{-7}}.
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
+\override Fingering.font-size = #-7
\set fingeringOrientations = #'(left)
<f-2>4
<c-1 e-2 g-3 b-5>4
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
% Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% Place dynamics above staff
\dynamicUp
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
% Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% Place dynamics above staff
\dynamicUp
% Place following Ottava Bracket below Text Spanners
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
% Start Ottava Bracket
\ottava #1
c'4 \startTextSpan
@lilypond[quote,verbatim,relative=2]
c4( c^\markup { \tiny \sharp } d4.) c8
c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
c4^\markup { \tiny \sharp } d4.) c8
-\once \override Slur #'outside-staff-priority = #500
+\once \override Slur.outside-staff-priority = #500
c4( c^\markup { \tiny \sharp } d4.) c8
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
c2^"Text1"
c2^"Text2" |
-\once \override TextScript #'outside-staff-priority = #500
+\once \override TextScript.outside-staff-priority = #500
c2^"Text3"
c2^"Text4" |
@end lilypond
R1 |
% Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
c,,2^"Long Text " c'' |
R1 |
% Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
\textLengthOn % and turn on textLengthOn
c,,2^"Long Text " % Spaces at end are honored
c''2 |
Dynamik-Zeichen erledigt:
@example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
@end example
@noindent
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
% Extend width by 1 staff space
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
c2\fermata
-\override Script #'padding = #3
+\override Script.padding = #3
b2\fermata
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
% This will not work, see below
-\override MetronomeMark #'padding = #3
+\override MetronomeMark.padding = #3
\tempo 4 = 120
c1 |
% This works
-\override Score.MetronomeMark #'padding = #3
+\override Score.MetronomeMark.padding = #3
\tempo 4 = 80
d1 |
@end lilypond
\relative c'' {
c4
% This prints a sesquisharp but the spacing is too small
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4 c
% This improves the spacing
- \once \override Score.AccidentalPlacement #'right-padding = #0.6
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Score.AccidentalPlacement.right-padding = #0.6
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
% Extend width by 1 unit
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
% Align dynamics to a base line 2 units above staff
-\override DynamicLineSpanner #'staff-padding = #2
+\override DynamicLineSpanner.staff-padding = #2
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=3]
\voiceOne
< a\2 >
-\once \override StringNumber #'self-alignment-X = #RIGHT
+\once \override StringNumber.self-alignment-X = #RIGHT
< a\2 >
@end lilypond
<<
{ c4 c c c }
\\
- \override MultiMeasureRest #'staff-position = #-8
+ \override MultiMeasureRest.staff-position = #-8
{ R1 }
>>
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
\stemUp
f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
f4-5
@end lilypond
@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
+\once \override PhrasingSlur.positions = #'(-4 . -3)
\acciaccatura e8\( d8 c~ c d c d\)
@end lilypond
{ c'1 ~ c'2. e'8 f' }
\\
{
- \override Beam #'positions = #'(-1 . -1)
+ \override Beam.positions = #'(-1 . -1)
e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g''
}
>>
\\
{
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\
\\
{
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\voiceTwo
c,8~
% Reposition the c2 to the right of the merged note
- \once \override NoteColumn #'force-hshift = #1.0
+ \once \override NoteColumn.force-hshift = #1.0
% Move the c2 out of the main note column
% so the merge will work
\shiftOnn
% Stem on the d2 must be down to permit merging
\stemDown
% Stem on the d2 should be invisible
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
d2
}
\new Voice {
den Bindebogen (@code{tie}) 3,5 halbe Notenlinienabstände
über die Mittellinie:
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
Damit ist auch der zweite Takt vollständig:
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\voiceTwo
c,8~
% Reposition the c2 to the right of the merged note
- \once \override NoteColumn #'force-hshift = #1.0
+ \once \override NoteColumn.force-hshift = #1.0
% Move the c2 out of the main note column
% so the merge will work
\shiftOnn
% Stem on the d2 must be down to permit merging
\stemDown
% Stem on the d2 should be invisible
- \tweak Stem #'transparent ##t
+ \tweak Stem.transparent ##t
d2
}
\new Voice {
@lilypond[quote,fragment,relative=2,verbatim]
<<
{
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
b8~ b\noBeam
}
\\
@lilypond[quote,fragment,relative=2,verbatim]
<<
{
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
- \tweak Stem #'length #8
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
+ \tweak Stem.length #8
b8~ b\noBeam
}
\\
% Visible tempo marking
\tempo 4=120
a4 a a
- \once \override Score.MetronomeMark #'transparent = ##t
+ \once \override Score.MetronomeMark.transparent = ##t
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
a4\fermata
% Visible tempo marking
\tempo 4=120
a4 a a
- \once \override Score.MetronomeMark #'stencil = ##f
+ \once \override Score.MetronomeMark.stencil = ##f
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
a4\fermata
@code{\override} und @code{\revert} zu konstruieren.
@example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
@end example
Das wäre natürlich noch viel mühsamer, wenn viele Wörter eine
@lilypond[quote,verbatim]
emphasize = {
- \override Lyrics.LyricText #'font-shape = #'italic
- \override Lyrics.LyricText #'font-series = #'bold
+ \override Lyrics.LyricText.font-shape = #'italic
+ \override Lyrics.LyricText.font-series = #'bold
}
normal = {
- \revert Lyrics.LyricText #'font-shape
- \revert Lyrics.LyricText #'font-series
+ \revert Lyrics.LyricText.font-shape
+ \revert Lyrics.LyricText.font-series
}
global = { \key c \major \time 4/4 \partial 4 }
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
\layout{
\context {
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
}
\context {
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
}
\context {
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
\layout{
\context { \Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
}
\context { \Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
@example
tieDotted = @{
- \override Tie #'dash-period = #0.75
- \override Tie #'dash-fraction = #0.1
+ \override Tie.dash-period = #0.75
+ \override Tie.dash-fraction = #0.1
@}
@end example
\relative c' {
% Arrange to obtain color from color-notehead procedure
- \override NoteHead #'color = #color-notehead
+ \override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
}
@end lilypond
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
\context {
\Staff
\consists "Custos_engraver"
- \override Custos #'style = #'mensural
+ \override Custos.style = #'mensural
}
}
}
\score {
<<
\new MensuralVoice = "discantus" \transpose c c' {
- \override Score.BarNumber #'transparent = ##t {
+ \override Score.BarNumber.transparent = ##t {
c'1\melisma bes a g\melismaEnd
f\breve
\[ f1\melisma a c'\breve d'\melismaEnd \]
@tab
@lilypond[relative=1,notime]
\clef "mensural-c2"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "mensural-f"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "mensural-g"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "petrucci-c2"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "petrucci-c2"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "petrucci-g"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter default }
- \override Staff.TimeSignature #'style = #'numbered
+ \override Staff.TimeSignature.style = #'numbered
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter numbered }
- \override Staff.TimeSignature #'style = #'mensural
+ \override Staff.TimeSignature.style = #'mensural
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter mensural }
- \override Staff.TimeSignature #'style = #'neomensural
+ \override Staff.TimeSignature.style = #'neomensural
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter neomensural }
- \override Staff.TimeSignature #'style = #'single-digit
+ \override Staff.TimeSignature.style = #'single-digit
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter single-digit }
}
@lilypond[quote,fragment,ragged-right,verbatim]
\set Score.skipBars = ##t
\autoBeamOff
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a'
-\override NoteHead #'style = #'semipetrucci
+\override NoteHead.style = #'semipetrucci
a'\breve*5/6
-\override NoteHead #'style = #'blackpetrucci
+\override NoteHead.style = #'blackpetrucci
a'8*4/3 a'
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
a'\longa
@end lilypond
nur (@code{mensural}) unterstützt.
@lilypond[quote,fragment,ragged-right,verbatim]
-\override Flag #'style = #'mensural
-\override Stem #'thickness = #1.0
-\override NoteHead #'style = #'mensural
+\override Flag.style = #'mensural
+\override Stem.thickness = #1.0
+\override NoteHead.style = #'mensural
\autoBeamOff
c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8
c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32
@lilypond[quote,fragment,ragged-right,verbatim]
\set Score.skipBars = ##t
-\override Rest #'style = #'classical
+\override Rest.style = #'classical
r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'mensural
+\override Rest.style = #'mensural
r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'neomensural
+\override Rest.style = #'neomensural
r\longa^"neomensural" r\breve r1 r2 r4 r8 r16
@end lilypond
also etwa folgendermaßen:
@example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
#alteration-mensural-glyph-name-alist
@end example
@c @example
@c \set Score.timing = ##f
-@c \set Score.defaultBarType = "empty"
-@c \override NoteHead #'style = #'neomensural
-@c \override Staff.TimeSignature #'style = #'neomensural
+@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 \]
\score {
\transpose c c' {
\set Score.timing = ##f
- \set Score.defaultBarType = "empty"
- \override NoteHead #'style = #'petrucci
- \override Staff.TimeSignature #'style = #'mensural
+ \set Score.defaultBarType = "-"
+ \override NoteHead.style = #'petrucci
+ \override Staff.TimeSignature.style = #'mensural
\clef "petrucci-g"
\[ c'\maxima g \]
\[ d\longa
- \override NoteHead #'ligature-flexa = ##t
- \once \override NoteHead #'flexa-width = #3.2
+ \override NoteHead.ligature-flexa = ##t
+ \once \override NoteHead.flexa-width = #3.2
c\breve f e d \]
\[ c'\maxima d'\longa \]
\[ e'1 a g\breve \]
@lilypond[quote,ragged-right]
\transpose c c' {
\set Score.timing = ##f
- \set Score.defaultBarType = "empty"
- \override NoteHead #'style = #'neomensural
- \override Staff.TimeSignature #'style = #'neomensural
+ \set Score.defaultBarType = "-"
+ \override NoteHead.style = #'neomensural
+ \override Staff.TimeSignature.style = #'neomensural
\clef "petrucci-g"
\[ c'\maxima g \]
\[ d\longa c\breve f e d \]
@code{vaticana-do3}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'vaticana.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'vaticana.punctum
\clef "vaticana-do2"
c
@end lilypond
@code{vaticana-fa1}, @code{vaticana-fa2}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'vaticana.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'vaticana.punctum
\clef "vaticana-fa2"
c
@end lilypond
@code{medicaea-do3}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'medicaea.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'medicaea.punctum
\clef "medicaea-do2"
c
@end lilypond
@code{medicaea-fa1}, @code{medicaea-fa2}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'medicaea.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'medicaea.punctum
\clef "medicaea-fa2"
c
@end lilypond
@code{hufnagel-do3}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'hufnagel.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-do2"
c
@end lilypond
@code{hufnagel-fa1}, @code{hufnagel-fa2}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'hufnagel.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-fa2"
c
@end lilypond
@code{hufnagel-do-fa}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'hufnagel.punctum
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-do-fa"
c
@end lilypond
kontrolliert, beispielsweise:
@example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
#alteration-mensural-glyph-name-alist
@end example
\score {
<<
\context VaticanaVoice {
- \override TextScript #'padding = #3
+ \override TextScript.padding = #3
g a g
s^\markup { "divisio minima" }
\divisioMinima
\include "gregorian.ly"
\score {
\new VaticanaVoice {
- \override TextScript #'font-family = #'typewriter
- \override TextScript #'font-shape = #'upright
- \override Script #'padding = #-0.1
+ \override TextScript.font-family = #'typewriter
+ \override TextScript.font-shape = #'upright
+ \override Script.padding = #-0.1
a\ictus_"ictus " \bar "" \break
a\circulus_"circulus " \bar "" \break
a\semicirculus_"semicirculus " \bar "" \break
@lilypond[quote,relative=1,notime,verbatim]
\clef "kievan-do"
- \override NoteHead #'style = #'kievan
+ \override NoteHead.style = #'kievan
c
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim]
\autoBeamOff
\cadenzaOn
-\override NoteHead #'style = #'kievan
+\override NoteHead.style = #'kievan
b'1 b'2 b'4 b'8 b'\breve b'\longa
@end lilypond
@lilypond[quote,relative=1,notime,verbatim]
\clef "kievan-do"
-\override NoteHead #'style = #'kievan
-\override Accidental #'glyph-name-alist =
+\override NoteHead.style = #'kievan
+\override Accidental.glyph-name-alist =
#alteration-kievan-glyph-name-alist
bes' dis,
@end lilypond
@lilypond[quote,relative=1,notime,verbatim]
\clef "kievan-do"
- \override NoteHead #'style = #'kievan
+ \override NoteHead.style = #'kievan
c \bar "kievan"
@end lilypond
In einigen Transkriptionsstilen werden jedoch teilweise
Hälse eingesetzt, um etwa den Übergang von einem Einton-Rezitativ
zu einer melodischen Geste anzuzeigen. In diesem Fall können
-Hälse entweder mit @code{\override Stem #'transparent = ##t}
+Hälse entweder mit @code{\override Stem.transparent = ##t}
unsichtbar gemacht werden oder mit
-@code{\override Stem #'length = #0} auf die Länge von 0 reduziert
+@code{\override Stem.length = #0} auf die Länge von 0 reduziert
werden. Die Hälse müssen dann wieder an den entsprechenden
-Stellen mit @code{\once \override Stem #'transparent = ##f}
+Stellen mit @code{\once \override Stem.transparent = ##f}
sichtbar gemacht werden (siehe auch Beispiel unten). Wenn Hälse
eingesetzt werden, die Fähnchen haben, muss zusätzlich auch noch
-@code{\override Flag #'transparent = ##t} eingestellt werden.
+@code{\override Flag.transparent = ##t} eingestellt werden.
@b{Takt.} Für Gesang ohne Metrum gibt es einige Alternativen.
Um Taktstriche zu entfernen, kann man radikal den @code{Bar_engraver}
aus dem @code{Staff}-Kontext entfernen. Wenn man ab und zu
einen Taktstrich braucht, sollten die Striche nur mit
-@code{\override BarLine #'transparent = ##t} unsichtbar
+@code{\override BarLine.transparent = ##t} unsichtbar
gemacht werden.
Oft werden Rezitativtöne mit einer Brevis angezeigt. Der
}
verba = \lyricmode {
- \once \override LyricText #'self-alignment-X = #-1
+ \once \override LyricText.self-alignment-X = #-1
"Noctem quietam et" fi -- nem per -- fec -- tum
- \once \override LyricText #'self-alignment-X = #-1
+ \once \override LyricText.self-alignment-X = #-1
"concedat nobis Dominus" om -- ni -- po -- tens.
}
\score {
\Staff
\remove "Time_signature_engraver"
\remove "Bar_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
}
}
}
chant = \relative c' {
\clef "G_8"
\set Score.timing = ##f
- c\breve \override NoteHead #'transparent = ##t c c c c c
- \revert NoteHead #'transparent
- \override Stem #'transparent = ##f \stemUp c4 b4 a
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t c2 c4 \divisioMaior
- c\breve \override NoteHead #'transparent = ##t c c c c c c c
- \revert NoteHead #'transparent c4 c f, f \finalis
+ c\breve \override NoteHead.transparent = ##t c c c c c
+ \revert NoteHead.transparent
+ \override Stem.transparent = ##f \stemUp c4 b4 a
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t c2 c4 \divisioMaior
+ c\breve \override NoteHead.transparent = ##t c c c c c c c
+ \revert NoteHead.transparent c4 c f, f \finalis
}
verba = \lyricmode {
\context {
\Staff
\remove "Time_signature_engraver"
- \override BarLine #'transparent = ##t
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override BarLine.transparent = ##t
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
}
}
}
@lilypond[verbatim,quote]
spiritus = \relative c' {
\time 1/4
- \override Lyrics.LyricText #'X-extent = #'(0 . 3)
+ \override Lyrics.LyricText.X-extent = #'(0 . 3)
d4 \times 2/3 { f8 a g } g a a4 g f8 e
d4 f8 g g8 d f g a g f4 g8 a a4 s
\times 2/3 { g8 f d } e f g a g4
\context {
\Staff
\remove "Time_signature_engraver"
- \override BarLine #'X-extent = #'(-1 . 1)
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Beam #'transparent = ##t
- \override BarLine #'transparent = ##t
- \override TupletNumber #'transparent = ##t
+ \override BarLine.X-extent = #'(-1 . 1)
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Beam.transparent = ##t
+ \override BarLine.transparent = ##t
+ \override TupletNumber.transparent = ##t
}
}
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
\layout {
\context {
\Staff
- \override Stem #'thickness = #4.0
+ \override Stem.thickness = #4.0
}
}
}
@item
Ein vordefinierter Befehl wie etwa @code{\dynamicUp} oder ein
-musikalischer Ausdruck wie @code{\accidentalStyle "dodecaphonic"}:
+musikalischer Ausdruck wie @code{\accidentalStyle dodecaphonic}:
@lilypond[quote,verbatim]
\score {
}
\context {
\Staff
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
}
}
}
}
}
\layout {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\set fontSize = #-4
- \override Voice.Stem #'thickness = #4.0
+ \override Voice.Stem.thickness = #4.0
}
}
@end lilypond
\new Staff {
\new Voice
\with {
- \override Stem #'thickness = #4.0
+ \override Stem.thickness = #4.0
}
{
\relative c'' {
}
}
\new Staff
- \with { \accidentalStyle "dodecaphonic" }
+ \with { \accidentalStyle dodecaphonic }
{
\new Voice
\with { \dynamicUp }
\consists "Text_engraver"
\consists "Pitch_squash_engraver"
squashedPosition = #0
- \override NoteHead #'style = #'slash
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override NoteHead.style = #'slash
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
\alias Voice
}
\context { \Staff
Die Noten sehen wie ein Querstrich aus und haben keine Hälse:
@example
-\override NoteHead #'style = #'slash
-\override Stem #'transparent = ##t
-\override Flag #'transparent = ##t
+\override NoteHead.style = #'slash
+\override Stem.transparent = ##t
+\override Flag.transparent = ##t
@end example
Alle diese Engraver müssen zusammenarbeiten, und das wird erreicht mit
\consists "Text_engraver"
\consists "Pitch_squash_engraver"
squashedPosition = #0
- \override NoteHead #'style = #'slash
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override NoteHead.style = #'slash
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
\alias Voice
@}
@end example
fügt drei Notenlinienzwischenräume zwischen die Zahl und den Notenkopf:
@example
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
@end example
Wenn dieser Befehl in den Quelltext eingefügt wird, bevor der
Fingersatz notiert ist, erhält man folgendes:
@lilypond[quote,relative=2,verbatim]
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
c-2
\stemUp
f
Der Befehl
@verbatim
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
@end verbatim
@noindent
@lilypond[quote,verbatim,relative=2]
c4
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
c4
c4
c4
@lilypond[quote,verbatim,relative=2]
c4
-\once \override Stem #'thickness = #4.0
+\once \override Stem.thickness = #4.0
c4
c4
@end lilypond
folgenden Beispiel
@lilypond[quote,verbatim,relative=2]
-\override Slur #'thickness = #3.0
+\override Slur.thickness = #3.0
c8[( c
-\override Beam #'beam-thickness = #0.6
+\override Beam.beam-thickness = #0.6
c8 c])
@end lilypond
weil er für den falschen Kontext gefordert wird.
@example
-\override Voice.Stem #'thickness = #4.0
-\revert Staff.Stem #'thickness
+\override Voice.Stem.thickness = #4.0
+\revert Staff.Stem.thickness
@end example
Einige veränderbare Optionen werden als Untereigenschaften (engl.
wie beispielsweise
@example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
+\override Stem.details.beamed-lengths = #'(4 4 3)
@end example
@end ignore
@lilypond[quote, verbatim, relative=2]
c4 c
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
c4 c
@end lilypond
benutzt:
@lilypond[quote, verbatim, relative=2]
-{ \override Staff.Stem #'thickness = #3.0
+{ \override Staff.Stem.thickness = #3.0
<<
{
e4 e
- \override Stem #'thickness = #0.5
+ \override Stem.thickness = #0.5
e4 e
} \\ {
c4 c c c
@lilypond[quote, verbatim, relative=2]
c4
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
c4 c
-\revert Voice.Stem #'thickness
+\revert Voice.Stem.thickness
c4
@end lilypond
<<
{
e4
- \override Staff.Stem #'thickness = #3.0
+ \override Staff.Stem.thickness = #3.0
e4 e e
} \\ {
c4 c c
- \revert Staff.Stem #'thickness
+ \revert Staff.Stem.thickness
c4
}
>>
{
<<
{
- \override Stem #'thickness = #3.0
+ \override Stem.thickness = #3.0
e4 e e e
} \\ {
c4
- \once \override Stem #'thickness = #3.0
+ \once \override Stem.thickness = #3.0
c4 c c
}
>>
@lilypond[relative=2,verbatim]
< c
- \tweak #'color #red
+ \tweak color #red
d
g
- \tweak #'duration-log #1
+ \tweak duration-log #1
a
> 4
--\tweak #'padding #8
+-\tweak padding #8
-^
@end lilypond
@lilypond[relative=2,verbatim,quote]
-<\tweak #'color #red c>4
+<\tweak color #red c>4
@end lilypond
@noindent
und das nicht:
@lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
+\tweak color #red c4
@end lilypond
@end ignore
@lilypond[relative=2,verbatim,quote]
< c
- \tweak #'color #red
+ \tweak color #red
d
g
- \tweak #'duration-log #1
+ \tweak duration-log #1
a
> 4
@end lilypond
@code{\tweak} kann auch benutzt werden, um Bögen zu verändern:
@lilypond[verbatim,quote,relative=1]
-c-\tweak #'thickness #5 ( d e f)
+c-\tweak thickness #5 ( d e f)
@end lilypond
Damit der @code{\tweak}-Befehl funktioniert, muss er direkt vor dem
@code{EventChord} erstellt werden:
@lilypond[relative=2,verbatim,quote]
-\tweak #'color #red <c e>4
-<\tweak #'color #red c e>4
+\tweak color #red <c e>4
+<\tweak color #red c e>4
@end lilypond
Der einfache @code{\tweak}-Befehl kann @emph{nicht} eingesetzt werden, um
werden, indem man die ausführliche Form des Befehls einsetzt:
@lilypond[relative=2,verbatim,quote]
-\tweak Stem #'color #red
-\tweak Beam #'color #green c8 e
-<c e \tweak Accidental #'font-size #-3 ges>4
+\tweak Stem.color #red
+\tweak Beam.color #green c8 e
+<c e \tweak Accidental.font-size #-3 ges>4
@end lilypond
@code{\tweak} kann auch nicht verwendet werden,
@lilypond[verbatim,quote,relative=1]
c
--\tweak #'style #'dashed-line
--\tweak #'dash-fraction #0.2
--\tweak #'thickness #3
--\tweak #'color #red
+-\tweak style #'dashed-line
+-\tweak dash-fraction #0.2
+-\tweak thickness #3
+-\tweak color #red
\glissando
f'
@end lilypond
% reduced space between staves
\new PianoStaff \with {
% this is the nested declaration
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #7
} <<
\new Staff { \clef treble c''1 }
\new Staff { \clef bass c1 }
@lilypond[quote,verbatim]
\new PianoStaff \with {
- \override StaffGrouper #'staff-staff-spacing =
+ \override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 0)
(minimum-distance . 0)
(padding . 0)
folgende Aufrufe äquivalent:
@example
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 7))
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 7)
(minimum-distance . 0)
(padding . 0)
@lilypond[verbatim,quote,relative=1]
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
+ \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
}
{ a4 e' f b | d1 }
@end lilypond
@lilypond[verbatim,quote,relative=1]
\new Staff \with {
- \override StaffSymbol #'width = #23
+ \override StaffSymbol.width = #23
}
{ a4 e' f b | d1 }
@end lilypond
a~a
a
% increase the length of the tie
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
~a
@end lilypond
\compressFullBarRests
R1*23
% increase the length of the rest bar
-\once \override MultiMeasureRest #'minimum-length = #20
+\once \override MultiMeasureRest.minimum-length = #20
R1*23
a1
@end lilypond
@lilypond[verbatim,quote,relative=2]
a \< a a a \!
% increase the length of the hairpin
-\override Hairpin #'minimum-length = #20
+\override Hairpin.minimum-length = #20
a \< a a a \!
@end lilypond
@lilypond[verbatim,quote,relative=2]
a( a)
a
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
( a)
a\( a\)
a
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
\( a\)
@end lilypond
e \glissando c'
% not effective alone
-\once \override Glissando #'minimum-length = #20
+\once \override Glissando.minimum-length = #20
e, \glissando c'
% effective only when both overrides are present
-\once \override Glissando #'minimum-length = #20
-\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Glissando.minimum-length = #20
+\once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
e, \glissando c'
@end lilypond
@lilypond[verbatim,quote,relative=1]
% not effective alone
-\once \override Beam #'minimum-length = #20
+\once \override Beam.minimum-length = #20
e8 e e e
% effective only when both overrides are present
-\once \override Beam #'minimum-length = #20
-\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Beam.minimum-length = #20
+\once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
e8 e e e
@end lilypond
@lilypond[verbatim,quote,relative=2]
a \< a a a a \! a a a \break
-\override Hairpin #'to-barline = ##f
+\override Hairpin.to-barline = ##f
a \< a a a a \! a a a
@end lilypond
@lilypond[relative=2,quote,verbatim]
e2 \glissando b
-\once \override Glissando #'(bound-details left Y) = #3
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.left.Y = #3
+\once \override Glissando.bound-details.right.Y = #-2
e2 \glissando b
@end lilypond
von @code{bound-details} abgelegt. Zum Beispiel:
@lilypond[relative=2,ragged-right,verbatim,quote]
-\override Glissando #'breakable = ##t
-\override Glissando #'(bound-details right-broken Y) = #-3
+\override Glissando.breakable = ##t
+\override Glissando.bound-details.right-broken.Y = #-3
c1 \glissando \break
f1
@end lilypond
Strecker zu setzen.
@lilypond[quote,ragged-right,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
c2\startTextSpan b c a\stopTextSpan
@end lilypond
des Endpunktes der Linie verschoben:
@lilypond[relative=1,quote,verbatim]
-\override TextSpanner
- #'(bound-details left stencil-align-dir-y) = #-2
-\override TextSpanner
- #'(bound-details right stencil-align-dir-y) = #UP
-
-\override TextSpanner
- #'(bound-details left text) = #"ggg"
-\override TextSpanner
- #'(bound-details right text) = #"hhh"
+\override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
+\override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
+
+\override TextSpanner.bound-details.left.text = #"ggg"
+\override TextSpanner.bound-details.right.text = #"hhh"
c4^\startTextSpan c c c \stopTextSpan
@end lilypond
@lilypond[quote,verbatim,relative=1]
a1 a
-\override Score.BarLine #'stencil = ##f
+\override Score.BarLine.stencil = ##f
a a
-\revert Score.BarLine #'stencil
+\revert Score.BarLine.stencil
a a a
@end lilypond
@lilypond[quote,verbatim,relative=2]
a4 a
-\once \override NoteHead #'transparent = ##t
+\once \override NoteHead.transparent = ##t
a a
@end lilypond
in diesem Beispiel:
@lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
+\override Staff.Clef.color = #white
a1
@end lilypond
werden, sodass es früher gesetzt wird:
@lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
-\override Staff.Clef #'layer = #-1
+\override Staff.Clef.color = #white
+\override Staff.Clef.layer = #-1
a1
@end lilypond
f4 g a b
f4 g a b
% Remove bar line at the end of the current line
-\once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
+\once \override Score.BarLine.break-visibility = #'#(#f #t #t)
\break
f4 g a b
f4 g a b
\key g \major
f4 g a b
% Try to remove all key signatures
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b
\break
\key g \major
f4 g a b
\set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b \break
f4 g a b
f4 g a b
\set Staff.explicitKeySignatureVisibility = #all-invisible
\set Staff.printKeyCancellation = ##f
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b \break
f4 g a b
@lilypond[relative=2,ragged-right,verbatim,quote]
d2 \glissando d'2
-\once \override Glissando #'style = #'dashed-line
+\once \override Glissando.style = #'dashed-line
d,2 \glissando d'2
-\override Glissando #'style = #'dotted-line
+\override Glissando.style = #'dotted-line
d,2 \glissando d'2
-\override Glissando #'style = #'zigzag
+\override Glissando.style = #'zigzag
d,2 \glissando d'2
-\override Glissando #'style = #'trill
+\override Glissando.style = #'trill
d,2 \glissando d'2
@end lilypond
@c TODO Complete
@lilypond[relative=2,ragged-right,verbatim,quote]
e2 \glissando f
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.right.Y = #-2
e2 \glissando f
@end lilypond
@lilypond[quote,verbatim,relative=1]
g4\< e' d' f\!
-\override Hairpin #'rotation = #'(20 -1 0)
+\override Hairpin.rotation = #'(20 -1 0)
g,,4\< e' d' f\!
@end lilypond
würden.
@lilypond[quote,verbatim,relative=1]
-\override TextScript #'outside-staff-priority = ##f
+\override TextScript.outside-staff-priority = ##f
g4^\markup { \rotate #30 "a G" }
b^\markup { \rotate #30 "a B" }
des^\markup { \rotate #30 "a D-Flat" }
@lilypond[verbatim,quote,relative=2]
a-3
a
--\tweak #'X-offset #0
--\tweak #'Y-offset #0
+-\tweak X-offset #0
+-\tweak Y-offset #0
-3
a
--\tweak #'X-offset #-1
--\tweak #'Y-offset #1
+-\tweak X-offset #-1
+-\tweak Y-offset #1
-3
@end lilypond
@lilypond[quote,verbatim,relative=1]
a'
--\tweak #'self-alignment-X #-1
+-\tweak self-alignment-X #-1
^"left-aligned"
--\tweak #'self-alignment-X #0
+-\tweak self-alignment-X #0
^"center-aligned"
--\tweak #'self-alignment-X #RIGHT
+-\tweak self-alignment-X #RIGHT
^"right-aligned"
--\tweak #'self-alignment-X #-2.5
+-\tweak self-alignment-X #-2.5
^"aligned further to the right"
@end lilypond
@lilypond[quote,verbatim,relative=2]
a
--\tweak #'self-alignment-X #0.5 % move horizontally left
--\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
--\tweak #'self-alignment-Y #-1 % move vertically up
+-\tweak self-alignment-X #0.5 % move horizontally left
+-\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
+-\tweak self-alignment-Y #-1 % move vertically up
-3 % third finger
@end lilypond
@lilypond[verbatim,quote,relative=1]
% The RehearsalMark will be centered above the Clef
-\override Score.RehearsalMark #'break-align-symbols = #'(clef)
+\override Score.RehearsalMark.break-align-symbols = #'(clef)
\key a \major
\clef treble
\mark "↓"
e1
% The RehearsalMark will be centered above the TimeSignature
-\override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
+\override Score.RehearsalMark.break-align-symbols = #'(time-signature)
\key a \major
\clef treble
\time 3/4
\mark "↓"
e2.
% The rehearsal mark will be centered above the Breath Mark
-\override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
+\override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
\key a \major
\clef treble
\time 4/4
@lilypond[verbatim,quote,relative=1]
% The RehearsalMark will be centered above the Key Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
e1
% The RehearsalMark will be centered above the Clef
\set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef bass
\mark "↓"
% The rehearsal mark will be centered above the Bar Line
\set Staff.explicitKeySignatureVisibility = #all-invisible
\set Staff.explicitClefVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
@lilypond[verbatim,quote,relative=1]
% The RehearsalMark will be centered above the KeySignature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\key a \major
\clef treble
\time 4/4
\mark "↓"
e1
% The RehearsalMark will be aligned with the left edge of the KeySignature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
+\once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
\mark "↓"
\key a \major
e1
% The RehearsalMark will be aligned with the right edge of the KeySignature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
+\once \override Score.KeySignature.break-align-anchor-alignment = #RIGHT
\key a \major
\mark "↓"
e1
@lilypond[verbatim,quote,relative=1]
% The RehearsalMark will be aligned with the left edge of the KeySignature
% and then shifted right by 3.5 staff-spaces
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
-\once \override Score.KeySignature #'break-align-anchor = #3.5
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
+\once \override Score.KeySignature.break-align-anchor = #3.5
\key a \major
\mark "↓"
e1
% The RehearsalMark will be aligned with the left edge of the KeySignature
% and then shifted left by 2 staff-spaces
-\once \override Score.KeySignature #'break-align-anchor = #-2
+\once \override Score.KeySignature.break-align-anchor = #-2
\key a \major
\mark "↓"
e1
@lilypond[verbatim,quote]
XinO = {
- \once \override NoteHead #'stencil = #ly:text-interface::print
- \once \override NoteHead #'text = \markup {
+ \once \override NoteHead.stencil = #ly:text-interface::print
+ \once \override NoteHead.text = \markup {
\combine
\halign #-0.7 \draw-circle #0.85 #0.2 ##f
\musicglyph #"noteheads.s2cross"
@lilypond[verbatim,quote,relative=1]
<<
{
- \once \override Tie
- #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
+ \once \override Tie.control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
e1~ e1
}
\\
'(-0.5 . 0.5)))))
squareLineCircleSpace = {
- \override NoteHead #'stencil = #square-line-circle-space
+ \override NoteHead.stencil = #square-line-circle-space
}
smartSquareLineCircleSpace = {
\squareLineCircleSpace
- \override NoteHead #'Y-extent =
+ \override NoteHead.Y-extent =
#(ly:make-unpure-pure-container
ly:grob::stencil-height
(lambda (grob start end) (ly:grob::stencil-height grob)))
\new Voice \with { \remove "Stem_engraver" }
\relative c'' {
\squareLineCircleSpace
- cis4 ces cisis c
+ cis4 ces disis d
\smartSquareLineCircleSpace
- cis4 ces cisis c
+ cis4 ces disis d
}
@end lilypond
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
(parser location note)
(ly:music?)
#{
- \tweak NoteHead #'stencil #ly:text-interface::print
- \tweak NoteHead #'text
+ \tweak NoteHead.stencil #ly:text-interface::print
+ \tweak NoteHead.text
\markup \musicglyph #"custodes.mensural.u0"
- \tweak Stem #'stencil ##f
+ \tweak Stem.stencil ##f
#note
#})
(parser location padding tempotext)
(number? markup?)
#{
- \once \override Score.MetronomeMark #'padding = #padding
+ \once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
@tab
@lilypond[relative=2,notime]
\set Staff.autoBeaming = ##f
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
c1 c2 c8 c16
@end lilypond
@tab Punktierung
@tab
@lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
c4. c4..
@end lilypond
@tab Taktangaben
@tab
@lilypond[relative=1]
-\override Staff.Clef #'stencil = #empty-stencil
+\override Staff.Clef.stencil = #empty-stencil
\time 3/4
s4_" "
\time 4/4
@tab Pause
@tab
@lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
r4 r8
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:m c:m7
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:dim c:dim7
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:aug
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:maj c:maj7
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
@lilypond[verbatim,quote,relative=2]
\set fontSize = #3
c4.-> d8---3
-\override NoteHead #'font-size = #-4
+\override NoteHead.font-size = #-4
c4.-> d8---3
-\override Script #'font-size = #2
+\override Script.font-size = #2
c4.-> d8---3
-\override Stem #'font-size = #-5
+\override Stem.font-size = #-5
c4.-> d8---3
@end lilypond
Gültige Farben-Bezeichnungen sind aufgelistet in @ref{Liste der Farben}.
@lilypond[verbatim,quote,relative=2]
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
c4 c
-\override NoteHead #'color = #(x11-color 'LimeGreen)
+\override NoteHead.color = #(x11-color 'LimeGreen)
d
-\override Stem #'color = #blue
+\override Stem.color = #blue
e
@end lilypond
Schwarz eingesetzt.
@lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
\set Staff.instrumentName = \markup {
\with-color #(x11-color 'navy) "Clarinet"
}
gis8 a
-\override Beam #'color = #(x11-color "medium turquoise")
+\override Beam.color = #(x11-color "medium turquoise")
gis a
-\override Accidental #'color = #(x11-color 'DarkRed)
+\override Accidental.color = #(x11-color 'DarkRed)
gis a
-\override NoteHead #'color = #(x11-color "LimeGreen")
+\override NoteHead.color = #(x11-color "LimeGreen")
gis a
% this is deliberate nonsense; note that the stems remain black
-\override Stem #'color = #(x11-color 'Boggle)
+\override Stem.color = #(x11-color 'Boggle)
b2 cis
@end lilypond
definiert werden.
@lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
\set Staff.instrumentName = \markup {
\with-color #(x11-color 'navy) "Clarinet"
}
-\override Stem #'color = #(rgb-color 0 0 0)
+\override Stem.color = #(rgb-color 0 0 0)
gis8 a
-\override Stem #'color = #(rgb-color 1 1 1)
+\override Stem.color = #(rgb-color 1 1 1)
gis8 a
-\override Stem #'color = #(rgb-color 0 0 0.5)
+\override Stem.color = #(rgb-color 0 0 0.5)
gis4 a
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
@code{MultiMeasureRestText}-Objekt erstellt.
@lilypond[verbatim,quote,relative=2]
-\override Script #'color = #red
-\override MultiMeasureRestText #'color = #blue
+\override Script.color = #red
+\override MultiMeasureRestText.color = #blue
a2\fermata r\fermata
R1\fermataMarkup
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
indem @code{restrainOpenStrings} auf @code{#t} gesetzt wird.
@lilypond[quote,ragged-right,verbatim]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \override Voice.StringNumber.stencil = ##f }
\new StaffGroup <<
\new Staff \relative c {
\clef "treble_8"
werden:
@lilypond[verbatim,quote]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \override Voice.StringNumber.stencil = ##f }
firstHarmonic = {
d'4\4\harmonic
g'4\3\harmonic
@lilypond[quote,ragged-right,verbatim]
<<
\new Voice \with {
- \override StringNumber #'stencil = ##f
+ \override StringNumber.stencil = ##f
} {
\clef "bass_8"
\relative c, {
}
}
\context Staff {
- \override Voice.TextScript
- #'(fret-diagram-details finger-code) = #'below-string
+ \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
\clef "treble_8"
<c e g c' e'>1^\markup {
\fret-diagram-terse #"x;3-3;2-2;o;1-1;o;"
}
\context Staff {
\clef "treble_8"
- \override Voice.TextScript
- #'(fret-diagram-details finger-code) = #'below-string
+ \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
<f, c f a c' f'>1^\markup {
\fret-diagram-verbose #'(
(place-fret 6 1)
\clef "treble_8"
b16 d g b e
\textSpannerDown
-\override TextSpanner #'(bound-details left text) = #"XII "
+\override TextSpanner.bound-details.left.text = #"XII "
g16\startTextSpan
b16 e g e b g\stopTextSpan
e16 b g d
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\clef "treble_8"
- \override Staff.NoteHead #'style = #'harmonic-mixed
+ \override Staff.NoteHead.style = #'harmonic-mixed
d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
}
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
in Gesangstextabschnitten (@code{lyricmode}) müssen Leerzeichen
zwischen alle Ausdrücke in @code{\override}- und @code{\set}-Befehlen
gesetzt werden. Insbesondere müssen um Punkte und Gleichzeitszeichen
-in Befehlen wie @code{\override Score . LyricTex #'font-size = #5)}
+in Befehlen wie @code{\override Score.LyricTex.font-size = #5)}
und vor dem gesamten Befehl geschrieben werden.
@end itemize
\header { tagline = ##f }
\relative c' {
\footnote #'(0.5 . -2)
- \markup { Die erste Note } \default
+ \markup { Die erste Note }
a'4 b8
- \footnote #'(0.5 . 1) #'Flag
- \markup { Die dritte Note } \default
+ \footnote #'(0.5 . 1)
+ \markup { Die dritte Note } Flag
e\noBeam c4 d4
}
}
a'4-\footnote #'(-3 . 0) \markup { \bold Forte } \f
-\footnote #'(0 . 1.5) \markup { Ein Bogen } (
b8)-\footnote #'(0 . -2) \markup { Balken } [ e]
- \footnote #'(1 . -1) #'Stem
- \markup { \teeny { Das ist ein Hals } }
+ \single\footnote #'(1 . -1)
+ \markup { \teeny { Das ist ein Hals } } Stem
c4
- \footnote #'(0 . 0.5) #'AccidentalCautionary
- \markup \italic { Ein warnendes Versetzungszeichen }
+ \single\footnote #'(0 . 0.5)
+ \markup \italic { Ein warnendes Versetzungszeichen } AccidentalCautionary
\footnote #'(1 . 1) "Die Note selber"
dis?4-\footnote #'(0.5 . -0.5) \markup \italic { langsamer werden }
_"rit."
\markup { \teeny 3 } #'(0 . -2)
\markup { 3. Balken } [
e]
- \footnote
- \markup { 4 } #'(1 . -1) #'Stem
- \markup { \bold 4. { Das ist ein Hals } }
+ \single\footnote
+ \markup { 4 } #'(1 . -1)
+ \markup { \bold 4. { Das ist ein Hals } } Stem
c4
- \footnote
+ \single\footnote
\markup \concat \teeny { "sharp (v)" }
- #'(0 . 0.5) #'AccidentalCautionary
- \markup \italic { v. Ein warndendes Versetzungszeichen }
+ #'(0 . 0.5)
+ \markup \italic { v. Ein warndendes Versetzungszeichen } AccidentalCautionary
dis?4-\footnote
\markup \concat \teeny { "a" } #'(0.5 . -0.5)
\markup \italic { a. Langsamer werden } _"rit."
@c Translators: Till Paala
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Tasteninstrumente und andere Instrumente mit mehreren Systemen
@section Tasteninstrumente und andere Instrumente mit mehreren Systemen
\new Staff = "up" {
\voiceOne
% Make space for fingering in the cross-staff voice
- \once\override DynamicLineSpanner #'staff-padding = #3.4
+ \once\override DynamicLineSpanner.staff-padding = #3.4
e''2\p\< d''\>
c''1\!
}
@item mode
@item output-count
@item output-suffix
-@item parseStringResult
@item partCombineListener
@item pitchnames
@item toplevel-bookparts
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
<< \new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics \nam
>>
\layout {
\context {
\Score
- \override LyricText #'font-family = #'typewriter
- \override BarNumber #'transparent =##T
+ \override LyricText.font-family = #'typewriter
+ \override BarNumber.transparent =##T
}
}
}
\new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
- \override StaffSymbol #'line-count = #2
- \override StaffSymbol #'staff-space = #2
- \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0)
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
+ \override StaffSymbol.line-count = #2
+ \override StaffSymbol.staff-space = #2
+ \override VerticalAxisGroup.minimum-Y-extent = #'(-3.0 . 4.0)
drumStyleTable = #timbales-style
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\remove "Bar_engraver"
\remove "Time_signature_engraver"
drumStyleTable = #congas-style
- \override StaffSymbol #'line-count = #2
+ \override StaffSymbol.line-count = #2
%% this sucks; it will lengthen stems.
- \override StaffSymbol #'staff-space = #2
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override StaffSymbol.staff-space = #2
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override StaffSymbol #'line-count = #2
+ \override StaffSymbol.line-count = #2
drumStyleTable = #bongos-style
%% this sucks; it will lengthen stems.
- \override StaffSymbol #'staff-space = #2
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override StaffSymbol.staff-space = #2
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\new DrumStaff \with{
\remove "Bar_engraver"
drumStyleTable = #percussion-style
- \override StaffSymbol #'line-count = #1
+ \override StaffSymbol.line-count = #1
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
woodstaff = {
% This defines a staff with only two lines.
% It also defines the positions of the two lines.
- \override Staff.StaffSymbol #'line-positions = #'(-2 3)
+ \override Staff.StaffSymbol.line-positions = #'(-2 3)
% This is necessary; if not entered, the barline would be too short!
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
}
\new DrumStaff {
@end lilypond
In diesem Spezialfalls muss die Länge der Taktlinie mit
-@code{\override Staff.BarLine #'bar-extent #'(von . bis)} angepasst werden.
+@code{\override Staff.BarLine.bar-extent #'(von . bis)} angepasst werden.
Andernfalls wäre sie zu kurz. Die Position der beiden Linien muss
auch definiert werden.
#(define mydrums '((tambourine default #t 0)))
tambustaff = {
- \override Staff.StaffSymbol #'line-positions = #'( 0 )
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.StaffSymbol.line-positions = #'( 0 )
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Tambourine"
}
#(define mydrums '((tamtam default #t 0)))
tamtamstaff = {
- \override Staff.StaffSymbol #'line-positions = #'( 0 )
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.StaffSymbol.line-positions = #'( 0 )
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Tamtam"
}
(cowbell default #t -2)))
bellstaff = {
- \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3)
+ \override DrumStaff.StaffSymbol.line-positions = #'(-2 3)
\set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Different Bells"
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
@example
\new Staff <<
- \accidentalStyle "voice"
+ \accidentalStyle voice
@{ @dots{} @}
>>
@end example
Stimmgruppe (@code{StaffGroup}) zu benutzen, müsste der Befehl so aussehen:
@example
-\accidentalStyle #'StaffGroup "voice"
+\accidentalStyle StaffGroup.voice
@end example
Folgende Versetzungszeichenstile sind unterstützt.
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicA
}
\context Staff = "down" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicB
}
>>
<<
\context Staff = "up" @{
%%% nächste Zeile wie gewünscht ändern:
- \accidentalStyle #'Score "default"
+ \accidentalStyle Score.default
\musicA
@}
\context Staff = "down" @{
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicA
}
\context Staff = "down" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "voice"
+ \accidentalStyle voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "voice"
+ \accidentalStyle voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern"
+ \accidentalStyle modern
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern"
+ \accidentalStyle modern
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-cautionary"
+ \accidentalStyle modern-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-cautionary"
+ \accidentalStyle modern-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-voice"
+ \accidentalStyle modern-voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-voice"
+ \accidentalStyle modern-voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-voice-cautionary"
+ \accidentalStyle modern-voice-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-voice-cautionary"
+ \accidentalStyle modern-voice-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "piano"
+ \accidentalStyle piano
\musicA
}
\context Staff = "down" {
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "piano-cautionary"
+ \accidentalStyle piano-cautionary
\musicA
}
\context Staff = "down" {
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern"
+ \accidentalStyle neo-modern
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern"
+ \accidentalStyle neo-modern
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-cautionary"
+ \accidentalStyle neo-modern-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-cautionary"
+ \accidentalStyle neo-modern-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-voice"
+ \accidentalStyle neo-modern-voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-voice"
+ \accidentalStyle neo-modern-voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-voice-cautionary"
+ \accidentalStyle neo-modern-voice-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-voice-cautionary"
+ \accidentalStyle neo-modern-voice-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\musicA
}
\context Staff = "down" {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\musicB
}
>>
<<
\context Staff = "up" {
\key fis \minor
- \accidentalStyle "teaching"
+ \accidentalStyle teaching
\musicA
}
\context Staff = "down" {
\key fis \minor
- \accidentalStyle "teaching"
+ \accidentalStyle teaching
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "no-reset"
+ \accidentalStyle no-reset
\musicA
}
\context Staff = "down" {
- \accidentalStyle "no-reset"
+ \accidentalStyle no-reset
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "forget"
+ \accidentalStyle forget
\musicA
}
\context Staff = "down" {
- \accidentalStyle "forget"
+ \accidentalStyle forget
\musicB
}
>>
@lilypond[quote]
{
- \accidentalStyle "modern"
+ \accidentalStyle modern
\time 2/4
\repeat volta 2 {
c'2
@lilypond[verbatim,quote]
forget = #(define-music-function (parser location music) (ly:music?) #{
- \accidentalStyle "forget"
+ \accidentalStyle forget
#music
- \accidentalStyle "modern"
+ \accidentalStyle modern
#})
{
- \accidentalStyle "modern"
+ \accidentalStyle modern
\time 2/4
\repeat volta 2 {
c'2
@lilypond[verbatim,quote,relative=2]
c4 b
-\override NoteHead #'style = #'cross
+\override NoteHead.style = #'cross
c4 b
-\revert NoteHead #'style
+\revert NoteHead.style
a b
-\override NoteHead #'style = #'harmonic
+\override NoteHead.style = #'harmonic
a b
-\revert NoteHead #'style
+\revert NoteHead.style
c4 d e f
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
Objekten im Notensystem zusammenstoßen.
@lilypond[verbatim,quote,ragged-right,relative=2]
-\override Tie #'layer = #-2
-\override Staff.TimeSignature #'layer = #-1
-\override Staff.KeySignature #'layer = #-1
-\override Staff.TimeSignature #'whiteout = ##t
-\override Staff.KeySignature #'whiteout = ##t
+\override Tie.layer = #-2
+\override Staff.TimeSignature.layer = #-1
+\override Staff.KeySignature.layer = #-1
+\override Staff.TimeSignature.whiteout = ##t
+\override Staff.KeySignature.whiteout = ##t
b2 b~
\time 3/4
\key a \major
\new Staff {
% These two lines are just to prettify this example
\time 16/1
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
% Print a maxima rest, equal to four breves
r\maxima
% Print a longa rest, equal to two breves
@lilypond[quote,verbatim,relative=2]
% This fails, as the wrong object name is specified
-\override TextScript #'padding = #5
+\override TextScript.padding = #5
R1^"wrong"
% This is the correct object name to be specified
-\override MultiMeasureRestText #'padding = #5
+\override MultiMeasureRestText.padding = #5
R1^"right"
@end lilypond
@lilypond[verbatim,relative=2,fragment]
% Show all bar numbers
-\override Score.BarNumber #'break-visibility = #all-visible
+\override Score.BarNumber.break-visibility = #all-visible
c4 d e d
\cadenzaOn
c4 c d8[ d d] f4 g4.
gleichmäßiges Tempo haben.
@lilypond[relative=1,verbatim,quote]
-\override Beam #'grow-direction = #LEFT
+\override Beam.grow-direction = #LEFT
\featherDurations #(ly:make-moment 2 1)
{ c16[ c c c c c c c] }
-\override Beam #'grow-direction = #RIGHT
+\override Beam.grow-direction = #RIGHT
\featherDurations #(ly:make-moment 2 3)
{ c32[ d e f] }
% revert to non-feathered beams
-\override Beam #'grow-direction = #'()
+\override Beam.grow-direction = #'()
{ g32[ a b c] }
@end lilypond
f1 \bar "."
g1 \bar "||"
a1 \bar ".|"
-b1 \bar ".|."
+b1 \bar ".."
c1 \bar "|.|"
d1 \bar "|."
e1
Zusätzlich gibt es noch punktierte und gestrichelte Taktstriche:
@lilypond[quote,relative=1,verbatim]
-f1 \bar ":"
-g1 \bar "dashed"
+f1 \bar ";"
+g1 \bar "!"
a1
@end lilypond
und fünf unterschiedliche Wiederholungstaktstriche:
@lilypond[quote,relative=1,verbatim]
-f1 \bar "|:" g \bar ":|:" a \bar ":|.|:" b \bar ":|.:" c \bar ":|" d
+f1 \bar ".|:" g \bar ":..:" a \bar ":|.|:" b \bar ":|.:" c \bar ":|." d
@end lilypond
Zusätzlich kann eine Taktlinie mit einem einfachen Apostroph gesetzt werden:
@lilypond[quote,relative=1,verbatim]
-f1 \bar "|:"
-g1 \bar ":|:"
+f1 \bar ".|:"
+g1 \bar ":..:"
a1 \bar ":|.|:"
b1 \bar ":|.:"
-c1 \bar ":|"
+c1 \bar ":|."
e1
@end lilypond
c4 c c c \break
\bar "S"
c4 c c c
-\bar "|S"
+\bar "S-|"
c4 c c c \break
-\bar "|S"
+\bar "S-|"
c4 c c c
-\bar "S|"
+\bar "S-S"
c4 c c c \break
-\bar "S|"
+\bar "S-S"
c1
@end lilypond
@lilypond[quote,relative=2,verbatim]
c4 c c c
-\bar "||:"
+\bar ".|:-||"
c4 c c c \break
-\bar "||:"
+\bar ".|:-||"
c4 c c c
@end lilypond
@lilypond[quote,relative=2,verbatim]
c4 c c c
-\bar ":|S"
+\bar ":|.S"
c4 c c c \break
-\bar ":|S"
+\bar ":|.S"
c4 c c c
-\bar ":|S."
+\bar ":|.S-S"
c4 c c c \break
-\bar ":|S."
+\bar ":|.S-S"
c4 c c c
-\bar "S|:"
+\bar "S.|:-S"
c4 c c c \break
-\bar "S|:"
+\bar "S.|:-S"
c4 c c c
-\bar ".S|:"
+\bar "S.|:"
c4 c c c \break
-\bar ".S|:"
+\bar "S.|:"
c4 c c c
-\bar ":|S|:"
+\bar ":|.S.|:"
c4 c c c \break
-\bar ":|S|:"
+\bar ":|.S.|:"
c4 c c c
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
c4 c c c \break
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
c1
@end lilypond
Beispiel werden die Taktlinien überall ausgegeben:
@lilypond[verbatim,quote,relative=1]
-\override Score.BarNumber #'break-visibility = #'#(#t #t #t)
+\override Score.BarNumber.break-visibility = #'#(#t #t #t)
\set Score.currentBarNumber = #11
% Permit first bar number to be printed
\bar ""
@lilypond[quote,relative=2,verbatim]
<<
- \new Staff { e4 \bar "|:" \grace c16 d2. }
- \new Staff { c4 \bar "|:" d2. }
+ \new Staff { e4 \bar ".|:" \grace c16 d2. }
+ \new Staff { c4 \bar ".|:" d2. }
>>
@end lilypond
@lilypond[quote,ragged-right,relative=2,verbatim,fragment]
<<
- \new Staff { e4 \bar "|:" \grace c16 d2. }
- \new Staff { c4 \bar "|:" \grace s16 d2. }
+ \new Staff { e4 \bar ".|:" \grace c16 d2. }
+ \new Staff { c4 \bar ".|:" \grace s16 d2. }
>>
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
während der Kompilation. Diese Nachricht kann unterdrückt werden durch
@example
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
@end example
Das unterdrückt jedoch nicht nur die Warnungen, sondern schaltet auch
@rinternals{RestCollision}.
@knownissues
-Die Benutzung von @code{\override NoteColumn #'ignore-collision = ##t}
+Die Benutzung von @code{\override NoteColumn.ignore-collision = ##t}
führt dazu, dass Noten mit unterschiedlichen Köpfen in unterschiedlichen
Stimmen falsch verschmolzen werden.
@lilypond[quote,relative=1,verbatim]
\mergeDifferentlyHeadedOn
<< { c16 a' b a } \\ { c,2 } >>
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
<< { c16 a' b a } \\ { c,2 } >>
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
@table @code
-@item blank-after-score-page-force
-@funindex blank-after-score-page-force
+@item blank-after-score-page-penalty
+@funindex blank-after-score-page-penalty
Die Strafpunke, die erteilt werden, wenn eine leere Seite nach einer
Partitur und vor der nächsten vorkommt. Der Standardwert hiervon ist
-kleiner als @code{blank-page-force}, sodass leere Seiten nach einer Partitur
+kleiner als @code{blank-page-penalty}, sodass leere Seiten nach einer Partitur
leeren Seiten innerhalb einer Partitur vorgezogen werden.
-@item blank-last-page-force
-@funindex blank-last-page-force
+@item blank-last-page-penalty
+@funindex blank-last-page-penalty
Die Strafpunkte, wenn eine Partitur auf einer ungeraden Seite
beendet wird. Standard: @code{0}.
-@item blank-page-force
-@funindex blank-page-force
+@item blank-page-penalty
+@funindex blank-page-penalty
Die Strafpunkte, wenn eine leere Seite mitten in einer Partitur
auftritt. Das wird nicht benutzt von @code{ly:optimal-breaking},
indent = 2\cm
\context @{
\StaffGroup
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #8
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #8
@}
\context @{
\Voice
- \override TextScript #'padding = #1
- \override Glissando #'thickness = #3
+ \override TextScript.padding = #1
+ \override Glissando.thickness = #3
@}
@}
@end example
\layout @{
\context @{
\Voice
- \override TextScript #'color = #magenta
- \override Glissando #'thickness = #1.5
+ \override TextScript.color = #magenta
+ \override Glissando.thickness = #1.5
@}
@}
@end example
layoutVariable = \layout @{
\context @{
\Voice
- \override NoteHead #'font-size = #4
+ \override NoteHead.font-size = #4
@}
@}
@end example
\layoutVariable
\context @{
\Voice
- \override NoteHead #'color = #red
+ \override NoteHead.color = #red
@}
@}
@end example
Genauso werden normalerweise Zeilenumbrüche auch verhindert, wenn Balken
über die Taktenden hinausragen. Dieses Verhalten kann verändert werden,
-indem man @code{\override Beam #'breakable = ##t} einstellt:
+indem man @code{\override Beam.breakable = ##t} einstellt:
@lilypond[quote,ragged-right,relative=2,verbatim]
-\override Beam #'breakable = ##t
+\override Beam.breakable = ##t
c2. c8[ c | \break
c8 c] c2. |
@end lilypond
Einstellungen kann dieses Verhalten ausgeschaltet werden:
@example
-\override NonMusicalPaperColumn #'line-break-permission = ##f
-\override NonMusicalPaperColumn #'page-break-permission = ##f
+\override NonMusicalPaperColumn.line-break-permission = ##f
+\override NonMusicalPaperColumn.page-break-permission = ##f
@end example
Wenn @code{line-break-permission} die Einstellung falsch
\layout {
\context {
\Score
- \override NonMusicalPaperColumn #'line-break-permission = ##f
- \override NonMusicalPaperColumn #'page-break-permission = ##f
+ \override NonMusicalPaperColumn.line-break-permission = ##f
+ \override NonMusicalPaperColumn.page-break-permission = ##f
}
}
}
\score {
\new Staff <<
\new Voice {
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
s1 * 2 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 35))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 35))
s1 * 3 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 70))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 70))
s1 * 6 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 105))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 105))
s1 * 5 \break
}
\new Voice {
#(define zero-space '((padding . -inf.0) (basic-distance . 0)))
alignToZero = \with {
- \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space
- \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #zero-space
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #zero-space
}
lowerCaseChords = \with {
chordNameLowercaseMinor = ##t
}
staffAffinityDown = \with {
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
labelContext =
#(define-music-function
\lowerCaseChords }
\context { \FretBoards \alignToZero \staffAffinityDown }
\context { \Score
- \override BarLine #'stencil = ##f
- \override DynamicText #'self-alignment-X = #-1
- \override FretBoard #'X-offset = #1.75
- \override InstrumentName #'minimum-Y-extent = #'(-2 . 2)
- \override InstrumentName #'extra-offset = #'(0 . -0.5)
- \override TextScript #'minimum-Y-extent = #'(-2 . 3)
- \override TimeSignature #'stencil = ##f
+ \override BarLine.stencil = ##f
+ \override DynamicText.self-alignment-X = #-1
+ \override FretBoard.X-offset = #1.75
+ \override InstrumentName.minimum-Y-extent = #'(-2 . 2)
+ \override InstrumentName.extra-offset = #'(0 . -0.5)
+ \override TextScript.minimum-Y-extent = #'(-2 . 3)
+ \override TimeSignature.stencil = ##f
}
}
@example
\new Staff \with @{
- \override VerticalAxisGroup #'default-staff-staff-spacing
- #'basic-distance = #10
+ \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
@} @{ @dots{} @}
\new Staff \with @{
- \override VerticalAxisGroup #'default-staff-staff-spacing =
+ \override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 10)
(minimum-distance . 9)
(padding . 1)
\layout @{
\context @{
\Staff
- \override VerticalAxisGroup #'default-staff-staff-spacing
- #'basic-distance = #10
+ \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
@}
@}
@end example
\layout {
\context {
\Staff
- \override VerticalAxisGroup #'default-staff-staff-spacing =
+ \override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 8)
(minimum-distance . 7)
(padding . 1))
% By setting 'padding to a negative value, staves can be made to
% collide. The lowest acceptable value for 'basic-distance is 0.
\new Staff \with {
- \override VerticalAxisGroup #'default-staff-staff-spacing =
+ \override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 3.5)
(padding . -10))
} { \clef bass g2 r | }
\layout {
\context {
\Score
- \override StaffGrouper #'staff-staff-spacing #'padding = #0
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #0
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #1
}
}
<<
\new PianoStaff \with {
- \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20
+ \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
} <<
\new Staff { c'1 }
\new Staff { c'1 }
\layout {
\context {
\Lyrics
- \override VerticalAxisGroup
- #'nonstaff-nonstaff-spacing #'stretchability = #1000
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing.stretchability = #1000
}
}
\new StaffGroup
<<
\new Staff \with {
- \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 30))
+ \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30))
} { c'1 }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #UP
+ \override VerticalAxisGroup.staff-affinity = #UP
} \lyricmode { up }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #CENTER
+ \override VerticalAxisGroup.staff-affinity = #CENTER
} \lyricmode { center }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
} \lyricmode { down }
\new Staff { c'1 }
>>
@code{\overrideProperty}-Befehl sind hier aufgelistet:
@example
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((Y-offset . 40))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20)
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
(Y-offset . 40))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((alignment-distances . (15)))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((alignment-distances . (15)))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20)
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
(Y-offset . 40)
(alignment-distances . (15)))
@end example
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 40))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 80))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 80))
s1*5 \break
}
\new Voice { \repeat unfold 15 { c'4 c' c' c' } }
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 20)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 20)
(alignment-distances . (15)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 60)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
(alignment-distances . (15)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 100)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
(alignment-distances . (15)))
s1*5 \break
}
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0)
(alignment-distances . (30 10)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 60)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
(alignment-distances . (10 10)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 100)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
(alignment-distances . (10 30)))
s1*5 \break
}
@lilypond[quote,ragged-right,relative=2,verbatim]
c4_"Text"\pp
r2.
-\once \override TextScript #'outside-staff-priority = #1
+\once \override TextScript.outside-staff-priority = #1
c4_"Text"\pp % this time the text will be closer to the staff
r2.
% by setting outside-staff-priority to a non-number,
% we disable the automatic collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
-\once \override DynamicLineSpanner #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
+\once \override DynamicLineSpanner.outside-staff-priority = ##f
c4_"Text"\pp % now they will collide
@end lilypond
kontrolliert werden.
@lilypond[quote,ragged-right,relative=2,verbatim,staffsize=18]
-\once \override TextScript #'outside-staff-padding = #0
+\once \override TextScript.outside-staff-padding = #0
a'^"This text is placed very close to the note"
-\once \override TextScript #'outside-staff-padding = #3
+\once \override TextScript.outside-staff-padding = #3
c^"This text is padded away from the previous text"
c^"This text is placed close to the previous text"
@end lilypond
c''2
% setting outside-staff-horizontal-padding fixes this
R1
-\once \override TextScript #'outside-staff-horizontal-padding = #1
+\once \override TextScript.outside-staff-horizontal-padding = #1
c,,4^"Text"
c4
c''2
{
c'4 e''4 e'4 b'4 |
b'4 e''4 b'4 e''4 |
- \override Staff.NoteSpacing #'stem-spacing-correction = #1.5
- \override Staff.StaffSpacing #'stem-spacing-correction = #1.5
+ \override Staff.NoteSpacing.stem-spacing-correction = #1.5
+ \override Staff.StaffSpacing.stem-spacing-correction = #1.5
c'4 e''4 e'4 b'4 |
b'4 e''4 b'4 e''4 |
}
werden, um zusätzlichen Platz in eine Partitur einzufügen.
@example
- \override Score.NonMusicalPaperColumn #'padding = #10
+ \override Score.NonMusicalPaperColumn.padding = #10
@end example
Es gibt derzeit keine Möglichkeit, den Platz zu verringern.
\layout {
\context {
\Score
- \override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 1 16)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16)
}
}
}
\layout {
\context {
\Score
- \override SpacingSpanner #'uniform-stretching = ##t
+ \override SpacingSpanner.uniform-stretching = ##t
}
}
}
zusätzlichen Platz erhalten.
@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
-\override Score.SpacingSpanner #'strict-note-spacing = ##t
+\override Score.SpacingSpanner.strict-note-spacing = ##t
\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] }
@end lilypond
@item @code{uniform-stretching} (gleichmäßige Dehnung)
@item @code{strict-note-spacing} (strenge Notenverteilung)
@item @code{\remove "Separating_line_group_engraver"} (entferne Liniengruppentrennungsengraver)
-@item @code{\override PaperColumn #'used = ##t} (PapierSpalte benutzt = wahr)
+@item @code{\override PaperColumn.used = ##t} (PapierSpalte benutzt = wahr)
@end itemize
In den Beispielen unten werden diese fünf unterschiedlichen Einstellungen
\context {
\Score
proportionalNotationDuration = #(ly:make-moment 1 20)
- \override SpacingSpanner #'uniform-stretching = ##t
+ \override SpacingSpanner.uniform-stretching = ##t
}
}
}
\new Staff {
\set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
- \override Score.SpacingSpanner #'strict-note-spacing = ##t
+ \override Score.SpacingSpanner.strict-note-spacing = ##t
c''8
c''8
c''8
Notation benutzt werden. Dazu gehören:
@itemize
-@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
+@item @code{\override SpacingSpanner.strict-grace-spacing = ##t}
@item @code{tupletFullLength = ##t}
-@item @code{\override Beam #'breakable = ##t}
-@item @code{\override Glissando #'breakable = ##t}
-@item @code{\override TextSpanner #'breakable = ##t}
+@item @code{\override Beam.breakable = ##t}
+@item @code{\override Glissando.breakable = ##t}
+@item @code{\override TextSpanner.breakable = ##t}
@item @code{\remove "Forbid_line_break_engraver" in the Voice context}
@end itemize
@lilypond[verbatim,quote,relative=1]
e4 c g\f c
-e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c
+e4 c g-\tweak X-offset #-2.7 -\tweak Y-offset #2.5 \f c
@end lilypond
@item
\layout {
\context {
\Score
- \override SpacingSpanner
- #'common-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 2)
}
}
}
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
@lilypond[verbatim,quote,relative=2]
f4 d \stopStaff
-\override Staff.StaffSymbol #'line-count = #2
+\override Staff.StaffSymbol.line-count = #2
\startStaff g, e |
f'4 d \stopStaff
-\revert Staff.StaffSymbol #'line-count
+\revert Staff.StaffSymbol.line-count
\startStaff g, e |
@end lilypond
@lilypond[verbatim,quote,relative=2]
f4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(1 3 5 -1 -3)
+\override Staff.StaffSymbol.line-positions = #'(1 3 5 -1 -3)
\startStaff g, e |
f'4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(8 6.5 -6 -8 -0.5)
+\override Staff.StaffSymbol.line-positions = #'(8 6.5 -6 -8 -0.5)
\startStaff g, e
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'thickness = #3
+ \override StaffSymbol.thickness = #3
}
{ f4 d g, e }
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'thickness = #2
- \override StaffSymbol #'ledger-line-thickness = #'(0.5 . 0.4)
+ \override StaffSymbol.thickness = #2
+ \override StaffSymbol.ledger-line-thickness = #'(0.5 . 0.4)
}
{ f'4 a, a,, f }
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'ledger-positions = #'(-3 -2 -1 2 5 6)
+ \override StaffSymbol.ledger-positions = #'(-3 -2 -1 2 5 6)
}
{ f'4 a, a,, f }
@end lilypond
der Befehl sich auf das gesamte System (@code{StaffSymbol}) auswirkt.
@lilypond[fragment,quote,relative=1]
-\override Staff.StaffSymbol #'line-positions = #'(-8 0 2 4)
+\override Staff.StaffSymbol.line-positions = #'(-8 0 2 4)
d4 e f g
\stopStaff
\startStaff
-\override Staff.StaffSymbol #'ledger-positions = #'(-8 -6 (-4 -2) 0)
+\override Staff.StaffSymbol.ledger-positions = #'(-8 -6 (-4 -2) 0)
d4 e f g
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'staff-space = #1.5
+ \override StaffSymbol.staff-space = #1.5
}
{ f'4 d, g, e, }
@end lilypond
\remove "Time_signature_engraver"
alignAboveContext = #"main"
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
firstClef = ##f
}
{ e4 d f e }
<<
\new Staff = ossia \with {
\remove "Time_signature_engraver"
- \override Clef #'transparent = ##t
+ \override Clef.transparent = ##t
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
}
{ \stopStaff s1*6 }
<<
\new Staff = ossia \with {
\remove "Time_signature_engraver"
- \override Clef #'transparent = ##t
+ \override Clef.transparent = ##t
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
} \relative c'' {
R1*3
c4 e8 d c2
\layout {
\context {
\Staff \RemoveEmptyStaves
- \override VerticalAxisGroup #'remove-first = ##t
+ \override VerticalAxisGroup.remove-first = ##t
}
}
@end lilypond
den Engraver zu entfernen:
@example
-\override StaffSymbol #'stencil = ##f
-\override NoteHead #'no-ledgers = ##t
+\override StaffSymbol.stencil = ##f
+\override NoteHead.no-ledgers = ##t
@end example
Zu den bekannten Fehlern und Warnungen, die mit @code{\Staff \RemoveEmptyStaves}
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
schreiben Sie in Ihre Datei:
@example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
@end example
Anweisung erstellt werden:
@lilypond[verbatim,quote,relative=2]
-\override TextSpanner #'(bound-details left text) = "rit."
+\override TextSpanner.bound-details.left.text = "rit."
b1\startTextSpan
e,\stopTextSpan
@end lilypond
einsetzt, wie beschrieben in @ref{Text formatieren}.
@lilypond[quote,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text) =
+\override TextSpanner.bound-details.left.text =
\markup { \upright "rit." }
b1\startTextSpan c
e,\stopTextSpan
Änderung in Bezug auf die Standardschriftgröße.
@lilypond[quote,verbatim,relative=2]
-\override Score.RehearsalMark #'font-family = #'typewriter
+\override Score.RehearsalMark.font-family = #'typewriter
\mark \markup "Ouverture"
-\override Voice.TextScript #'font-shape = #'italic
-\override Voice.TextScript #'font-series = #'bold
+\override Voice.TextScript.font-shape = #'italic
+\override Voice.TextScript.font-series = #'bold
d2.^\markup "Allegro"
-\override Voice.TextScript #'font-size = #-3
+\override Voice.TextScript.font-size = #-3
c4^smaller
@end lilypond
verwendet man folgende Syntax:
@lilypond[quote,verbatim,relative=2]
-\override Staff.TimeSignature #'font-name = #"Bitstream Charter"
-\override Staff.TimeSignature #'font-size = #2
+\override Staff.TimeSignature.font-name = #"Bitstream Charter"
+\override Staff.TimeSignature.font-size = #2
\time 3/4
a1_\markup {
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Till Paala
werden. Ein Befehl heißt also @emph{nicht}:
@example
-\override Score.LyricText #'font-shape = #'italic
+\override Score.LyricText.font-shape = #'italic
@end example
@noindent
sondern
@example
-\override Score . LyricText #'font-shape = #'italic
+\override Score.LyricText.font-shape = #'italic
@end example
Punkte, Gesangstext mit Akzenten, verschiedene lateinische und nicht-lateinische
<<
\new Lyrics = "lyrics" \with {
% lyrics above a staff should have this override
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff {
\new Voice = "melody" {
\new Lyrics = "sopranos"
\new Lyrics = "contraltos" \with {
% lyrics above a staff should have this override
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff {
\new Voice = "contraltos" {
@lilypond[relative=1,verbatim,quote,ragged-right]
{
c c c c
- \override Lyrics.LyricSpace #'minimum-distance = #1.0
+ \override Lyrics.LyricSpace.minimum-distance = #1.0
c c c c
}
\addlyrics {
\layout {
\context {
\Lyrics
- \override LyricSpace #'minimum-distance = #1.0
+ \override LyricSpace.minimum-distance = #1.0
}
}
}
Notensatz etwas zu beschleunigen, kann die Überprüfung abgestellt werden:
@example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
@end example
Damit Gesangstext auch nicht mit Taktlinien
\Lyrics
\consists "Bar_engraver"
\consists "Separating_line_group_engraver"
- \override BarLine #'transparent = ##t
+ \override BarLine.transparent = ##t
@}
@}
@end example
\voiceOne
\times 2/3 {
% show associations clearly.
- \override NoteColumn #'force-hshift = #-3
+ \override NoteColumn.force-hshift = #-3
f8 f g
}
}
\layout {
\context {
\Score
- \override DynamicText #'direction = #UP
- \override DynamicLineSpanner #'direction = #UP
+ \override DynamicText.direction = #UP
+ \override DynamicLineSpanner.direction = #UP
}
}
}
% position name of cue-ing instrument just before the cue notes,
% and above the staff
\new CueVoice {
- \override InstrumentSwitch #'self-alignment-X = #RIGHT
+ \override InstrumentSwitch.self-alignment-X = #RIGHT
\set instrumentCueName = "Flute"
}
\cueDuring "flute" #UP { g4 bes4 }
\transposition c'
% position name of cue-ing instrument below the staff
\new CueVoice {
- \override InstrumentSwitch #'self-alignment-X = #RIGHT
- \override InstrumentSwitch #'direction = #DOWN
+ \override InstrumentSwitch.self-alignment-X = #RIGHT
+ \override InstrumentSwitch.direction = #DOWN
\set instrumentCueName = "Clar."
}
\cueDuring "clarinet" #DOWN { c4. g8 }
\score {
<<
\new Lyrics \with {
- \override LyricText #'font-shape = #'italic
- \override LyricText #'self-alignment-X = #LEFT
+ \override LyricText.font-shape = #'italic
+ \override LyricText.self-alignment-X = #LEFT
}
{ \dialogue }
\new Staff {
der gesprochenen Worte orientiert.
@lilypond[verbatim,quote]
-stemOff = { \override Staff.Stem #'transparent = ##t }
+stemOff = { \override Staff.Stem.transparent = ##t }
\relative c' {
\stemOff
\bar "'"
a4 b c2
a4 b c2
-\bar ":"
+\bar ";"
a4 b c2
-\bar "dashed"
+\bar "!"
a4 b c2
\bar "||"
@end lilypond
@lilypond[verbatim,quote]
divisioMinima = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-minima
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
divisioMaior = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maior
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maior
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
divisioMaxima = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maxima
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maxima
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
finalis = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::finalis
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::finalis
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
\layout {
\context {
\Score
- \override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 2)
}
\context {
\Staff
<!--
- Translation of GIT committish: e5a609e373eae846857f9a6d70a402a3d42b7d94
+ Translation of GIT committish: ebe492ca408fb0d9abf80b94c56197eef8dc2f09
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
<!--
we depend on an external entity here, which we cannot control. Suppose
-we go from 2.16.x to 2.17.x and put the documentation under "v2.17".
+we go from 2.15.x to 2.17.x and put the documentation under "v2.17".
For some time, Google won't have the new location in its index, so the
-search would get nothing. It would be better to keep "v2.16" in the
-search for a while and have a redirection from "v2.16" to "v2.17".
+search would get nothing. It would be better to keep "v2.15" in the
+search for a while and have a redirection from "v2.15" to "v2.17".
-->
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org/doc/v2.16 '
+ onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org/doc/v2.16 '
+ onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org/doc/v2.16 '
+ onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Mit Google suchen">
<input type="text" name="brute_query" onfocus="this.value=''" value="Suche">
+++ /dev/null
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Reinhold Kainhofer, Till Paala
@c Translation checkers: Till Paala
Notenköpfe immernoch schwarz im unteren System erscheinen.
@lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
\new Staff { a }
@end lilypond
@lilypond[quote,verbatim,relative=2]
\new Staff {
- \override Staff.NoteHead #'color = #red
+ \override Staff.NoteHead.color = #red
a
}
@end lilypond
zu Beginn hinzufügt:
@example
-\override VerticalAxisGroup #'staff-affinity = ##f
+\override VerticalAxisGroup.staff-affinity = ##f
@end example
Zu Einzelheiten siehe @qq{Abstand von Nicht-Notensystemzeilen} in
+++ /dev/null
-depth = ../../..
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
ISOLANG = es
depth = ../..
-SUBDIRS = essay learning notation texidocs usage web extending included
STEPMAKE_TEMPLATES = documentation texinfo
LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 2e3c5412eacdbfd976d2cd6c5cc90f272ddfc263
+ Translation of GIT committish: cced43289cf170305e6e6517180659a1c4fa91db
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@finalout
@node Top
-@top Funcionalidades nuevas de la versión 2.16 desde la 2.14
+@top Funcionalidades nuevas de la versión 2.18 desde la 2.16
@allowcodebreaks false
* only show user-visible changes.
@end ignore
-@item
-Se contemplan las plicas de pentagrama cruzado en acordes, utilizando
-@code{crossStaff} y el grabador @code{Span_stem_engraver}. Éste
-efectúa el cálculo de la longitud de las plicas de pentagrama cruzado
-de forma automática.
-@lilypondfile[quote]
-{cross-staff-stems.ly}
-
-@item
-La sintaxis de las palabras (secuencias de caracteres que se reconocen
-sin encerrarlas entre comillas) y las instrucciones (que ahora son
-siempre una barra invertida @samp{\} seguida de una palabra) se ha
-unificado para todos los modos: ahora consiste en caracteres
-alfabéticos, posiblemente comprendiendo guiones aislados @samp{-} y
-guiones bajos @samp{_}.
-
-Una consecuencia es que la utilización de guiones de texto sin
-entrecomillar como (literalmente)
-@example
-@{ c-script c\f_script @}
-@end example
-ahora tienden a producir una música no válida. La omisión de las
-comillas para texto arbitrario en lugar de palabras clave nunca ha
-sido una buena práctica o se ha documentado, y es poco probable que se
-haya utilizado mucho.
-
-Quedarse con las convenciones establecidas (como no utilizar guiones o
-guiones bajos para los nombres de instrucción orientados a ser
-utilizados dentro de la música) sigue siendo recomendable. El motivo
-de este cambio es el reconocimiento más robusto de las unidades
-léxicas de LilyPond para sí mismo así como para las herramientas
-externas que interpretan su sintaxis.
-
-@item
-Se contempla el canto kievano en notación cuadrada:
-@lilypond[quote,relative=1,verbatim]
-\new KievanVoice {
- \cadenzaOn
- c d e f g a bes
- \bar "kievan"
-}
-@end lilypond
-
-@item
-Los puntillos ahora evitan a las otras voces en la polifonía a dos
-partes, de manera que los usuarios pueden trasladar el grabador
-@code{Dot_column_engraver} para ajustar los puntillos de forma
-independiente para cada voz.
-
-@lilypond[quote]
-\layout {
- \context {
- \Staff
- \remove "Dot_column_engraver"
- } \context {
- \Voice
- \consists "Dot_column_engraver"
- }
-}
-\relative c'' <<
- { \time 6/8
- <d f g>4. <d f g> <f, g> b
- } \\ {
- <f g b>4. <g b d> <b d> <e, g>
- } >>
-@end lilypond
-
-@item
-Ahora se incluye en LilyPond una función de Scheme, desarrollada por
-varios usuarios, para ajustar los puntos de control de las curvas como
-ligaduras de unión y de expresión.
-
-@lilypond[quote,verbatim,relative=2]
-g8->( bes,-.) d4
-\shape Slur #'((-0.5 . 1.5) (-3 . 0) (0 . 0) (0 . 0))
-g8->( bes,!-.) d4
-@end lilypond
-
-@item
-El uso de las especificaciones de @code{\tempo} en los bloques
-@code{\midi} (eliminados en la versión 2.9.16 en favor del ajuste
-explícito de @code{tempoWholesPerMinute}) ha resurgido: ahora
-cualquier clase de música que efectúe ajustes de propiedades se
-convierte en definiciones de contexto dentro de las especificaciones
-de salida, permitiendo declaraciones como
-@example
-\layout @{ \accidentalStyle modern @}
-\midi @{ \tempo 4. = 66 @}
-@end example
-
-@item
-Se ha rediseñado la clave de Sol de LilyPond: el bucle superior está
-más equilibrado, el gancho inferior sobresale menos y la línea
-vertical principal ("spine") está curvada de forma más regular.
-Pueden compararse las versiones vieja y nueva consultando la
-documentación:
-@uref{http://lilypond.org/doc/v2.14/Documentation/notation/the-feta-font.html#clef-glyphs,
-versión antigua},
-@uref{http://lilypond.org/doc/v2.15/Documentation/notation/the-feta-font.html#clef-glyphs,
-versión nueva}.
@item
-Se han simplificado las instrucciones de los sellos de elementos
-gráficos para permitir una menor duplicación de código y mejores
-aproximaciones de altura de los objetos gráficos. Se han eliminado
-las siguientes instrucciones de sello:
-@itemize
-@item @code{beam}
-@item @code{bezier-sandwich}
-@item @code{bracket}
-@item @code{dashed-slur}
-@item @code{dot}
-@item @code{oval}
-@item @code{repeat-slash}
-@item @code{zigzag-line}
-@end itemize
-
-@item
-Ahora se tratan los corchetes como objetos diferenciados y no como
-parte de la plica.
-@lilypond[fragment,quote,relative=2]
-\override Flag #'color = #red
-g8
+Se ha modificado la interfaz de usuario de las líneas divisorias.
+Los glifos de barra de compás ahora se asemejan al aspecto de los
+caracteres utilizados para expresar el tipo de barra, de manera
+que un signo de repetición por la izquierda se debe codificar como
+@code{.|:}. La instrucción @code{\defineBarLine} provee una
+manera sencilla de definir estilos adicionales de línea divisoria.
+
+@item
+Las alteraciones accidentales en la armadura de la tonalidad se
+pueden imprimir en distinta octava de las posiciones
+tradicionales, o en más de una octava.
+@lilypond[quote,relative=0]
+\override Staff.KeySignature #'flat-positions = #'((-5 . 5))
+\override Staff.KeyCancellation #'flat-positions = #'((-5 . 5))
+\clef bass \key es\major es g bes d
+\clef treble \bar "||" \key es\major es g bes d
+\override Staff.KeySignature #'sharp-positions = #'(2)
+\bar "||" \key d\major b fis b2
@end lilypond
-@item
-Se puede elegir entre dos métodos de numeración de compases, en
-especial para cuando se emplean repeticiones:
-
-@lilypond[fragment,quote,relative=1,noragged-right]
-\relative c'{
- \set Score.alternativeNumberingStyle = #'numbers
- \repeat volta 3 { c4 d e f | }
- \alternative {
- { c4 d e f | c2 d \break }
- { f4 g a b | f4 g a b | f2 a | \break }
- { c4 d e f | c2 d }
- }
- c1 \break
- \set Score.alternativeNumberingStyle = #'numbers-with-letters
- \repeat volta 3 { c,4 d e f | }
- \alternative {
- { c4 d e f | c2 d \break }
- { f4 g a b | f4 g a b | f2 a | \break }
- { c4 d e f | c2 d }
- }
- c1
-}
-@end lilypond
-
-@item
-Lo que sigue es un cambio fundamental en la representación que
-LilyPond hace de la música: los eventos de duración como
-@code{LyricEvent} y @code{NoteEvent} ya no se encuentran envueltos
-dentro de elementos @code{EventChord} a no ser que se hayan escrito
-realmente como parte de un acorde. Si manipulamos expresiones
-musicales en Scheme, el nuevo comportamiento puede necesitar cambios
-en nuestro código. Las llamadas a la función musical
-@code{\eventChords} o a la función de Scheme @code{event-chord-wrap!}
-convierten a la representación anterior; la utilización de una
-cualquiera de ellas puede ser la vía más sencilla para mantener
-operativo el código tradicional.
-
-Los tres siguientes elementos de la lista son consecuencia de este
-cambio.
-
-@item
-Se ha reimplementado la abreviatura de ayuda para intruducción
-repetitiva de acordes, @code{q}. Ahora los acordes repetidos se
-sustituyen justo antes de la interpretación de la expresión musical.
-En caso de que el usuario quiera retener ciertos eventos del acorde
-original, puede ejecutar manualmente la función @code{\chordRepeats}
-de sustitución de acordes de repetición.
-
-@item
-Los números de cuerdas y digitaciones de la mano derecha sobre notas
-individuales aparecen ahora sin tener que escribirlas dentro de
-corchetes de acorde.
-
-@item
-Ahora las funciones musicales funcionan igual cuando se usan dentro o
-fuera de los acordes, incluidas todas las posibilidades de la
-exploración de argumentos. Las variables musicales se pueden usar
-dentro de acordes: una construcción como
-@lilypond[verbatim,quote,ragged-right]
-tonic=fis'
-{ <\tonic \transpose c g \tonic> }
-@end lilypond
-@noindent
-ahora funciona como se espera. Puede utilizarse @code{#@{@dots{}#@}}
-para la construcción de componentes de acordes. Ahora @code{\tweak}
-funciona sobre notas individuales sin necesidad de incluirlas dentro
-de un acorde. Ahora es posible usarla dentro de eventos de
-instrucciones y letra de canciones, pero aún no es probable que
-ofrezca resultados.
-
-@item
-@code{\tweak} toma ahora opcionalmente la especificación de un objeto
-de presentación. Se puede usar para trucar objetos de presentación
-que están causados sólo indirectamente por el evento trucado, como
-alteraciones accidentales, plicas y corchetes:
-
-@lilypond[verbatim,quote,ragged-right,relative=2]
-<\tweak Accidental #'color #red cis4
- \tweak Accidental #'color #green es
- g>
-@end lilypond
-
-@item
-Las expresiones de Scheme dentro de fragmentos de código de LilyPond
-incrustados (@code{#@{@dots{}#@}}) se ejecutan ahora dentro de la
-cerradura léxica del código de Scheme circundante. El símbolo
-@code{$} ya no es especial dentro del código de LilyPond incrustado.
-Se puede utilizar de forma incondicional dentro de código de LilyPond
-para la evaluación inmediata de expresiones de Scheme, de forma
-parecida a la forma en que se utilizaba anteriormente
-@code{ly:export}. Se ha suprimido @code{ly:export}. Como
-consecuencia, ahora @code{#} está libre para diferir la evaluación de
-su argumento hasta que el analizador sintáctico reduzca efectivamente
-la expresión contenida, reduciendo significativamente el potencial de
-la evaluación prematura. También están los operadores de @q{división
-de cadenas} @code{$@@} y @code{#@@} para la interpretación de los
-miembros de una lista de forma individual.
-
-@item
-Para reducir la necesidad de utilizar @code{$}, las expresiones de
-Scheme escritas con @code{#} se interpretan como música dentro de las
-listas de música, y como elementos de marcado o de listas de marcado
-dentro de los elementos de marcado.
-
-@item
-Se ha mejorado el soporte de acordes de tipo jazz: se reconocen los
-acordes lidios y alterados; ahora se tratan los separadores entre
-modificadores de acorde de forma independiente de los separadores
-entre acordes invertidos y sus notas de bajo (y por omisión, la barra
-inclinada se usa ahora solamente para el último tipo de separador);
-las notas adicionales ya no van prefijadas por "add" de forma
-predeterminada; y la "m" en los acordes menores se puede personalizar.
-Consulte @ruser{Nombres de acorde personalizados} para más
-información.
-
-@item
-Se ha cambiado el nombre de la instrucción @code{\markuplines} por
-@code{\markuplist} para conseguir una mejor correspondencia con su
-semántica y con la nomenclatura general de LilyPond.
-
-@item
-Se ha simplificado considerablemente la interfaz para especificar
-afinaciones en las tablaturas y se emplea la función de Scheme
-@code{\stringTuning} para la mayor parte de los propósitos.
-
-@item
-Las barras ahora pueden preservar la inclinación por encima de los
-saltos de línea.
-@lilypond[fragment,quote,relative=2]
-\override Beam #'breakable = ##t
-a8[ b c d e f g \bar "" \break f e d c b a]
-\once \override Beam #'positions = #beam::align-with-broken-parts
-a8[ b c d e f g \bar "" \break f e d c b a]
-\once \override Beam #'positions = #beam::slope-like-broken-parts
-a8[ b c d e f g \bar "" \break f e d c b a]
-@end lilypond
-Para hacerlo, se han hecho obsoletas varias funciones de "callback".
-@itemize
-@item @code{ly:beam::calc-least-squares-positions}
-@item @code{ly:beam::slope-damping}
-@item @code{ly:beam::shift-region-to-valid}
-@end itemize
-Además, @code{ly:beam::quanting} ahora acepta un argumento adicional
-para ayudar a los cálculos sobre los cambios de línea. Todas estas
-funciones se llaman automáticamente cuando se ajusta el parámetro
-@code{positions}.
-
-@item
-En los argumentos de función, la música, los elementos de marcado y
-las expresiones de Scheme (así como algunas otras entidades
-sintácticas) se han hecho mayormente intercambiables y se diferencian
-solamente mediante la evaluación del predicado respectivo. En ciertos
-casos, el analizador sintáctico consulta este predicado, como cuando
-se decide si interpretar @code{-3} como un número o como un evento de
-digitación.
-
-@item
-Ahora se pueden definir las funciones musicales (y sus parientes
-cercanos) con argumentos opcionales.
-
-@item
-Para definir instrucciones que se ejecutan solamente por sus efectos
-secundarios, ahora está disponible @code{define-void-function}.
-
-@item
-Hay una instrucción nueva @code{define-event-function} en analogía con
-@code{define-music-function} que se puede usar para definir funciones
-musicales que actúan como post-eventos sin que se requiera un especificador
-de dirección como (@code{-}, @code{^} o @code{_}) antes de ellos.
-
-@lilypond[quote,verbatim,ragged-right]
-dyn=#(define-event-function (parser location arg) (markup?)
- (make-dynamic-script arg))
-\relative c' { c\dyn pfsss }
-@end lilypond
-
-@item
-Se puede incluir una lista de alias en ASCII para caracteres
-especiales.
-
-@lilypond[quote,verbatim]
-\paper {
- #(include-special-characters)
-}
-\markup "• † ©right; &OE; &ss; ¶"
-@end lilypond
-
-@item
-Hay una instrucción nueva @code{define-scheme-function} en analogía
-con @code{define-music-function} que puede usarse para definir
-funciones que se evalúan a expresiones de Scheme pero aceptan
-argumentos en la sintaxis de LilyPond.
-
-@item
-Ahora se puede utilizar la construcción @code{#@{ @dots{} #@}} no solo
-para crear listas secuenciales de música, sino también para alturas
-(que se distinguen de los eventos de nota sencillos por la ausencia de
-duración u otra información que no puede formar parte de una altura),
-eventos musicales únicos, expresiones musicales vacías, post-eventos,
-elementos de marcado (sobre todo para liberar a los usuarios de la
-necesidad de usar la macro @code{markup}), listas de marcado,
-expresiones numéricas, definiciones y modificaciones de contextos y
-algunas otras cosas. Si no contiene nada o contiene un único evento
-musical, ya no devuelve una lista secuencial de música, sino una
-expresión musical vacía o simplemente el propio evento musical,
-respectivamente.
-
-@item
-Se pueden usar alturas en la parte derecha de las asignaciones. Las
-alturas se diferencian de los eventos de una sola nota en que no
-tienen duración ni otras informaciones que no pueden formar parte de
-una altura.
-
-@item
-Nueva opción de la línea de órdenes @option{--loglevel=@var{level}}
-para controlar el volumen de datos que LilyPond produce en la salida.
-Los valores posibles son ERROR (errores), WARN (advertencias),
-BASIC_PROGRESS (progreso básico), PROGRESS (progreso) y DEBUG
-(depuración).
-
-@item
-@code{\once \set} ahora reinicia correctamente el valor de la
-propiedad al valor previo.
-
-@lilypond[fragment,quote,relative=2]
- \set fingeringOrientations = #'(left)
- <e-1>4
- \once \set fingeringOrientations = #'(right)
- <e-1>
- <e-1>-"left"
-@end lilypond
-
-@item
-La alineación de los elementos de matiz dinámico extensos
-(reguladores, crescendi textuales, etc.) se divide automáticamente si
-se da explícitamente una dirección distinta.
-
-@lilypond[fragment,quote,relative=2]
-c4_\< c c^\> c c1_\p
-@end lilypond
-
-
-@item
-Ahora las apoyaturas y mordentes funcionan también dentro de una
-ligadura de expresión, y no solo dentro de una ligadura de fraseo.
-Asimismo, se ha añadido la función @code{\slashedGrace} que no imprime
-ninguna ligadura partiendo de la nota del mordente.
-
-@lilypond[fragment,quote,relative=2]
-c4( \appoggiatura e8 d4 \acciaccatura e8 d4 \slashedGrace e8 c4)
-@end lilypond
-
-
-@item
-Para suprimir a línea en un elemento de crescendo extenso (y otros
-elementos extensos similares), LilyPond contempla ahora de forma plena
-la propiedad @code{#'style = #'none}.
-
-@lilypond[fragment,quote,relative=2]
-\override DynamicTextSpanner #'style = #'none
-c4\cresc c c g, c'\p
-@end lilypond
-
-@item
-LilyPond.app está disponible ahora para MacOS X 10.7. ¡Gracias,
-Christian Hitz!
-
-@item
-Los glissandos pueden abarcar varias líneas.
-
@end itemize
@ifhtml
Para ver noticias anteriores, diríjase a
+@uref{http://lilypond.org/doc/v2.16/Documentation/changes/},
@uref{http://lilypond.org/doc/v2.14/Documentation/changes/},
-@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS.html},
o @uref{../,vuelva} al índice de la documentación.
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Grabado musical
@chapter Grabado musical
\layout {
\context {
\Staff
- \override NoteSpacing #'stem-spacing-correction = #0.0
- \override NoteSpacing #'same-direction-correction = #0.0
- \override StaffSpacing #'stem-spacing-correction = #0.0
+ \override NoteSpacing.stem-spacing-correction = #0.0
+ \override NoteSpacing.same-direction-correction = #0.0
+ \override StaffSpacing.stem-spacing-correction = #0.0
}
}
}
\layout {
\context {
\Staff
- \override NoteSpacing #'stem-spacing-correction = #0.6
+ \override NoteSpacing.stem-spacing-correction = #0.6
}
}
}
<<
\new Staff \with {
fontSize = #-4
- \override StaffSymbol #'staff-space = #(magstep -4)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -4)
+ \override StaffSymbol.thickness = #(magstep -3)
}
\relative c' {
\global
\clef "bass"
<<
{
- \once \override DynamicText #'X-offset = #-3
+ \once \override DynamicText.X-offset = #-3
<ees g c>2.~->^\f
<ees g c>4.~ <ees g c>8
} \\ {
@lilypond
\relative c {
\clef bass
- \once \override Slur #'positions = #'(1.5 . 1)
+ \once \override Slur.positions = #'(1.5 . 1)
e8[( f] g[ a b d,)] r4
- \once \override Slur #'positions = #'(2 . 3)
+ \once \override Slur.positions = #'(2 . 3)
e8[( f] g[ a b d,)] r4
e8[( f] g[ a b d,)] r4
}
@lilypond
\relative c {
\clef bass
- \once \override Slur #'positions = #'(1.5 . 1)
+ \once \override Slur.positions = #'(1.5 . 1)
e8[(_"15.39" f] g[ a b d,)] r4
}
@end lilypond
@lilypond
\relative c {
\clef bass
- \once \override Slur #'positions = #'(2 . 3)
+ \once \override Slur.positions = #'(2 . 3)
e8[(_"13.08" f] g[ a b d,)] r4
}
@end lilypond
}
\context {
\PianoStaff
- \override StaffGrouper #'staff-staff-spacing #'padding = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #1
}
}
}
@c KEEP LY
@lilypond
-collide = \once \override NoteColumn #'force-hshift = #0
+collide = \once \override NoteColumn.force-hshift = #0
\score {
<<
\change Staff = "LH" \oneVoice
\stemUp g,( c}
r4
- \override Stem #'cross-staff = ##t
- \override Stem #'length = #12
+ \override Stem.cross-staff = ##t
+ \override Stem.length = #12
<fis, b>) r\fermata
}
>>
\score {
\relative c' {
\stemDown <e g b>4_>-\arpeggio
- \override Arpeggio #'direction = #RIGHT
+ \override Arpeggio.direction = #RIGHT
\stemUp <e g b>4^>-\arpeggio
}
\layout {
\context {
\Score
- \override SpacingSpanner #'spacing-increment = #3
- \override TimeSignature #'transparent = ##t
+ \override SpacingSpanner.spacing-increment = #3
+ \override TimeSignature.transparent = ##t
}
}
}
<<
\new Staff \fragment
\new Staff \with {
- \override Beam #'beam-thickness = #0.3
- \override Stem #'thickness = #0.5
- \override Bar #'thickness = #3.6
- \override Tie #'thickness = #2.2
- \override StaffSymbol #'thickness = #3.0
- \override Tie #'extra-offset = #'(0 . 0.3)
+ \override Beam.beam-thickness = #0.3
+ \override Stem.thickness = #0.5
+ \override Bar.thickness = #3.6
+ \override Tie.thickness = #2.2
+ \override StaffSymbol.thickness = #3.0
+ \override Tie.extra-offset = #'(0 . 0.3)
}
\fragment
>>
\set autoBeaming = ##f
\time 2/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
- \once \override NoteHead #'font-series = #'bold
+ \once \override NoteHead.stencil = #note-head::brew-ez-stencil
+ \once \override NoteHead.font-size = #-7
+ \once \override NoteHead.font-family = #'sans
+ \once \override NoteHead.font-series = #'bold
<d f g>4
- \once \override NoteHead #'style = #'cross
+ \once \override NoteHead.style = #'cross
<d f g>4
\applyOutput #'Voice #mc-squared
<d f g>4
\time 4/8
\key c \minor
<< {
- \revert Stem #'direction
+ \revert Stem.direction
\change Staff = down
\set subdivideBeams = ##t
g16.[
\clef bass
\key c \minor
\set subdivideBeams = ##f
- \override Stem #'french-beaming = ##t
- \override Beam #'beam-thickness = #0.3
- \override Stem #'thickness = #4.0
+ \override Stem.french-beaming = ##t
+ \override Beam.beam-thickness = #0.3
+ \override Stem.thickness = #4.0
g'16[ b16 fis16 g16]
<< \makeClusters {
as16 <as b>
<g b>
<g cis>
} \\ {
- \override Staff.Arpeggio #'arpeggio-direction =#down
+ \override Staff.Arpeggio.arpeggio-direction =#down
<cis, e, gis, b, cis>4\arpeggio
}
>> }
}
\context {
\PianoStaff
- \override StaffGrouper #'staff-staff-spacing #'padding = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #1
}
}
}
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Interfaces para programadores
@chapter Interfaces para programadores
(parser location principio-final)
(pair?)
#@{
- \once \override Beam #'positions = #principio-final
+ \once \override Beam.positions = #principio-final
#@})
\relative c' @{
(parser location beg end)
(number? number?)
#{
- \once \override Beam #'positions = #(cons beg end)
+ \once \override Beam.positions = #(cons beg end)
#})
\relative c' {
(parser location mag)
(number?)
#{
- \override Stem #'length = #(* 7.0 mag)
- \override NoteHead #'font-size =
+ \override Stem.length = #(* 7.0 mag)
+ \override NoteHead.font-size =
#(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
#})
AltOff = {
- \revert Stem #'length
- \revert NoteHead #'font-size
+ \revert Stem.length
+ \revert NoteHead.font-size
}
\relative c' {
(parser location mag music)
(number? ly:music?)
#{
- \override Stem #'length = #(* 7.0 mag)
- \override NoteHead #'font-size =
+ \override Stem.length = #(* 7.0 mag)
+ \override NoteHead.font-size =
#(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
#music
- \revert Stem #'length
- \revert NoteHead #'font-size
+ \revert Stem.length
+ \revert NoteHead.font-size
#})
\relative c' {
(parser location)
()
(if (eq? #t (ly:get-option 'display-bar-numbers))
- #@{ \once \override Score.BarNumber #'break-visibility = ##f #@}
+ #@{ \once \override Score.BarNumber.break-visibility = ##f #@}
#@{#@}))
@end example
p. ej.:
@example
-\override Stem #'thickness = #2.0
+\override Stem.thickness = #2.0
@end example
Las propiedades pueden fijarse también a un procedimiento de Scheme,
@lilypond[fragment,verbatim,quote,relative=2]
-\override Stem #'thickness = #(lambda (grob)
+\override Stem.thickness = #(lambda (grob)
(if (= UP (ly:grob-property grob 'direction))
2.0
7.0))
sintáctica. Por ejemplo, lo siguiente produce un error de sintaxis.
@example
-F = \tweak #'font-size #-3 -\flageolet
+F = \tweak font-size #-3 -\flageolet
\relative c'' @{
c4^\F c4_\F
(ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
\relative c'' {
- \override Tie #'after-line-breaking =
+ \override Tie.after-line-breaking =
#my-callback
c1 ~ \break
c2 ~ c
@example
\overrideProperty
-#"Score.NonMusicalPaperColumn" % Nombre del grob
+Score.NonMusicalPaperColumn % Nombre del grob
#'line-break-system-details % Nombre de la propiedad
#'((next-padding . 20)) % Valor
@end example
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Tutorial de Scheme
@appendix Tutorial de Scheme
sintaxis de LilyPond para hacer esto es la siguiente:
@example
-\override Stem #'thickness = #2.6
+\override Stem.thickness = #2.6
@end example
Esta instrucción ajusta el aspecto de las plicas. Se añade una
coordenada X, y el @code{cdr} es la coordenada Y.
@example
-\override TextScript #'extra-offset = #'(1 . 2)
+\override TextScript.extra-offset = #'(1 . 2)
@end example
Esto asigna la pareja @code{(1 . 2)} a la propiedad
@c @transl ationof Tweaking with Scheme
Hemos visto cómo la salida de LilyPond se puede modificar
-profundamente usando instrucciones como @code{\override TextScript
-#'extra-offset = ( 1 . -1)}. Pero tenemos incluso mucho más poder si
+profundamente usando instrucciones como @code{\override TextScript.extra-offset = ( 1 . -1)}. Pero tenemos incluso mucho más poder si
utilizamos Scheme. Para ver una explicación completa de esto,
consulte el @ref{Tutorial de Scheme}, y @ruser{Interfaces para programadores}.
@lilypond[quote,verbatim,ragged-right]
padText = #(define-music-function (parser location padding) (number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
tempoPadded = #(define-music-function (parser location padding tempotext)
(number? markup?)
#{
- \once \override Score.MetronomeMark #'padding = #padding
+ \once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
+++ /dev/null
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Conceptos fundamentales
\\ % Voice two
{
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'ignore-collision = ##t
+ \once \override NoteColumn.ignore-collision = ##t
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\ % No voice three
\\ % Voice four
{
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
\\ % Voice two
{ \voiceTwoStyle
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'ignore-collision = ##t
+ \once \override NoteColumn.ignore-collision = ##t
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\ % No Voice three (we want stems down)
\\ % Voice four
{ \voiceThreeStyle
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
@}
>> % % fin del contexto de Staff ManualUno
\new Staff = "ManualDos" \with @{
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
@} <<
\keyTime
\clef "bass"
}
>> % end ManualOne Staff context
\new Staff = "ManualTwo" \with {
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
} <<
\keyTime
\clef "bass"
@lilypond[quote,verbatim,ragged-right]
dolce = \markup { \italic \bold dolce }
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
fthenp =_\markup {
\dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}
violin = \relative c'' @{
\repeat volta 2 @{
c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
- \once \override TextScript #'padding = #5.0
+ \once \override TextScript.padding = #5.0
c4.^"hi there!" d8 e' f g d |
c,4.\markup @{
\dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Trucar la salida
@chapter Trucar la salida
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
g4 a b c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
b4 c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\once \override NoteHead #'color = #green
+\once \override NoteHead.color = #green
g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
b c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>4
-\once \override NoteHead #'font-size = #-3
+\once \override NoteHead.font-size = #-3
<c e g>4
<c e g>4
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>4
-<c \tweak #'font-size #-3 e g>4
+<c \tweak font-size #-3 e g>4
@end lilypond
Observe que la sintaxis de @code{\tweak} no es igual que la de
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
a4^"Black"
- -\tweak #'color #red ^"Red"
- -\tweak #'color #green _"Green"
+ -\tweak color #red ^"Red"
+ -\tweak color #green _"Green"
@end lilypond
@noindent
el evento original:
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-<\tweak Accidental #'color #red cis4
- \tweak Accidental #'color #green es
+<\tweak Accidental.color #red cis4
+ \tweak Accidental.color #green es
g>
@end lilypond
@cindex color, propiedad, ejemplo
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
+\tweak direction #up
\times 4/3 {
- \tweak #'color #red
+ \tweak color #red
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
@c See issue 509
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
\times 2/3 { c8[ c c] }
-\once \override TupletNumber
- #'text = #tuplet-number::calc-fraction-text
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
\times 2/3 {
c8[ c]
c8[ c]
- \once \override TupletNumber #'transparent = ##t
+ \once \override TupletNumber.transparent = ##t
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
}
siguiente:
@example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
@end example
¡No olvide el @code{#'} antes del nombre de la propiedad y@tie{}@code{#}
\time 6/8
{
% Increase thickness of all following slurs from 1.2 to 5.0
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
r4 bes8 bes[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
{
r4 bes8
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes8[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
{
r4 bes8
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes[( g]) g |
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
g8[( es]) es d[( f]) as |
as8 g
}
{
r4 bes8
% Increase thickness of all following slurs from 1.2 to 5.0
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
bes[( g]) g |
g8[( es]) es
% Revert thickness of all following slurs to default of 1.2
- \revert Slur #'thickness
+ \revert Slur.thickness
d8[( f]) as |
as8 g
}
letra en cursiva, es:
@example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
@end example
@noindent
as8 g
}
\addlyrics {
- \override LyricText #'font-shape = #'italic
+ \override LyricText.font-shape = #'italic
The man who | feels love's sweet e -- | mo -- tion
}
}
instrucción será:
@example
-\override Lyrics . LyricText #'font-shape = #'italic
+\override Lyrics.LyricText.font-shape = #'italic
@end example
@warning{Dentro de la letra, deje siempre espacios entre la sílaba
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override BarLine #'stencil = ##f
+ \override BarLine.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'stencil = ##f
+ \override Staff.BarLine.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,verbatim,relative=2]
{
c4 c
- \once \override NoteHead #'stencil = #point-stencil
+ \once \override NoteHead.stencil = #point-stencil
c4 c
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+ \override Staff.BarLine.break-visibility = #'#(#f #f #f)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'transparent = ##t
+ \override Staff.TimeSignature.transparent = ##t
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #white
+ \override Staff.BarLine.color = #white
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #(x11-color 'white)
+ \override Staff.BarLine.color = #(x11-color 'white)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+ \override Staff.BarLine.color = #(rgb-color 1 1 1)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.StaffSymbol #'color = #(x11-color 'grey30)
- \override Staff.TimeSignature #'color = #(x11-color 'grey60)
- \override Staff.Clef #'color = #(x11-color 'grey60)
- \override Voice.NoteHead #'color = #(x11-color 'grey85)
- \override Voice.Stem #'color = #(x11-color 'grey85)
- \override Staff.BarLine #'color = #(x11-color 'grey10)
+ \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+ \override Staff.TimeSignature.color = #(x11-color 'grey60)
+ \override Staff.Clef.color = #(x11-color 'grey60)
+ \override Voice.NoteHead.color = #(x11-color 'grey85)
+ \override Voice.Stem.color = #(x11-color 'grey85)
+ \override Staff.BarLine.color = #(x11-color 'grey10)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
alignAboveContext = #"main"
}
{
- \override Staff.Clef #'stencil = ##f
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.Clef.stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
{ f8 f c }
}
>>
\new Staff \with {
alignAboveContext = #"main"
% Don't print clefs in this staff
- \override Clef #'stencil = ##f
+ \override Clef.stencil = ##f
% Don't print time signatures in this staff
- \override TimeSignature #'stencil = ##f
+ \override TimeSignature.stencil = ##f
}
{ f8 f c }
>>
objeto como las cabezas (@code{NoteHead}s) con instrucciones como
@example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
@end example
o podemos cambiar el tamaño de todas las tipografías estableciendo una
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \override Clef.stencil = ##f
+ \override TimeSignature.stencil = ##f
% Reduce all font sizes by ~24%
fontSize = #-2
}
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \override Clef.stencil = ##f
+ \override TimeSignature.stencil = ##f
fontSize = #-2
% Reduce stem length and line spacing to match
- \override StaffSymbol #'staff-space = #(magstep -2)
+ \override StaffSymbol.staff-space = #(magstep -2)
}
{ f8 f c }
>>
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
a4 g c a |
-\override Stem #'direction = #DOWN
+\override Stem.direction = #DOWN
a4 g c a |
-\override Stem #'direction = #UP
+\override Stem.direction = #UP
a4 g c a |
-\revert Stem #'direction
+\revert Stem.direction
a4 g c a |
@end lilypond
@lilypond[quote,verbatim,relative=2]
c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #DOWN
+\override Fingering.direction = #DOWN
c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #UP
+\override Fingering.direction = #UP
c4-5 a-3 f-1 c'-5 |
@end lilypond
@w{@code{-7}}:
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
+\override Fingering.font-size = #-7
\set fingeringOrientations = #'(left)
<f-2>4
<c-1 e-2 g-3 b-5>4
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
% Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% Place dynamics above staff
\dynamicUp
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
% Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% Place dynamics above staff
\dynamicUp
% Place following Ottava Bracket below Text Spanners
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
% Start Ottava Bracket
\ottava #1
c'4 \startTextSpan
@lilypond[quote,verbatim,relative=2]
c4( c^\markup { \tiny \sharp } d4.) c8 |
c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
c4^\markup { \tiny \sharp } d4.) c8 |
-\once \override Slur #'outside-staff-priority = #500
+\once \override Slur.outside-staff-priority = #500
c4( c^\markup { \tiny \sharp } d4.) c8 |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
c2^"Text1"
c2^"Text2" |
-\once \override TextScript #'outside-staff-priority = #500
+\once \override TextScript.outside-staff-priority = #500
c2^"Text3"
c2^"Text4" |
@end lilypond
R1 |
% Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
c,,2^"Long Text " c'' |
R1 |
% Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
\textLengthOn % and turn on textLengthOn
c,,2^"Long Text " % Spaces at end are honored
c''2 |
instrucción que lo hace para las indicaciones dinámicas:
@example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
@end example
@noindent
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
a4\f b\mf c\mp b\p |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
% Extend width by 1 staff space
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
c2\fermata
-\override Script #'padding = #3
+\override Script.padding = #3
b2\fermata
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
% This will not work, see below
-\override MetronomeMark #'padding = #3
+\override MetronomeMark.padding = #3
\tempo 4 = 120
c1 |
% This works
-\override Score.MetronomeMark #'padding = #3
+\override Score.MetronomeMark.padding = #3
\tempo 4 = 80
d1 |
@end lilypond
\relative c'' {
c4
% This prints a sesquisharp but the spacing is too small
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4 c
% This improves the spacing
- \once \override Score.AccidentalPlacement #'right-padding = #0.6
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Score.AccidentalPlacement.right-padding = #0.6
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4 |
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
% Extend width by 1 unit
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
% Align dynamics to a base line 2 units above staff
-\override DynamicLineSpanner #'staff-padding = #2
+\override DynamicLineSpanner.staff-padding = #2
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=3]
\voiceOne
<a\2>
-\once \override StringNumber #'self-alignment-X = #RIGHT
+\once \override StringNumber.self-alignment-X = #RIGHT
<a\2>
@end lilypond
<<
{ c4 c c c }
\\
- \override MultiMeasureRest #'staff-position = #-8
+ \override MultiMeasureRest.staff-position = #-8
{ R1 }
>>
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
\stemUp
f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
f4-5
@end lilypond
@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
+\once \override PhrasingSlur.positions = #'(-4 . -3)
\acciaccatura e8\( d8 c~ c d c d\)
@end lilypond
{ c'1 ~ c'2. e'8 f' }
\\
{
- \override Beam #'positions = #'(-1 . -1)
+ \override Beam.positions = #'(-1 . -1)
e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g''
}
>>
\\
{
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\
\\
{
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\voiceTwo
c,8~
% Reposition the c2 to the right of the merged note
- \once \override NoteColumn #'force-hshift = #1.0
+ \once \override NoteColumn.force-hshift = #1.0
% Move the c2 out of the main note column
% so the merge will work
\shiftOnn
% Stem on the d2 must be down to permit merging
\stemDown
% Stem on the d2 should be invisible
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
d2
}
\new Voice {
ligadura 3.5 medios espacios de pentagrama por encima de la línea
central:
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
Con esto se completa el compás dos, dando como resultado:
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\voiceTwo
c,8~
% Reposition the c2 to the right of the merged note
- \once \override NoteColumn #'force-hshift = #1.0
+ \once \override NoteColumn.force-hshift = #1.0
% Move the c2 out of the main note column
% so the merge will work
\shiftOnn
% Stem on the d2 must be down to permit merging
\stemDown
% Stem on the d2 should be invisible
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
d2
}
\new Voice {
@lilypond[quote,fragment,relative=2,verbatim]
<<
{
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
b8~ b\noBeam
}
\\
@lilypond[quote,fragment,relative=2,verbatim]
<<
{
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
- \tweak Stem #'length #8
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
+ \tweak Stem.length #8
b8~ b\noBeam
}
\\
% Visible tempo marking
\tempo 4=120
a4 a a
- \once \override Score.MetronomeMark #'transparent = ##t
+ \once \override Score.MetronomeMark.transparent = ##t
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
a4\fermata |
% Visible tempo marking
\tempo 4=120
a4 a a
- \once \override Score.MetronomeMark #'stencil = ##f
+ \once \override Score.MetronomeMark.stencil = ##f
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
a4\fermata |
@code{\revert}?
@example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
@end example
Estas instrucciones también serían extremadamente tediosas de escribir
@lilypond[quote,verbatim]
emphasize = {
- \override Lyrics.LyricText #'font-shape = #'italic
- \override Lyrics.LyricText #'font-series = #'bold
+ \override Lyrics.LyricText.font-shape = #'italic
+ \override Lyrics.LyricText.font-series = #'bold
}
normal = {
- \revert Lyrics.LyricText #'font-shape
- \revert Lyrics.LyricText #'font-series
+ \revert Lyrics.LyricText.font-shape
+ \revert Lyrics.LyricText.font-series
}
global = { \key c \major \time 4/4 \partial 4 }
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
\layout{
\context {
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
}
\context {
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
}
\context {
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
\layout{
\context { \Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
}
\context { \Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
@example
tieDotted = @{
- \override Tie #'dash-period = #0.75
- \override Tie #'dash-fraction = #0.1
+ \override Tie.dash-period = #0.75
+ \override Tie.dash-fraction = #0.1
@}
@end example
\relative c' {
% Arrange to obtain color from color-notehead procedure
- \override NoteHead #'color = #color-notehead
+ \override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
}
@end lilypond
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Notación antigua
@section Notación antigua
\context {
\Staff
\consists "Custos_engraver"
- \override Custos #'style = #'mensural
+ \override Custos.style = #'mensural
}
}
}
\score {
<<
\new MensuralVoice = "discantus" \transpose c c' {
- \override Score.BarNumber #'transparent = ##t {
+ \override Score.BarNumber.transparent = ##t {
c'1\melisma bes a g\melismaEnd
f\breve
\[ f1\melisma a c'\breve d'\melismaEnd \]
@tab
@lilypond[relative=1,notime]
\clef "mensural-c2"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "mensural-f"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "mensural-g"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "petrucci-c2"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "petrucci-f3"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "petrucci-g"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@end multitable
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter default }
- \override Staff.TimeSignature #'style = #'numbered
+ \override Staff.TimeSignature.style = #'numbered
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter numbered }
- \override Staff.TimeSignature #'style = #'mensural
+ \override Staff.TimeSignature.style = #'mensural
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter mensural }
- \override Staff.TimeSignature #'style = #'neomensural
+ \override Staff.TimeSignature.style = #'neomensural
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter neomensural }
- \override Staff.TimeSignature #'style = #'single-digit
+ \override Staff.TimeSignature.style = #'single-digit
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter single-digit }
}
@lilypond[quote,fragment,ragged-right,verbatim]
\set Score.skipBars = ##t
\autoBeamOff
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a'
-\override NoteHead #'style = #'semipetrucci
+\override NoteHead.style = #'semipetrucci
a'\breve*5/6
-\override NoteHead #'style = #'blackpetrucci
+\override NoteHead.style = #'blackpetrucci
a'8*4/3 a'
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
a'\longa
@end lilypond
contemplado el estilo @code{mensural}
@lilypond[quote,fragment,ragged-right,verbatim]
-\override Flag #'style = #'mensural
-\override Stem #'thickness = #1.0
-\override NoteHead #'style = #'mensural
+\override Flag.style = #'mensural
+\override Stem.thickness = #1.0
+\override NoteHead.style = #'mensural
\autoBeamOff
c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8
c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32
@lilypond[quote,fragment,ragged-right,verbatim]
\set Score.skipBars = ##t
-\override Rest #'style = #'classical
+\override Rest.style = #'classical
r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'mensural
+\override Rest.style = #'mensural
r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'neomensural
+\override Rest.style = #'neomensural
r\longa^"neomensural" r\breve r1 r2 r4 r8 r16
@end lilypond
@code{KeySignature}, respectivamente; p.ej.:
@example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
#alteration-mensural-glyph-name-alist
@end example
@c @example
@c \set Score.timing = ##f
-@c \set Score.defaultBarType = "empty"
-@c \override NoteHead #'style = #'neomensural
-@c \override Staff.TimeSignature #'style = #'neomensural
+@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 \]
\score {
\transpose c c' {
\set Score.timing = ##f
- \set Score.defaultBarType = "empty"
- \override NoteHead #'style = #'petrucci
- \override Staff.TimeSignature #'style = #'mensural
+ \set Score.defaultBarType = "-"
+ \override NoteHead.style = #'petrucci
+ \override Staff.TimeSignature.style = #'mensural
\clef "petrucci-g"
\[ c'\maxima g \]
\[ d\longa
- \override NoteHead #'ligature-flexa = ##t
- \once \override NoteHead #'flexa-width = #3.2
+ \override NoteHead.ligature-flexa = ##t
+ \once \override NoteHead.flexa-width = #3.2
c\breve f e d \]
\[ c'\maxima d'\longa \]
\[ e'1 a g\breve \]
@lilypond[quote,ragged-right]
\transpose c c' {
\set Score.timing = ##f
- \set Score.defaultBarType = "empty"
- \override NoteHead #'style = #'petrucci
- \override Staff.TimeSignature #'style = #'mensural
+ \set Score.defaultBarType = "-"
+ \override NoteHead.style = #'petrucci
+ \override Staff.TimeSignature.style = #'mensural
\clef "petrucci-g"
\[ c'\maxima g \]
\[ d\longa
- \override NoteHead #'ligature-flexa = ##t
- \once \override NoteHead #'flexa-width = #3.2
+ \override NoteHead.ligature-flexa = ##t
+ \once \override NoteHead.flexa-width = #3.2
c\breve f e d \]
\[ c'\maxima d'\longa \]
\[ e'1 a g\breve \]
@code{vaticana-do3}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'vaticana.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'vaticana.punctum
\clef "vaticana-do2"
c
@end lilypond
@code{vaticana-fa1}, @code{vaticana-fa2}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'vaticana.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'vaticana.punctum
\clef "vaticana-fa2"
c
@end lilypond
@code{medicaea-do3}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'medicaea.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'medicaea.punctum
\clef "medicaea-do2"
c
@end lilypond
@code{medicaea-fa1}, @code{medicaea-fa2}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'medicaea.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'medicaea.punctum
\clef "medicaea-fa2"
c
@end lilypond
@code{hufnagel-do3}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'hufnagel.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-do2"
c
@end lilypond
@code{hufnagel-fa1}, @code{hufnagel-fa2}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'hufnagel.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-fa2"
c
@end lilypond
@code{hufnagel-do-fa}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'hufnagel.punctum
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-do-fa"
c
@end lilypond
respectivamente; p.ej.:
@example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
#alteration-mensural-glyph-name-alist
@end example
\score {
<<
\context VaticanaVoice {
- \override TextScript #'padding = #3
+ \override TextScript.padding = #3
g a g
s^\markup { "divisio minima" }
\divisioMinima
\include "gregorian.ly"
\score {
\new VaticanaVoice {
- \override TextScript #'font-family = #'typewriter
- \override TextScript #'font-shape = #'upright
- \override Script #'padding = #-0.1
+ \override TextScript.font-family = #'typewriter
+ \override TextScript.font-shape = #'upright
+ \override Script.padding = #-0.1
a\ictus_"ictus " \bar "" \break
a\circulus_"circulus " \bar "" \break
a\semicirculus_"semicirculus " \bar "" \break
\new KievanVoice = "melody" \transpose c c' {
\cadenzaOn
c4 c c c c2 b,\longa
- \bar "kievan"
+ \bar "k"
}
\new Lyrics \lyricsto "melody" {
Го -- спо -- ди по -- ми -- луй.
@lilypond[quote,relative=1,notime,verbatim]
\clef "kievan-do"
- \override NoteHead #'style = #'kievan
+ \override NoteHead.style = #'kievan
c
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim]
\autoBeamOff
\cadenzaOn
-\override NoteHead #'style = #'kievan
+\override NoteHead.style = #'kievan
b'1 b'2 b'4 b'8 b'\breve b'\longa
@end lilypond
@lilypond[quote,relative=1,notime,verbatim]
\clef "kievan-do"
-\override NoteHead #'style = #'kievan
-\override Accidental #'glyph-name-alist =
+\override NoteHead.style = #'kievan
+\override Accidental.glyph-name-alist =
#alteration-kievan-glyph-name-alist
bes' dis,
@end lilypond
Normalmente se coloca una figura decorativa al final de una pieza de
notación kievana, que puede denominarse como «doble barra final del
-canto kievano». Se puede invocar como @code{\bar "kievan"}.
+canto kievano». Se puede invocar como @code{\bar "k"}.
@lilypond[quote,relative=1,notime,verbatim]
\clef "kievan-do"
- \override NoteHead #'style = #'kievan
- c \bar "kievan"
+ \override NoteHead.style = #'kievan
+ c \bar "k"
@end lilypond
@seealso
Sin embargo, en ciertos estilos de transcripción, se usan plicas de
forma ocasional, por ejemplo para indicar la transición a partir de un
recitativo monotónico a un gesto melódico fijo. En estos casos
-podemos usar bien @code{\override Stem #'transparent = ##t} o bien
-@code{\override Stem #'length = #0}, y restaurar la plica cuando se
-necesite con el correspondiente @code{\once \override Stem
-#'transparent = ##f} (véase el ejemplo de abajo). Al utilizar
+podemos usar bien @code{\override Stem.transparent = ##t} o bien
+@code{\override Stem.length = #0}, y restaurar la plica cuando se
+necesite con el correspondiente @code{\once \override Stem.transparent = ##f} (véase el ejemplo de abajo). Al utilizar
plicas que lleven corchetes, asegúrese de establecer también
-@code{\override Flag #'transparent = ##t}.
+@code{\override Flag.transparent = ##t}.
@b{Compás}. Para el canto no medido, existen diversas alternativas.
Para quitar las barras de compás, el enfoque radical consiste en
retirar (mediante la instrucción @code{\remove}) el grabador
Bar_engraver del contexto de pentagrama Staff. Una vez más, en vez de
-ello podemos usar @code{\override BarLine #'transparent = ##t} si se
+ello podemos usar @code{\override BarLine.transparent = ##t} si se
necesita ocasionalmente una barra de compás.
Un tipo de transcripción muy común es el canto de recitativo, en el
}
verba = \lyricmode {
- \once \override LyricText #'self-alignment-X = #-1
+ \once \override LyricText.self-alignment-X = #-1
"Noctem quietam et" fi -- nem per -- fec -- tum
- \once \override LyricText #'self-alignment-X = #-1
+ \once \override LyricText.self-alignment-X = #-1
"concedat nobis Dominus" om -- ni -- po -- tens.
}
\score {
\Staff
\remove "Time_signature_engraver"
\remove "Bar_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
}
}
}
chant = \relative c' {
\clef "G_8"
\set Score.timing = ##f
- c\breve \override NoteHead #'transparent = ##t c c c c c
- \revert NoteHead #'transparent
- \override Stem #'transparent = ##f \stemUp c4 b4 a
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t c2 c4 \divisioMaior
- c\breve \override NoteHead #'transparent = ##t c c c c c c c
- \revert NoteHead #'transparent c4 c f, f \finalis
+ c\breve \override NoteHead.transparent = ##t c c c c c
+ \revert NoteHead.transparent
+ \override Stem.transparent = ##f \stemUp c4 b4 a
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t c2 c4 \divisioMaior
+ c\breve \override NoteHead.transparent = ##t c c c c c c c
+ \revert NoteHead.transparent c4 c f, f \finalis
}
verba = \lyricmode {
\context {
\Staff
\remove "Time_signature_engraver"
- \override BarLine #'transparent = ##t
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override BarLine.transparent = ##t
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
}
}
}
@lilypond[verbatim,quote]
spiritus = \relative c' {
\time 1/4
- \override Lyrics.LyricText #'X-extent = #'(0 . 3)
+ \override Lyrics.LyricText.X-extent = #'(0 . 3)
d4 \times 2/3 { f8 a g } g a a4 g f8 e
d4 f8 g g8 d f g a g f4 g8 a a4 s
\times 2/3 { g8 f d } e f g a g4
\context {
\Staff
\remove "Time_signature_engraver"
- \override BarLine #'X-extent = #'(-1 . 1)
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Beam #'transparent = ##t
- \override BarLine #'transparent = ##t
- \override TupletNumber #'transparent = ##t
+ \override BarLine.X-extent = #'(-1 . 1)
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Beam.transparent = ##t
+ \override BarLine.transparent = ##t
+ \override TupletNumber.transparent = ##t
}
}
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Cambiar los valores por omisión
@chapter Cambiar los valores por omisión
\layout {
\context {
\Staff
- \override Stem #'thickness = #4.0
+ \override Stem.thickness = #4.0
}
}
}
@item
Una instrucción predefinida tal como @code{\dynamicUp} o una expresión
-musical como @code{\accidentalStyle "dodecaphonic"}
+musical como @code{\accidentalStyle dodecaphonic}
@lilypond[quote,verbatim]
\score {
}
\context {
\Staff
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
}
}
}
}
}
\layout {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\set fontSize = #-4
- \override Voice.Stem #'thickness = #4.0
+ \override Voice.Stem.thickness = #4.0
}
}
@end lilypond
\new Staff {
\new Voice
\with {
- \override Stem #'thickness = #4.0
+ \override Stem.thickness = #4.0
}
{
\relative c'' {
}
}
\new Staff
- \with { \accidentalStyle "dodecaphonic" }
+ \with { \accidentalStyle dodecaphonic }
{
\new Voice
\with { \dynamicUp }
\consists "Text_engraver"
\consists "Pitch_squash_engraver"
squashedPosition = #0
- \override NoteHead #'style = #'slash
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override NoteHead.style = #'slash
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
\alias Voice
}
\context { \Staff
Las notas parecen barras inclinadas y no tienen plica:
@example
-\override NoteHead #'style = #'slash
-\override Stem #'transparent = ##t
-\override Flag #'transparent = ##t
+\override NoteHead.style = #'slash
+\override Stem.transparent = ##t
+\override Flag.transparent = ##t
@end example
Todos estos añadidos tienen que cooperar, y esto se consigue con un
\consists "Text_engraver"
\consists "Pitch_squash_engraver"
squashedPosition = #0
- \override NoteHead #'style = #'slash
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override NoteHead.style = #'slash
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
\alias Voice
@}
@end example
espacio en blanco de 3 espacios de pentagrama entre la nota y la
digitación:
@example
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
@end example
Al insertar esta instrucción antes de que se haya creado el objeto
resultado:
@lilypond[quote,relative=2,verbatim]
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
c-2
\stemUp
f
La instrucción
@verbatim
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
@end verbatim
@noindent
@lilypond[quote,verbatim,relative=2]
c4
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
c4
c4
c4
@lilypond[quote,verbatim,relative=2]
c4
-\once \override Stem #'thickness = #4.0
+\once \override Stem.thickness = #4.0
c4
c4
@end lilypond
en el momento en que se crea el objeto. En este ejemplo:
@lilypond[quote,verbatim,relative=2]
-\override Slur #'thickness = #3.0
+\override Slur.thickness = #3.0
c8[( c
-\override Beam #'beam-thickness = #0.6
+\override Beam.beam-thickness = #0.6
c8 c])
@end lilypond
siguiente ejemplo no hace nada.
@example
-\override Voice.Stem #'thickness = #4.0
-\revert Staff.Stem #'thickness
+\override Voice.Stem.thickness = #4.0
+\revert Staff.Stem.thickness
@end example
Algunas opciones «trucables» se llaman @q{subpropiedades} y residen
tales como
@example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
+\override Stem.details.beamed-lengths = #'(4 4 3)
@end example
@end ignore
@lilypond[quote,verbatim,relative=2]
c4 c
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
c4 c
@end lilypond
@code{\override}, se utiliza el contexto del nivel inferior:
@lilypond[quote,verbatim,relative=2]
-{ \override Staff.Stem #'thickness = #3.0
+{ \override Staff.Stem.thickness = #3.0
<<
{
e4 e
- \override Stem #'thickness = #0.5
+ \override Stem.thickness = #0.5
e4 e
} \\ {
c4 c c c
@lilypond[quote,verbatim,relative=2]
c4
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
c4 c
-\revert Voice.Stem #'thickness
+\revert Voice.Stem.thickness
c4
@end lilypond
<<
{
e4
- \override Staff.Stem #'thickness = #3.0
+ \override Staff.Stem.thickness = #3.0
e4 e e
} \\ {
c4 c c
- \revert Staff.Stem #'thickness
+ \revert Staff.Stem.thickness
c4
}
>>
{
<<
{
- \override Stem #'thickness = #3.0
+ \override Stem.thickness = #3.0
e4 e e e
} \\ {
c4
- \once \override Stem #'thickness = #3.0
+ \once \override Stem.thickness = #3.0
c4 c c
}
>>
aspecto como
@example
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
@end example
@noindent
instrucciones de la forma
@example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
+\override Stem.details.beamed-lengths = #'(4 4 3)
@end example
@cindex documentación interna
@lilypond[relative=2,verbatim,quote]
< c
- \tweak #'color #red
+ \tweak color #red
d
g
- \tweak #'duration-log #1
+ \tweak duration-log #1
a
> 4
--\tweak #'padding #8
+-\tweak padding #8
-^
@end lilypond
Así, esto funciona:
@lilypond[relative=2,verbatim,quote]
-<\tweak #'color #red c>4
+<\tweak color #red c>4
@end lilypond
@noindent
pero esto no funciona:
@lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
+\tweak color #red c4
@end lilypond
@end ignore
@lilypond[relative=2,verbatim,quote]
< c
- \tweak #'color #red
+ \tweak color #red
d
g
- \tweak #'duration-log #1
+ \tweak duration-log #1
a
> 4
@end lilypond
@code{\tweak} se puede usar para modificar ligaduras de expresión:
@lilypond[verbatim,quote,relative=1]
-c-\tweak #'thickness #5 ( d e f)
+c-\tweak thickness #5 ( d e f)
@end lilypond
partir de eventos dentro del @code{EventChord}:
@lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
-\tweak #'color #red <c e>4
-<\tweak #'color #red c e>4
+\tweak color #red c4
+\tweak color #red <c e>4
+<\tweak color #red c e>4
@end lilypond
La instrucción @code{\tweak} sencilla no se puede usar para modificar
usando la forma explícita de la instrucción @code{\tweak}:
@lilypond[relative=2,verbatim,quote]
-\tweak Stem #'color #red
-\tweak Beam #'color #green c8 e
-<c e \tweak Accidental #'font-size #-3 ges>4
+\tweak Stem.color #red
+\tweak Beam.color #green c8 e
+<c e \tweak Accidental.font-size #-3 ges>4
@end lilypond
No se puede usar @code{\tweak} para modificar las claves o las
@lilypond[verbatim,quote,relative=1]
c
--\tweak #'style #'dashed-line
--\tweak #'dash-fraction #0.2
--\tweak #'thickness #3
--\tweak #'color #red
+-\tweak style #'dashed-line
+-\tweak dash-fraction #0.2
+-\tweak thickness #3
+-\tweak color #red
\glissando
f'
@end lilypond
% reduced space between staves
\new PianoStaff \with {
% this is the nested declaration
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #7
} <<
\new Staff { \clef treble c''1 }
\new Staff { \clef bass c1 }
@lilypond[quote,verbatim]
\new PianoStaff \with {
- \override StaffGrouper #'staff-staff-spacing =
+ \override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 0)
(minimum-distance . 0)
(padding . 0)
siguientes son equivalentes:
@example
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 7))
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 7)
(minimum-distance . 0)
(padding . 0)
@lilypond[verbatim,quote,relative=1]
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
+ \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
}
{ a4 e' f b | d1 }
@end lilypond
@lilypond[verbatim,quote,relative=1]
\new Staff \with {
- \override StaffSymbol #'width = #23
+ \override StaffSymbol.width = #23
}
{ a4 e' f b | d1 }
@end lilypond
a~a
a
% increase the length of the tie
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
~a
@end lilypond
\compressFullBarRests
R1*23
% increase the length of the rest bar
-\once \override MultiMeasureRest #'minimum-length = #20
+\once \override MultiMeasureRest.minimum-length = #20
R1*23
a1
@end lilypond
@lilypond[verbatim,quote,relative=2]
a \< a a a \!
% increase the length of the hairpin
-\override Hairpin #'minimum-length = #20
+\override Hairpin.minimum-length = #20
a \< a a a \!
@end lilypond
@lilypond[verbatim,quote,relative=2]
a( a)
a
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
( a)
a\( a\)
a
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
\( a\)
@end lilypond
e \glissando c'
% not effective alone
-\once \override Glissando #'minimum-length = #20
+\once \override Glissando.minimum-length = #20
e, \glissando c'
% effective only when both overrides are present
-\once \override Glissando #'minimum-length = #20
-\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Glissando.minimum-length = #20
+\once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
e, \glissando c'
@end lilypond
@lilypond[verbatim,quote,relative=1]
% not effective alone
-\once \override Beam #'minimum-length = #20
+\once \override Beam.minimum-length = #20
e8 e e e
% effective only when both overrides are present
-\once \override Beam #'minimum-length = #20
-\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Beam.minimum-length = #20
+\once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
e8 e e e
@end lilypond
@lilypond[verbatim,quote,relative=2]
a \< a a a a \! a a a \break
-\override Hairpin #'to-barline = ##f
+\override Hairpin.to-barline = ##f
a \< a a a a \! a a a
@end lilypond
@lilypond[relative=2,quote,verbatim]
e2 \glissando b
-\once \override Glissando #'(bound-details left Y) = #3
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.left.Y = #3
+\once \override Glissando.bound-details.right.Y = #-2
e2 \glissando b
@end lilypond
@code{right-broken} de @code{bound-details}. Por ejemplo:
@lilypond[relative=2,ragged-right,verbatim,quote]
-\override Glissando #'breakable = ##t
-\override Glissando #'(bound-details right-broken Y) = #-3
+\override Glissando.breakable = ##t
+\override Glissando.bound-details.right-broken.Y = #-3
c1 \glissando \break
f1
@end lilypond
de extensión horizontales.
@lilypond[quote,ragged-right,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
c2\startTextSpan b c a\stopTextSpan
@end lilypond
símbolo del borde verticalmente con relación al extremo de la línea:
@lilypond[relative=1,quote,verbatim]
-\override TextSpanner
- #'(bound-details left stencil-align-dir-y) = #-2
-\override TextSpanner
- #'(bound-details right stencil-align-dir-y) = #UP
-
-\override TextSpanner
- #'(bound-details left text) = #"ggg"
-\override TextSpanner
- #'(bound-details right text) = #"hhh"
+\override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
+\override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
+
+\override TextSpanner.bound-details.left.text = #"ggg"
+\override TextSpanner.bound-details.right.text = #"hhh"
c4^\startTextSpan c c c \stopTextSpan
@end lilypond
@lilypond[quote,verbatim,relative=1]
a1 a
-\override Score.BarLine #'stencil = ##f
+\override Score.BarLine.stencil = ##f
a a
-\revert Score.BarLine #'stencil
+\revert Score.BarLine.stencil
a a a
@end lilypond
@lilypond[quote,verbatim,relative=2]
a4 a
-\once \override NoteHead #'transparent = ##t
+\once \override NoteHead.transparent = ##t
a a
@end lilypond
objeto blanco, como puede verse aquí:
@lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
+\override Staff.Clef.color = #white
a1
@end lilypond
para que se dibuje antes:
@lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
-\override Staff.Clef #'layer = #-1
+\override Staff.Clef.color = #white
+\override Staff.Clef.layer = #-1
a1
@end lilypond
f4 g a b
f4 g a b
% Remove bar line at the end of the current line
-\once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
+\once \override Score.BarLine.break-visibility = #'#(#f #t #t)
\break
f4 g a b
f4 g a b
\key g \major
f4 g a b
% Try to remove all key signatures
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b
\break
\key g \major
f4 g a b
\set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b \break
f4 g a b
f4 g a b
\set Staff.explicitKeySignatureVisibility = #all-invisible
\set Staff.printKeyCancellation = ##f
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b \break
f4 g a b
@lilypond[relative=2,ragged-right,verbatim,quote]
d2 \glissando d'2
-\once \override Glissando #'style = #'dashed-line
+\once \override Glissando.style = #'dashed-line
d,2 \glissando d'2
-\override Glissando #'style = #'dotted-line
+\override Glissando.style = #'dotted-line
d,2 \glissando d'2
-\override Glissando #'style = #'zigzag
+\override Glissando.style = #'zigzag
d,2 \glissando d'2
-\override Glissando #'style = #'trill
+\override Glissando.style = #'trill
d,2 \glissando d'2
@end lilypond
@c TODO Complete
@lilypond[relative=2,ragged-right,verbatim,quote]
e2 \glissando f
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.right.Y = #-2
e2 \glissando f
@end lilypond
@lilypond[quote,verbatim,relative=1]
g4\< e' d' f\!
-\override Hairpin #'rotation = #'(20 -1 0)
+\override Hairpin.rotation = #'(20 -1 0)
g,,4\< e' d' f\!
@end lilypond
que empuja al texto a una posición muy alta.
@lilypond[quote,verbatim,relative=1]
-\override TextScript #'outside-staff-priority = ##f
+\override TextScript.outside-staff-priority = ##f
g4^\markup { \rotate #30 "a G" }
b^\markup { \rotate #30 "a B" }
des^\markup { \rotate #30 "a D-Flat" }
@lilypond[verbatim,quote,relative=2]
a-3
a
--\tweak #'X-offset #0
--\tweak #'Y-offset #0
+-\tweak X-offset #0
+-\tweak Y-offset #0
-3
a
--\tweak #'X-offset #-1
--\tweak #'Y-offset #1
+-\tweak X-offset #-1
+-\tweak Y-offset #1
-3
@end lilypond
@lilypond[quote,verbatim,relative=1]
a'
--\tweak #'self-alignment-X #-1
+-\tweak self-alignment-X #-1
^"left-aligned"
--\tweak #'self-alignment-X #0
+-\tweak self-alignment-X #0
^"center-aligned"
--\tweak #'self-alignment-X #RIGHT
+-\tweak self-alignment-X #RIGHT
^"right-aligned"
--\tweak #'self-alignment-X #-2.5
+-\tweak self-alignment-X #-2.5
^"aligned further to the right"
@end lilypond
@lilypond[quote,verbatim,relative=2]
a
--\tweak #'self-alignment-X #0.5 % move horizontally left
--\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
--\tweak #'self-alignment-Y #-1 % move vertically up
+-\tweak self-alignment-X #0.5 % move horizontally left
+-\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
+-\tweak self-alignment-Y #-1 % move vertically up
-3 % third finger
@end lilypond
@lilypond[verbatim,quote,relative=1]
% The rehearsal mark will be centered above the Clef
-\override Score.RehearsalMark #'break-align-symbols = #'(clef)
+\override Score.RehearsalMark.break-align-symbols = #'(clef)
\key a \major
\clef treble
\mark "↓"
e1
% The rehearsal mark will be centered above the Time Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
+\override Score.RehearsalMark.break-align-symbols = #'(time-signature)
\key a \major
\clef treble
\time 3/4
\mark "↓"
e2.
% The rehearsal mark will be centered above the Breath Mark
-\override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
+\override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
\key a \major
\clef treble
\time 4/4
@lilypond[verbatim,quote,relative=1]
% The rehearsal mark will be centered above the Key Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
e1
% The rehearsal mark will be centered above the Clef
\set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef bass
\mark "↓"
% The rehearsal mark will be centered above the Bar Line
\set Staff.explicitKeySignatureVisibility = #all-invisible
\set Staff.explicitClefVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
@lilypond[verbatim,quote,relative=1]
% The RehearsalMark will be centered above the Key Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\key a \major
\clef treble
\time 4/4
\mark "↓"
e1
% The RehearsalMark will be aligned with the left edge of the Key Signature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
+\once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
\mark "↓"
\key a \major
e1
% The RehearsalMark will be aligned with the right edge of the Key Signature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
+\once \override Score.KeySignature.break-align-anchor-alignment = #RIGHT
\key a \major
\mark "↓"
e1
@lilypond[verbatim,quote,relative=1]
% The RehearsalMark will be aligned with the left edge of the Key Signature
% and then shifted right by 3.5 staff-spaces
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
-\once \override Score.KeySignature #'break-align-anchor = #3.5
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
+\once \override Score.KeySignature.break-align-anchor = #3.5
\key a \major
\mark "↓"
e1
% The RehearsalMark will be aligned with the left edge of the Key Signature
% and then shifted left by 2 staff-spaces
-\once \override Score.KeySignature #'break-align-anchor = #-2
+\once \override Score.KeySignature.break-align-anchor = #-2
\key a \major
\mark "↓"
e1
@lilypond[verbatim,quote]
XinO = {
- \once \override NoteHead #'stencil = #ly:text-interface::print
- \once \override NoteHead #'text = \markup {
+ \once \override NoteHead.stencil = #ly:text-interface::print
+ \once \override NoteHead.text = \markup {
\combine
\halign #-0.7 \draw-circle #0.85 #0.2 ##f
\musicglyph #"noteheads.s2cross"
@lilypond[verbatim,quote,relative=1]
<<
{
- \once \override Tie
- #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
+ \once \override Tie.control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
e1 ~ e
}
\\
'(-0.5 . 0.5)))))
squareLineCircleSpace = {
- \override NoteHead #'stencil = #square-line-circle-space
+ \override NoteHead.stencil = #square-line-circle-space
}
smartSquareLineCircleSpace = {
\squareLineCircleSpace
- \override NoteHead #'Y-extent =
+ \override NoteHead.Y-extent =
#(ly:make-unpure-pure-container
ly:grob::stencil-height
(lambda (grob start end) (ly:grob::stencil-height grob)))
\new Voice \with { \remove "Stem_engraver" }
\relative c'' {
\squareLineCircleSpace
- cis4 ces cisis c
+ cis4 ces disis d
\smartSquareLineCircleSpace
- cis4 ces cisis c
+ cis4 ces disis d
}
@end lilypond
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
(parser location note)
(ly:music?)
#{
- \tweak NoteHead #'stencil #ly:text-interface::print
- \tweak NoteHead #'text
+ \tweak NoteHead.stencil #ly:text-interface::print
+ \tweak NoteHead.text
\markup \musicglyph #"custodes.mensural.u0"
- \tweak Stem #'stencil ##f
+ \tweak Stem.stencil ##f
#note
#})
(parser location padding tempotext)
(number? markup?)
#{
- \once \override Score.MetronomeMark #'padding = #padding
+ \once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c TODO: add tablature.
@tab
@lilypond[relative=2,notime]
\set Staff.autoBeaming = ##f
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
c1 c2 c8 c16
@end lilypond
@tab puntillos
@tab
@lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
c4. c4..
@end lilypond
@tab compás
@tab
@lilypond[relative=1]
-\override Staff.Clef #'stencil = #empty-stencil
+\override Staff.Clef.stencil = #empty-stencil
\time 3/4
s4_" "
\time 4/4
@tab silencio
@tab
@lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
r4 r8
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Notación de acordes
@section Notación de acordes
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:m c:m7
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:dim c:dim7
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:aug
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:maj c:maj7
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Anotaciones editoriales
@section Anotaciones editoriales
@lilypond[verbatim,quote,relative=2]
\set fontSize = #3
c4.-> d8---3
-\override NoteHead #'font-size = #-4
+\override NoteHead.font-size = #-4
c4.-> d8---3
-\override Script #'font-size = #2
+\override Script.font-size = #2
c4.-> d8---3
-\override Stem #'font-size = #-5
+\override Stem.font-size = #-5
c4.-> d8---3
@end lilypond
color válidos se encuentran relacionados en la @ref{Lista de colores}.
@lilypond[verbatim,quote,relative=2]
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
c4 c
-\override NoteHead #'color = #(x11-color 'LimeGreen)
+\override NoteHead.color = #(x11-color 'LimeGreen)
d
-\override Stem #'color = #blue
+\override Stem.color = #blue
e
@end lilypond
que se devuelve es el negro.
@lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
\set Staff.instrumentName = \markup {
\with-color #(x11-color 'navy) "Clarinet"
}
gis8 a
-\override Beam #'color = #(x11-color "medium turquoise")
+\override Beam.color = #(x11-color "medium turquoise")
gis a
-\override Accidental #'color = #(x11-color 'DarkRed)
+\override Accidental.color = #(x11-color 'DarkRed)
gis a
-\override NoteHead #'color = #(x11-color "LimeGreen")
+\override NoteHead.color = #(x11-color "LimeGreen")
gis a
% this is deliberate nonsense; note that the stems remain black
-\override Stem #'color = #(x11-color 'Boggle)
+\override Stem.color = #(x11-color 'Boggle)
b2 cis
@end lilypond
Scheme @code{rgb-color}.
@lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
\set Staff.instrumentName = \markup {
\with-color #(x11-color 'navy) "Clarinet"
}
-\override Stem #'color = #(rgb-color 0 0 0)
+\override Stem.color = #(rgb-color 0 0 0)
gis8 a
-\override Stem #'color = #(rgb-color 1 1 1)
+\override Stem.color = #(rgb-color 1 1 1)
gis8 a
-\override Stem #'color = #(rgb-color 0 0 0.5)
+\override Stem.color = #(rgb-color 0 0 0.5)
gis4 a
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Expresiones
@section Expresiones
crea un objeto @code{MultiMeasureRestText}.
@lilypond[verbatim,quote,relative=2]
-\override Script #'color = #red
-\override MultiMeasureRestText #'color = #blue
+\override Script.color = #red
+\override MultiMeasureRestText.color = #blue
a2\fermata r\fermata
R1\fermataMarkup
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Instrumentos de cuerda con trastes
@section Instrumentos de cuerda con trastes
fijando @code{restrainOpenStrings} al valor @code{#t}.
@lilypond[quote,ragged-right,verbatim]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \override Voice.StringNumber.stencil = ##f }
\new StaffGroup <<
\new Staff \relative c {
\clef "treble_8"
como sus alturas de sonido:
@lilypond[verbatim,quote]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \override Voice.StringNumber.stencil = ##f }
firstHarmonic = {
d'4\4\harmonic
g'4\3\harmonic
@lilypond[quote,ragged-right,verbatim]
<<
\new Voice \with {
- \override StringNumber #'stencil = ##f
+ \override StringNumber.stencil = ##f
} {
\clef "bass_8"
\relative c, {
}
}
\context Staff {
- \override Voice.TextScript
- #'(fret-diagram-details finger-code) = #'below-string
+ \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
\clef "treble_8"
<c e g c' e'>1^\markup {
\fret-diagram-terse #"x;3-3;2-2;o;1-1;o;"
}
\context Staff {
\clef "treble_8"
- \override Voice.TextScript
- #'(fret-diagram-details finger-code) = #'below-string
+ \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
<f, c f a c' f'>1^\markup {
\fret-diagram-verbose #'(
(place-fret 6 1)
\clef "treble_8"
b16 d g b e
\textSpannerDown
-\override TextSpanner #'(bound-details left text) = #"XII "
+\override TextSpanner.bound-details.left.text = #"XII "
g16\startTextSpan
b16 e g e b g\stopTextSpan
e16 b g d
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\clef "treble_8"
- \override Staff.NoteHead #'style = #'harmonic-mixed
+ \override Staff.NoteHead.style = #'harmonic-mixed
d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Entrada y salida generales
@chapter Entrada y salida generales
@item Dentro de @code{lyricmode} para separar todos los términos de las instrucciones
@code{\override} y @code{\set}. Concretamente, hay que usar espacios
alrededor del punto y el signo igual en instrucciones como
-@code{\override Score . LyricText #'font-size = #5} y antes y después
+@code{\override Score.LyricText.font-size = #5} y antes y después
de la instrucción completa.
@end itemize
\footnote \markup { \super "$" } #'(0.5 . 1)
\markup { \super "$" \italic " The second note" }
e c4
- \once \override Score.FootnoteItem #'annotation-line = ##f
+ \once \override Score.FootnoteItem.annotation-line = ##f
b-\footnote \markup \tiny "+" #'(0.1 . 0.1)
\markup { \super "+" \italic " Editorial" } \p
}
\header { tagline = ##f }
\relative c'' {
% footnotes may be added to chord constituents
- < \footnote #'(-1 . -3) #'Accidental "Another flat" aes
+ < \single\footnote #'(-1 . -3) "Another flat" Accidental aes
c
- \footnote #'(-1 . 0.5) #'Accidental "A flat" ees
+ \single\footnote #'(-1 . 0.5) "A flat" Accidental ees
>2
- \footnote #'(-1 . 2) #'Stem "A stem" ees2
+ \single\footnote #'(-1 . 2) "A stem" Stem ees2
}
}
@end lilypond
\header { tagline = ##f }
\relative c'' {
r1 |
- \footnote #'(-0.5 . -1) #'TimeSignature "Meter change" \default
+ \footnote #'(-0.5 . -1) "Meter change" Staff.TimeSignature
\time 3/4
- \footnote #'(1 . -1) #'Stem "Chord stem" \default
+ \footnote #'(1 . -1) "Chord stem" Stem
<c e g>4 q q
- \footnote #'(-0.5 . 1) #'BarLine "Bar line" \default
+ \footnote #'(-0.5 . 1) "Bar line" Staff.BarLine
q q
- \footnote #'(0.5 . -1) #'KeySignature "Key change" \default
+ \footnote #'(0.5 . -1) "Key change" Staff.KeySignature
\key c\minor
q
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Teclados y otros instrumentos de varios pentagramas
@section Teclados y otros instrumentos de varios pentagramas
\new Staff = "up" {
\voiceOne
% Make space for fingering in the cross-staff voice
- \once\override DynamicLineSpanner #'staff-padding = #3.4
+ \once\override DynamicLineSpanner.staff-padding = #3.4
e''2\p\< d''\>
c''1\!
}
@cindex modo
@cindex output-count
@cindex output-suffix
-@cindex parseStringResult
@cindex partCombineListener
@cindex pitchnames
@cindex toplevel-bookparts
@item mode
@item output-count
@item output-suffix
-@item parseStringResult
@item partCombineListener
@item pitchnames
@item toplevel-bookparts
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Percusión
@section Percusión
<< \new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics \nam
>>
\layout {
\context {
\Score
- \override LyricText #'font-family = #'typewriter
- \override BarNumber #'transparent =##T
+ \override LyricText.font-family = #'typewriter
+ \override BarNumber.transparent =##T
}
}
}
\new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
- \override StaffSymbol #'line-count = #2
- \override StaffSymbol #'staff-space = #2
- \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0)
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
+ \override StaffSymbol.line-count = #2
+ \override StaffSymbol.staff-space = #2
+ \override VerticalAxisGroup.minimum-Y-extent = #'(-3.0 . 4.0)
drumStyleTable = #timbales-style
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\remove "Bar_engraver"
\remove "Time_signature_engraver"
drumStyleTable = #congas-style
- \override StaffSymbol #'line-count = #2
+ \override StaffSymbol.line-count = #2
%% this sucks; it will lengthen stems.
- \override StaffSymbol #'staff-space = #2
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override StaffSymbol.staff-space = #2
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override StaffSymbol #'line-count = #2
+ \override StaffSymbol.line-count = #2
drumStyleTable = #bongos-style
%% this sucks; it will lengthen stems.
- \override StaffSymbol #'staff-space = #2
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override StaffSymbol.staff-space = #2
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\new DrumStaff \with{
\remove "Bar_engraver"
drumStyleTable = #percussion-style
- \override StaffSymbol #'line-count = #1
+ \override StaffSymbol.line-count = #1
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
woodstaff = {
% This defines a staff with only two lines.
% It also defines the positions of the two lines.
- \override Staff.StaffSymbol #'line-positions = #'(-2 3)
+ \override Staff.StaffSymbol.line-positions = #'(-2 3)
% This is necessary; if not entered, the barline would be too short!
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
}
\new DrumStaff {
@end lilypond
Observe que en este caso especial se debe alterar la longitud de la
-línea divisoria con @code{\override Staff.BarLine #'bar-extent #'(de . a)}.
+línea divisoria con @code{\override Staff.BarLine.bar-extent #'(de . a)}.
En caso contrario resulta demasiado corta. También debe definir las
posiciones de las dos líneas del pentagrama. Para más información
sobre estos delicados asuntos, consulte @ref{El símbolo del pentagrama}.
#(define mydrums '((tambourine default #t 0)))
tambustaff = {
- \override Staff.StaffSymbol #'line-positions = #'( 0 )
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.StaffSymbol.line-positions = #'( 0 )
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Tambourine"
}
#(define mydrums '((tamtam default #t 0)))
tamtamstaff = {
- \override Staff.StaffSymbol #'line-positions = #'( 0 )
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.StaffSymbol.line-positions = #'( 0 )
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Tamtam"
}
(cowbell default #t -2)))
bellstaff = {
- \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3)
+ \override DrumStaff.StaffSymbol.line-positions = #'(-2 3)
\set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Different Bells"
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Alturas
@example
\new Staff <<
- \accidentalStyle "voice"
+ \accidentalStyle voice
@{ @dots{} @}
>>
@end example
curso, use
@example
-\accidentalStyle #'StaffGroup "voice"
+\accidentalStyle StaffGroup.voice
@end example
Están contemplados los siguientes estilos de alteración. Para dar una
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicA
}
\context Staff = "down" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicB
}
>>
<<
\context Staff = "up" @{
%%% cambie la línea siguiente como desee:
- \accidentalStyle #'Score "default"
+ \accidentalStyle Score.default
\musicA
@}
\context Staff = "down" @{
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicA
}
\context Staff = "down" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "voice"
+ \accidentalStyle voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "voice"
+ \accidentalStyle voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern"
+ \accidentalStyle modern
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern"
+ \accidentalStyle modern
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-cautionary"
+ \accidentalStyle modern-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-cautionary"
+ \accidentalStyle modern-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-voice"
+ \accidentalStyle modern-voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-voice"
+ \accidentalStyle modern-voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-voice-cautionary"
+ \accidentalStyle modern-voice-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-voice-cautionary"
+ \accidentalStyle modern-voice-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "piano"
+ \accidentalStyle piano
\musicA
}
\context Staff = "down" {
@funindex piano-cautionary
-Igual que @code{\accidentalStyle "piano"} pero con las
+Igual que @code{\accidentalStyle piano} pero con las
alteraciones añadidas compuestas como de precaución.
@lilypond[quote]
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "piano-cautionary"
+ \accidentalStyle piano-cautionary
\musicA
}
\context Staff = "down" {
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern"
+ \accidentalStyle neo-modern
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern"
+ \accidentalStyle neo-modern
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-cautionary"
+ \accidentalStyle neo-modern-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-cautionary"
+ \accidentalStyle neo-modern-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-voice"
+ \accidentalStyle neo-modern-voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-voice"
+ \accidentalStyle neo-modern-voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-voice-cautionary"
+ \accidentalStyle neo-modern-voice-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-voice-cautionary"
+ \accidentalStyle neo-modern-voice-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\musicA
}
\context Staff = "down" {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\musicB
}
>>
<<
\context Staff = "up" {
\key fis \minor
- \accidentalStyle "teaching"
+ \accidentalStyle teaching
\musicA
}
\context Staff = "down" {
\key fis \minor
- \accidentalStyle "teaching"
+ \accidentalStyle teaching
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "no-reset"
+ \accidentalStyle no-reset
\musicA
}
\context Staff = "down" {
- \accidentalStyle "no-reset"
+ \accidentalStyle no-reset
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "forget"
+ \accidentalStyle forget
\musicA
}
\context Staff = "down" {
- \accidentalStyle "forget"
+ \accidentalStyle forget
\musicB
}
>>
@lilypond[quote]
{
- \accidentalStyle "modern"
+ \accidentalStyle modern
\time 2/4
\repeat volta 2 {
c'2
@lilypond[verbatim,quote]
forget = #(define-music-function (parser location music) (ly:music?) #{
- \accidentalStyle "forget"
+ \accidentalStyle forget
#music
- \accidentalStyle "modern"
+ \accidentalStyle modern
#})
{
- \accidentalStyle "modern"
+ \accidentalStyle modern
\time 2/4
\repeat volta 2 {
c'2
@lilypond[verbatim,quote,relative=2]
c4 b
-\override NoteHead #'style = #'cross
+\override NoteHead.style = #'cross
c4 b
-\revert NoteHead #'style
+\revert NoteHead.style
a b
-\override NoteHead #'style = #'harmonic
+\override NoteHead.style = #'harmonic
a b
-\revert NoteHead #'style
+\revert NoteHead.style
c4 d e f
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Duraciones
@section Duraciones
objetos del pentagrama.
@lilypond[verbatim,quote,ragged-right,relative=2]
-\override Tie #'layer = #-2
-\override Staff.TimeSignature #'layer = #-1
-\override Staff.KeySignature #'layer = #-1
-\override Staff.TimeSignature #'whiteout = ##t
-\override Staff.KeySignature #'whiteout = ##t
+\override Tie.layer = #-2
+\override Staff.TimeSignature.layer = #-1
+\override Staff.KeySignature.layer = #-1
+\override Staff.TimeSignature.whiteout = ##t
+\override Staff.KeySignature.whiteout = ##t
b2 b~
\time 3/4
\key a \major
\new Staff {
% These two lines are just to prettify this example
\time 16/1
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
% Print a maxima rest, equal to four breves
r\maxima
% Print a longa rest, equal to two breves
@lilypond[quote,verbatim,relative=2]
% This fails, as the wrong object name is specified
-\override TextScript #'padding = #5
+\override TextScript.padding = #5
R1^"wrong"
% This is the correct object name to be specified
-\override MultiMeasureRestText #'padding = #5
+\override MultiMeasureRestText.padding = #5
R1^"right"
@end lilypond
@lilypond[verbatim,relative=2,quote]
% Show all bar numbers
-\override Score.BarNumber #'break-visibility = #all-visible
+\override Score.BarNumber.break-visibility = #all-visible
c4 d e d
\cadenzaOn
c4 c d8[ d d] f4 g4.
mientras que las últimas cuatro fusas están a un tempo constante.
@lilypond[relative=1,verbatim,quote]
-\override Beam #'grow-direction = #LEFT
+\override Beam.grow-direction = #LEFT
\featherDurations #(ly:make-moment 2 1)
{ c16[ c c c c c c c] }
-\override Beam #'grow-direction = #RIGHT
+\override Beam.grow-direction = #RIGHT
\featherDurations #(ly:make-moment 2 3)
{ c32[ d e f] }
% revert to non-feathered beams
-\override Beam #'grow-direction = #'()
+\override Beam.grow-direction = #'()
{ g32[ a b c] }
@end lilypond
f1 \bar "."
g1 \bar "||"
a1 \bar ".|"
-b1 \bar ".|."
+b1 \bar ".."
c1 \bar "|.|"
d1 \bar "|."
e1
así como la barra de puntos y la discontinua:
@lilypond[quote,relative=1,verbatim]
-f1 \bar ":"
-g1 \bar "dashed"
+f1 \bar ";"
+g1 \bar "!"
a1
@end lilypond
y cinco tipos de barra de repetición:
@lilypond[quote,relative=1,verbatim]
-f1 \bar "|:"
-g1 \bar ":|:"
+f1 \bar ".|:"
+g1 \bar ":..:"
a1 \bar ":|.|:"
b1 \bar ":|.:"
-c1 \bar ":|"
+c1 \bar ":|."
e1
@end lilypond
c4 c c c \break
\bar "S"
c4 c c c
-\bar "|S"
+\bar "S-|"
c4 c c c \break
-\bar "|S"
+\bar "S-|"
c4 c c c
-\bar "S|"
+\bar "S-S"
c4 c c c \break
-\bar "S|"
+\bar "S-S"
c1
@end lilypond
@lilypond[quote,relative=2,verbatim]
c4 c c c
-\bar "||:"
+\bar ".|:-||"
c4 c c c \break
-\bar "||:"
+\bar ".|:-||"
c4 c c c
@end lilypond
@lilypond[quote,relative=2,verbatim]
c4 c c c
-\bar ":|S"
+\bar ":|.S"
c4 c c c \break
-\bar ":|S"
+\bar ":|.S"
c4 c c c
-\bar ":|S."
+\bar ":|.S-S"
c4 c c c \break
-\bar ":|S."
+\bar ":|.S-S"
c4 c c c
-\bar "S|:"
+\bar "S.|:-S"
c4 c c c \break
-\bar "S|:"
+\bar "S.|:-S"
c4 c c c
-\bar ".S|:"
+\bar "S.|:"
c4 c c c \break
-\bar ".S|:"
+\bar "S.|:"
c4 c c c
-\bar ":|S|:"
+\bar ":|.S.|:"
c4 c c c \break
-\bar ":|S|:"
+\bar ":|.S.|:"
c4 c c c
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
c4 c c c \break
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
c1
@end lilypond
sitios posibles:
@lilypond[verbatim,quote,relative=1]
-\override Score.BarNumber #'break-visibility = #'#(#t #t #t)
+\override Score.BarNumber.break-visibility = #'#(#t #t #t)
\set Score.currentBarNumber = #11
% Permit first bar number to be printed
\bar ""
@lilypond[quote,relative=2,verbatim]
<<
- \new Staff { e4 \bar "|:" \grace c16 d2. }
- \new Staff { c4 \bar "|:" d2. }
+ \new Staff { e4 \bar ".|:" \grace c16 d2. }
+ \new Staff { c4 \bar ".|:" d2. }
>>
@end lilypond
@lilypond[quote,relative=2,verbatim]
<<
- \new Staff { e4 \bar "|:" \grace c16 d2. }
- \new Staff { c4 \bar "|:" \grace s16 d2. }
+ \new Staff { e4 \bar ".|:" \grace c16 d2. }
+ \new Staff { c4 \bar ".|:" \grace s16 d2. }
>>
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translation status: post-GDP
durante la compilación. Este mensaje se puede suprimir mediante
@example
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
@end example
Sin embargo, esto no solamente suprime la advertencia sino que
@cindex colisiones, ignorar
@knownissues
-El uso de @code{\override NoteColumn #'ignore-collision = ##t} hace
+El uso de @code{\override NoteColumn.ignore-collision = ##t} hace
que las notas con distinta cabeza en voces diferentes se mezclen
incorrectamente.
@lilypond[quote,relative=1,verbatim]
\mergeDifferentlyHeadedOn
<< { c16 a' b a } \\ { c,2 } >>
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
<< { c16 a' b a } \\ { c,2 } >>
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@ignore
GDP TODO list
Could we add a sentence:
"Use instead the pair fontSize = #@var{N}
- \override StaffSymbol #'staff-space = #(magstep
+ \override StaffSymbol.staff-space = #(magstep
@var{N})
inside the Staff context to change the size of the font and the
distance between
@table @code
-@item blank-after-score-page-force
-@funindex blank-after-score-page-force
+@item blank-after-score-page-penalty
+@funindex blank-after-score-page-penalty
Penalización por tener una página vacía después del final de una
partitura y antes de la siguiente. De forma predeterminada, es menor
-que @code{blank-page-force}, de manera que preferimos páginas vacías
+que @code{blank-page-penalty}, de manera que preferimos páginas vacías
después de las partituras que páginas vacías dentro de una partitura.
-@item blank-last-page-force
-@funindex blank-last-page-force
+@item blank-last-page-penalty
+@funindex blank-last-page-penalty
Penalización por terminar la partitura sobre una página impar.
-@item blank-page-force
-@funindex blank-page-force
+@item blank-page-penalty
+@funindex blank-page-penalty
Penalización por tener una página vacía en medio de una partitura. No
se utiliza por parte de @code{ly:optimal-breaking} porque nunca
indent = 2\cm
\context @{
\StaffGroup
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #8
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #8
@}
\context @{
\Voice
- \override TextScript #'padding = #1
- \override Glissando #'thickness = #3
+ \override TextScript.padding = #1
+ \override Glissando.thickness = #3
@}
@}
@end example
\layout @{
\context @{
\Voice
- \override TextScript #'color = #magenta
- \override Glissando #'thickness = #1.5
+ \override TextScript.color = #magenta
+ \override Glissando.thickness = #1.5
@}
@}
@end example
variable_de_Layout = \layout @{
\context @{
\Voice
- \override NoteHead #'font-size = #4
+ \override NoteHead.font-size = #4
@}
@}
@end example
\variable_de_layout
\context @{
\Voice
- \override NoteHead #'color = #red
+ \override NoteHead.color = #red
@}
@}
@end example
De forma similar, los saltos de línea están normalmente prohibidos
cuando hay barras de corchea que cruzan la línea divisoria. Se puede
-cambiar este comportamiento fijando @code{\override Beam #'breakable =
+cambiar este comportamiento fijando @code{\override Beam.breakable =
##t}:
@lilypond[quote,ragged-right,relative=2,verbatim]
-\override Beam #'breakable = ##t
+\override Beam.breakable = ##t
c2. c8[ c | \break
c8 c] c2. |
@end lilypond
sobreescribir este comportamiento:
@example
-\override NonMusicalPaperColumn #'line-break-permission = ##f
-\override NonMusicalPaperColumn #'page-break-permission = ##f
+\override NonMusicalPaperColumn.line-break-permission = ##f
+\override NonMusicalPaperColumn.page-break-permission = ##f
@end example
Cuando se sobreescribe el valor de @code{line-break-permission} a
\layout {
\context {
\Score
- \override NonMusicalPaperColumn #'line-break-permission = ##f
- \override NonMusicalPaperColumn #'page-break-permission = ##f
+ \override NonMusicalPaperColumn.line-break-permission = ##f
+ \override NonMusicalPaperColumn.page-break-permission = ##f
}
}
}
\score {
\new Staff <<
\new Voice {
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
s1 * 2 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 35))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 35))
s1 * 3 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 70))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 70))
s1 * 6 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 105))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 105))
s1 * 5 \break
}
\new Voice {
#(define zero-space '((padding . -inf.0) (basic-distance . 0)))
alignToZero = \with {
- \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space
- \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #zero-space
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #zero-space
}
lowerCaseChords = \with {
chordNameLowercaseMinor = ##t
}
staffAffinityDown = \with {
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
labelContext =
#(define-music-function
\lowerCaseChords }
\context { \FretBoards \alignToZero \staffAffinityDown }
\context { \Score
- \override BarLine #'stencil = ##f
- \override DynamicText #'self-alignment-X = #-1
- \override FretBoard #'X-offset = #1.75
- \override InstrumentName #'minimum-Y-extent = #'(-2 . 2)
- \override InstrumentName #'extra-offset = #'(0 . -0.5)
- \override TextScript #'minimum-Y-extent = #'(-2 . 3)
- \override TimeSignature #'stencil = ##f
+ \override BarLine.stencil = ##f
+ \override DynamicText.self-alignment-X = #-1
+ \override FretBoard.X-offset = #1.75
+ \override InstrumentName.minimum-Y-extent = #'(-2 . 2)
+ \override InstrumentName.extra-offset = #'(0 . -0.5)
+ \override TextScript.minimum-Y-extent = #'(-2 . 3)
+ \override TimeSignature.stencil = ##f
}
}
@example
\new Staff \with @{
- \override VerticalAxisGroup #'default-staff-staff-spacing
- #'basic-distance = #10
+ \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
@} @{ @dots{} @}
\new Staff \with @{
- \override VerticalAxisGroup #'default-staff-staff-spacing =
+ \override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 10)
(minimum-distance . 9)
(padding . 1)
\layout @{
\context @{
\Staff
- \override VerticalAxisGroup #'default-staff-staff-spacing
- #'basic-distance = #10
+ \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
@}
@}
@end example
\layout {
\context {
\Staff
- \override VerticalAxisGroup #'default-staff-staff-spacing =
+ \override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 8)
(minimum-distance . 7)
(padding . 1))
% By setting 'padding to a negative value, staves can be made to
% collide. The lowest acceptable value for 'basic-distance is 0.
\new Staff \with {
- \override VerticalAxisGroup #'default-staff-staff-spacing =
+ \override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 3.5)
(padding . -10))
} { \clef bass g2 r | }
\layout {
\context {
\Score
- \override StaffGrouper #'staff-staff-spacing #'padding = #0
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #0
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #1
}
}
<<
\new PianoStaff \with {
- \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20
+ \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
} <<
\new Staff { c'1 }
\new Staff { c'1 }
\layout {
\context {
\Lyrics
- \override VerticalAxisGroup
- #'nonstaff-nonstaff-spacing #'stretchability = #1000
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing.stretchability = #1000
}
}
\new StaffGroup
<<
\new Staff \with {
- \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 30))
+ \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30))
} { c'1 }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #UP
+ \override VerticalAxisGroup.staff-affinity = #UP
} \lyricmode { up }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #CENTER
+ \override VerticalAxisGroup.staff-affinity = #CENTER
} \lyricmode { center }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
} \lyricmode { down }
\new Staff { c'1 }
>>
instrucción especial @code{\overrideProperty}:
@example
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((Y-offset . 40))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20)
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
(Y-offset . 40))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((alignment-distances . (15)))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((alignment-distances . (15)))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20)
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
(Y-offset . 40)
(alignment-distances . (15)))
@end example
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 40))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 80))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 80))
s1*5 \break
}
\new Voice { \repeat unfold 15 { c'4 c' c' c' } }
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 20)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 20)
(alignment-distances . (15)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 60)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
(alignment-distances . (15)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 100)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
(alignment-distances . (15)))
s1*5 \break
}
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0)
(alignment-distances . (30 10)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 60)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
(alignment-distances . (10 10)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 100)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
(alignment-distances . (10 30)))
s1*5 \break
}
@lilypond[quote,ragged-right,relative=2,verbatim]
c4_"Text"\pp
r2.
-\once \override TextScript #'outside-staff-priority = #1
+\once \override TextScript.outside-staff-priority = #1
c4_"Text"\pp % this time the text will be closer to the staff
r2.
% by setting outside-staff-priority to a non-number,
% we disable the automatic collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
-\once \override DynamicLineSpanner #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
+\once \override DynamicLineSpanner.outside-staff-priority = ##f
c4_"Text"\pp % now they will collide
@end lilypond
@code{outside-staff-padding}.
@lilypond[quote,ragged-right,relative=2,verbatim,staffsize=18]
-\once \override TextScript #'outside-staff-padding = #0
+\once \override TextScript.outside-staff-padding = #0
a'^"This text is placed very close to the note"
-\once \override TextScript #'outside-staff-padding = #3
+\once \override TextScript.outside-staff-padding = #3
c^"This text is padded away from the previous text"
c^"This text is placed close to the previous text"
@end lilypond
c''2
% setting outside-staff-horizontal-padding fixes this
R1
-\once \override TextScript #'outside-staff-horizontal-padding = #1
+\once \override TextScript.outside-staff-horizontal-padding = #1
c,,4^"Text"
c4
c''2
{
c'4 e''4 e'4 b'4 |
b'4 e''4 b'4 e''4 |
- \override Staff.NoteSpacing #'stem-spacing-correction = #1.5
- \override Staff.StaffSpacing #'stem-spacing-correction = #1.5
+ \override Staff.NoteSpacing.stem-spacing-correction = #1.5
+ \override Staff.StaffSpacing.stem-spacing-correction = #1.5
c'4 e''4 e'4 b'4 |
b'4 e''4 b'4 e''4 |
}
medida necesaria.
@example
- \override Score.NonMusicalPaperColumn #'padding = #10
+ \override Score.NonMusicalPaperColumn.padding = #10
@end example
No existe ningún rodeo para disminuir la magnitud de la separación.
\layout {
\context {
\Score
- \override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 1 16)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16)
}
}
}
\layout {
\context {
\Score
- \override SpacingSpanner #'uniform-stretching = ##t
+ \override SpacingSpanner.uniform-stretching = ##t
}
}
}
sin tener en cuenta las claves, líneas divisorias ni notas de adorno:
@lilypond[quote,ragged-right,relative=2,verbatim]
-\override Score.SpacingSpanner #'strict-note-spacing = ##t
+\override Score.SpacingSpanner.strict-note-spacing = ##t
\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] }
@end lilypond
@item @code{uniform-stretching}
@item @code{strict-note-spacing}
@item @code{\remove "Separating_line_group_engraver"}
-@item @code{\override PaperColumn #'used = ##t}
+@item @code{\override PaperColumn.used = ##t}
@end itemize
En los ejemplos que siguen, exploramos el uso de estos cinco ajustes
\context {
\Score
proportionalNotationDuration = #(ly:make-moment 1 20)
- \override SpacingSpanner #'uniform-stretching = ##t
+ \override SpacingSpanner.uniform-stretching = ##t
}
}
}
\new Staff {
\set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
- \override Score.SpacingSpanner #'strict-note-spacing = ##t
+ \override Score.SpacingSpanner.strict-note-spacing = ##t
c''8
c''8
c''8
frecuencia en las partituras proporcionales. Entre ellos están:
@itemize
-@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
+@item @code{\override SpacingSpanner.strict-grace-spacing = ##t}
@item @code{tupletFullLength = ##t}
-@item @code{\override Beam #'breakable = ##t}
-@item @code{\override Glissando #'breakable = ##t}
-@item @code{\override TextSpanner #'breakable = ##t}
+@item @code{\override Beam.breakable = ##t}
+@item @code{\override Glissando.breakable = ##t}
+@item @code{\override TextSpanner.breakable = ##t}
@item @code{\remove "Forbid_line_break_engraver" in the Voice context}
@end itemize
@lilypond[verbatim,quote,relative=1]
e4 c g\f c
-e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c
+e4 c g-\tweak X-offset #-2.7 -\tweak Y-offset #2.5 \f c
@end lilypond
@item
\layout {
\context {
\Score
- \override SpacingSpanner
- #'common-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 2)
}
}
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Notación de los pentagramas
@section Notación de los pentagramas
@lilypond[verbatim,quote,relative=2]
f4 d \stopStaff
-\override Staff.StaffSymbol #'line-count = #2
+\override Staff.StaffSymbol.line-count = #2
\startStaff g, e |
f'4 d \stopStaff
-\revert Staff.StaffSymbol #'line-count
+\revert Staff.StaffSymbol.line-count
\startStaff g, e |
@end lilypond
@lilypond[verbatim,quote,relative=2]
f4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(1 3 5 -1 -3)
+\override Staff.StaffSymbol.line-positions = #'(1 3 5 -1 -3)
\startStaff g, e |
f'4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(8 6.5 -6 -8 -0.5)
+\override Staff.StaffSymbol.line-positions = #'(8 6.5 -6 -8 -0.5)
\startStaff g, e
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'thickness = #3
+ \override StaffSymbol.thickness = #3
}
{ f4 d g, e }
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'thickness = #2
- \override StaffSymbol #'ledger-line-thickness = #'(0.5 . 0.4)
+ \override StaffSymbol.thickness = #2
+ \override StaffSymbol.ledger-line-thickness = #'(0.5 . 0.4)
}
{ f'4 a, a,, f }
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'ledger-positions = #'(-3 -2 -1 2 5 6)
+ \override StaffSymbol.ledger-positions = #'(-3 -2 -1 2 5 6)
}
{ f'4 a, a,, f }
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'ledger-extra = #4
+ \override StaffSymbol.ledger-extra = #4
}
{ f'4 a, d, f, }
@end lilypond
pauta).
@lilypond[fragment,quote,relative=1]
-\override Staff.StaffSymbol #'line-positions = #'(-8 0 2 4)
+\override Staff.StaffSymbol.line-positions = #'(-8 0 2 4)
d4 e f g
\stopStaff
\startStaff
-\override Staff.StaffSymbol #'ledger-positions = #'(-8 -6 (-4 -2) 0)
+\override Staff.StaffSymbol.ledger-positions = #'(-8 -6 (-4 -2) 0)
d4 e f g
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'staff-space = #1.5
+ \override StaffSymbol.staff-space = #1.5
}
{ f'4 d, g, e, }
@end lilypond
\remove "Time_signature_engraver"
alignAboveContext = #"main"
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
firstClef = ##f
}
{ e4 d f e }
<<
\new Staff = ossia \with {
\remove "Time_signature_engraver"
- \override Clef #'transparent = ##t
+ \override Clef.transparent = ##t
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
}
{ \stopStaff s1*6 }
<<
\new Staff = ossia \with {
\remove "Time_signature_engraver"
- \override Clef #'transparent = ##t
+ \override Clef.transparent = ##t
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
} \relative c'' {
R1*3
c4 e8 d c2
\layout {
\context {
\Staff \RemoveEmptyStaves
- \override VerticalAxisGroup #'remove-first = ##t
+ \override VerticalAxisGroup.remove-first = ##t
}
}
@end lilypond
grabador:
@example
-\override StaffSymbol #'stencil = ##f
-\override NoteHead #'no-ledgers = ##t
+\override StaffSymbol.stencil = ##f
+\override NoteHead.no-ledgers = ##t
@end example
Para ver los fallos y problemas conocidos, así como las advertencias
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Texto
@section Texto
ligeramente más rápido, puede utilizar
@example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
@end example
una nota hasta otra usando la siguiente sintaxis:
@lilypond[verbatim,quote,relative=2]
-\override TextSpanner #'(bound-details left text) = "rit."
+\override TextSpanner.bound-details.left.text = "rit."
b1\startTextSpan
e,\stopTextSpan
@end lilypond
@code{\markup}, como se describe en @ref{Formatear el texto}.
@lilypond[quote,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text) =
+\override TextSpanner.bound-details.left.text =
\markup { \upright "rit." }
b1\startTextSpan c
e,\stopTextSpan
es el cambio requerido a partir del tamaño predeterminado.
@lilypond[quote,verbatim,relative=2]
-\override Score.RehearsalMark #'font-family = #'typewriter
+\override Score.RehearsalMark.font-family = #'typewriter
\mark \markup "Ouverture"
-\override Voice.TextScript #'font-shape = #'italic
-\override Voice.TextScript #'font-series = #'bold
+\override Voice.TextScript.font-shape = #'italic
+\override Voice.TextScript.font-series = #'bold
d2.^\markup "Allegro"
-\override Voice.TextScript #'font-size = #-3
+\override Voice.TextScript.font-size = #-3
c4^smaller
@end lilypond
FontConfig, usando la siguiente sintaxis:
@lilypond[quote,verbatim,relative=2]
-\override Staff.TimeSignature #'font-name = #"Bitstream Charter"
-\override Staff.TimeSignature #'font-size = #2
+\override Staff.TimeSignature.font-name = #"Bitstream Charter"
+\override Staff.TimeSignature.font-size = #2
\time 3/4
a1_\markup {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Música vocal
@section Música vocal
siguiente:
@example
-\override Score.LyricText #'font-shape = #'italic
+\override Score.LyricText.font-shape = #'italic
@end example
@noindent
sino lo siguiente:
@example
-\override Score . LyricText #'font-shape = #'italic
+\override Score.LyricText.font-shape = #'italic
@end example
Los signos de puntuación, las letras con caracteres acentuados o de
<<
\new Lyrics = "lyrics" \with {
% lyrics above a staff should have this override
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff {
\new Voice = "melody" {
\new Lyrics = "sopranos"
\new Lyrics = "contraltos" \with {
% lyrics above a staff should have this override
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff {
\new Voice = "contraltos" {
@lilypond[relative=1,verbatim,quote,ragged-right]
{
c c c c
- \override Lyrics.LyricSpace #'minimum-distance = #1.0
+ \override Lyrics.LyricSpace.minimum-distance = #1.0
c c c c
}
\addlyrics {
\layout {
\context {
\Lyrics
- \override LyricSpace #'minimum-distance = #1.0
+ \override LyricSpace.minimum-distance = #1.0
}
}
}
funcionalidad:
@example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
@end example
Para hacer que el texto evite también las líneas divisorias, use
\Lyrics
\consists "Bar_engraver"
\consists "Separating_line_group_engraver"
- \override BarLine #'transparent = ##t
+ \override BarLine.transparent = ##t
@}
@}
@end example
\voiceOne
\times 2/3 {
% show associations clearly.
- \override NoteColumn #'force-hshift = #-3
+ \override NoteColumn.force-hshift = #-3
f8 f g
}
}
\layout {
\context {
\Score
- \override DynamicText #'direction = #UP
- \override DynamicLineSpanner #'direction = #UP
+ \override DynamicText.direction = #UP
+ \override DynamicLineSpanner.direction = #UP
}
}
}
% position name of cue-ing instrument just before the cue notes,
% and above the staff
\new CueVoice {
- \override InstrumentSwitch #'self-alignment-X = #RIGHT
+ \override InstrumentSwitch.self-alignment-X = #RIGHT
\set instrumentCueName = "Flute"
}
\cueDuring "flute" #UP { g4 bes4 }
\transposition c'
% position name of cue-ing instrument below the staff
\new CueVoice {
- \override InstrumentSwitch #'self-alignment-X = #RIGHT
- \override InstrumentSwitch #'direction = #DOWN
+ \override InstrumentSwitch.self-alignment-X = #RIGHT
+ \override InstrumentSwitch.direction = #DOWN
\set instrumentCueName = "Clar."
}
\cueDuring "clarinet" #DOWN { c4. g8 }
\score {
<<
\new Lyrics \with {
- \override LyricText #'font-shape = #'italic
- \override LyricText #'self-alignment-X = #LEFT
+ \override LyricText.font-shape = #'italic
+ \override LyricText.self-alignment-X = #LEFT
}
{ \dialogue }
\new Staff {
la altura, tomando las duraciones del ritmo hablado del texto.
@lilypond[verbatim,quote]
-stemOff = { \override Staff.Stem #'transparent = ##t }
+stemOff = { \override Staff.Stem.transparent = ##t }
\relative c' {
\stemOff
\bar "'"
a4 b c2
a4 b c2
-\bar ":"
+\bar ";"
a4 b c2
-\bar "dashed"
+\bar "!"
a4 b c2
\bar "||"
@end lilypond
@lilypond[verbatim,quote]
divisioMinima = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-minima
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
divisioMaior = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maior
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maior
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
divisioMaxima = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maxima
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maxima
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
finalis = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::finalis
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::finalis
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
\layout {
\context {
\Score
- \override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 2)
}
\context {
\Staff
<!--
- Translation of GIT committish: 55cabbf80554d813284d7f1dc0e08965e2b3644d
+ Translation of GIT committish: 427bb2b004227f3afc7de10dfd896fc375cbc320
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
we depend on an external entity here, which we cannot control. Suppose
-we go from 2.16.x to 2.17.x and put the documentation under "v2.17".
+we go from 2.15.x to 2.17.x and put the documentation under "v2.17".
For some time, Google won't have the new location in its index, so the
-search would get nothing. It would be better to keep "v2.16" in the
-search for a while and have a redirection from "v2.16" to "v2.17".
+search would get nothing. It would be better to keep "v2.15" in the
+search for a while and have a redirection from "v2.15" to "v2.17".
-->
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org/doc/v2.16 '
+ onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org/doc/v2.16 '
+ onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org/doc/v2.16 '
+ onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Búsqueda en Google">
<input type="text" name="brute_query" onfocus="this.value=''" value="Buscar">
+++ /dev/null
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Ejecutar LilyPond
predeterminado.
@lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
\new Staff { a }
@end lilypond
@lilypond[quote,verbatim,relative=2]
\new Staff {
- \override Staff.NoteHead #'color = #red
+ \override Staff.NoteHead.color = #red
a
}
@end lilypond
contextos se comporte como un pentagrama, insertando
@example
-\override VerticalAxisGroup #'staff-affinity = ##f
+\override VerticalAxisGroup.staff-affinity = ##f
@end example
@noindent
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 2b55f813985dd14f8e61011d1c76ecf00e45691e
+ Translation of GIT committish: 6ed88961376f5b129a41114a198342e2e5c2fb82
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c used for news about the upcoming release; see CG 10.2
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.3! @emph{23 de septiembre de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.3. Esta
+versión contiene el conjunto habitual de correcciones de fallos.
+Se recomienda enérgicamente a los usuarios normales que
+@strong{no} utilicen esta versión, sino la 2.16 estable en su
+lugar.
+
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.2! @emph{10 de septiembre de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.2. Esta
+versión contiene el conjunto habitual de correcciones de fallos.
+Se recomienda enérgicamente a los usuarios normales que
+@strong{no} utilicen esta versión, sino la 2.16 estable en su
+lugar.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.1! @emph{28 de agosto de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.1. Esta
+versión contiene el conjunto habitual de correcciones de fallos.
+Se recomienda enérgicamente a los usuarios normales que
+@strong{no} utilicen esta versión, sino la 2.16 estable en su
+lugar.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.0! @emph{26 de agosto de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.0. Esta
+versión contiene el conjunto habitual de correcciones de fallos.
+Se recomienda enérgicamente a los usuarios normales que
+@strong{no} utilicen esta versión, sino la 2.16 estable en su
+lugar.
+
+@newsEnd
+
+
@newsItem
@subsubheading ¡Lanzado Lilypond 2.16.0! @emph{24 de agosto de 2012}
Jean-Charles Malahieude, Till Paala, Yoshiki Sawada
@newsEnd
-
-
-@newsItem
-@subsubheading ¡Lanzado LilyPond 2.15.95! @emph{11 de agosto de 2012}
-
-Estamos encantados de anunciar el lanzamiento de LilyPond 2.15.95.
-Con esta edición, se congela el desarrollo sobre la versión 2.15 para
-la inminente versión estable 2.16 y queda abierta solamente a
-correcciones de fallos.
-
-Urgimos a todos los usuarios a que prueben esta versión para asegurar
-la máxima calidad de la próxima versión estable. Si descubre
-cualquier problema, le rogamos nos envíe @ref{Informes de fallos}.
-
-Las funcionaliades nuevas desde la versión 2.14.2 están relacionadas
-en el manual de @qq{Cambios} en la sección de la página web sobre
-@ref{Desarrollo}.
-
-@newsEnd
-
-
-@newsItem
-@subsubheading ¡Lanzado LilyPond 2.15.42! @emph{2 de agosto de 2012}
-
-Nos complace anunciar el lanzamiento de LilyPond 2.15.42. Esta versión
-contiene el conjunto habitual de correcciones de fallos.
-
-Se recomienda enérgicamente a los usuarios normales que @strong{no}
-utilicen esta versión, sino la 2.14 estable en su lugar. Tenga en
-cuenta que a causa de algunos bugs críticos, esta versión no es
-candidata al lanzamiento de la próxima versión estable.
-
-@newsEnd
-
-
-@newsItem
-@subsubheading El Informe LilyPond, número 27. @emph{2 de agosto 2012}
-
-Vuelve @emph{El informe LilyPond}, con una interesante incursión en
-las funcionalidades relacionadas con Scheme añadidas recientemente por
-el único desarrollador remunerado de nuestra comunidad, David Kastrup
-(gracias a sus @uref{http://lilypond.org/sponsoring.html, donaciones
-continuas}). En esta edición también se encuentra una panorámica
-sobre ciertos proyectos poco conocidos colaterales a LilyPond, y
-algunas otras noticias más ligeras.
-
-Acérquese y @uref{http://news.lilynet.net/?The-LilyPond-Report-27,
-lea ya el Informe LilyPond número 27}; ¡todos los comentarios y
-aportaciones serán calurosamente bien recibidos!
-
-@newsEnd
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 488508ff926c03b14d030ffc255ae19fc3ce1f50
+ Translation of GIT committish: 7612daa5e327fe019d441b9d458f88407dca3936
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
* don't duplicate entries from news-front.itexi
@end ignore
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.15.95! @emph{11 de agosto de 2012}
+
+Estamos encantados de anunciar el lanzamiento de LilyPond 2.15.95.
+Con esta edición, se congela el desarrollo sobre la versión 2.15 para
+la inminente versión estable 2.16 y queda abierta solamente a
+correcciones de fallos.
+
+Urgimos a todos los usuarios a que prueben esta versión para asegurar
+la máxima calidad de la próxima versión estable. Si descubre
+cualquier problema, le rogamos nos envíe @ref{Informes de fallos}.
+
+Las funcionaliades nuevas desde la versión 2.14.2 están relacionadas
+en el manual de @qq{Cambios} en la sección de la página web sobre
+@ref{Desarrollo}.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.15.42! @emph{2 de agosto de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.15.42. Esta versión
+contiene el conjunto habitual de correcciones de fallos.
+
+Se recomienda enérgicamente a los usuarios normales que @strong{no}
+utilicen esta versión, sino la 2.14 estable en su lugar. Tenga en
+cuenta que a causa de algunos bugs críticos, esta versión no es
+candidata al lanzamiento de la próxima versión estable.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading El Informe LilyPond, número 27. @emph{2 de agosto 2012}
+
+Vuelve @emph{El informe LilyPond}, con una interesante incursión en
+las funcionalidades relacionadas con Scheme añadidas recientemente por
+el único desarrollador remunerado de nuestra comunidad, David Kastrup
+(gracias a sus @uref{http://lilypond.org/sponsoring.html, donaciones
+continuas}). En esta edición también se encuentra una panorámica
+sobre ciertos proyectos poco conocidos colaterales a LilyPond, y
+algunas otras noticias más ligeras.
+
+Acérquese y @uref{http://news.lilynet.net/?The-LilyPond-Report-27,
+lea ya el Informe LilyPond número 27}; ¡todos los comentarios y
+aportaciones serán calurosamente bien recibidos!
+
+@newsEnd
+
@newsItem
@subsubheading Retirada de la versión candidata al lanzamiento @emph{11 de julio de 2012}
+++ /dev/null
-depth = ../..
-
-STEPMAKE_TEMPLATES=tex documentation
-LOCALSTEPMAKE_TEMPLATES = lilypond ly
-
-OUT_BIB_FILES = $(addprefix $(outdir)/, $(BIB_FILES))
-EXTRA_DIST_FILES= $(BIB_FILES) $(call src-wildcard,*.bst)
-BIB_FILES= $(call src-wildcard,*.bib)
-
-include $(depth)/make/stepmake.make
-
-# we no longer create bibliography files in this subdir,
-# since it needs to be done in the main Documentation/ dir.
-# all the below can _probably_ be removed, but I haven't
-# examined it in detail.
-# I think this is just going to wait until we switch to waf. -gp
-dvi: $(DVI_FILES) $(OUT_BIB_FILES)
-
-ps: $(PS_FILES)
-
-default:
-
-GENHTMLS = engraving colorado computer-notation
-OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html))
-
-ifeq ($(out),www)
-# temporary build fix; we don't know yet what's happening
-# to the literature index. -gp
-# local-WWW-2: $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html) lit-index.html)
-endif
-
-$(outdir)/%.bib: %.bib
- ln -f $< $@
-
-$(outdir)/%.html: %.bib
- BSTINPUTS=$(src-dir) $(buildscript-dir)/bib2html -o $@ $<
-
-local-clean:
- rm -f fonts.aux fonts.log feta*.tfm feta*.*pk
-
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Music engraving
@chapter Music engraving
\layout {
\context {
\Staff
- \override NoteSpacing #'stem-spacing-correction = #0.0
- \override NoteSpacing #'same-direction-correction = #0.0
- \override StaffSpacing #'stem-spacing-correction = #0.0
+ \override NoteSpacing.stem-spacing-correction = #0.0
+ \override NoteSpacing.same-direction-correction = #0.0
+ \override StaffSpacing.stem-spacing-correction = #0.0
}
}
}
\layout {
\context {
\Staff
- \override NoteSpacing #'stem-spacing-correction = #0.6
+ \override NoteSpacing.stem-spacing-correction = #0.6
}
}
}
<<
\new Staff \with {
fontSize = #-4
- \override StaffSymbol #'staff-space = #(magstep -4)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -4)
+ \override StaffSymbol.thickness = #(magstep -3)
}
\relative c' {
\global
\clef "bass"
<<
{
- \once \override DynamicText #'X-offset = #-3
+ \once \override DynamicText.X-offset = #-3
<ees g c>2.~->^\f
<ees g c>4.~ <ees g c>8
} \\ {
@lilypond
\relative c {
\clef bass
- \once \override Slur #'positions = #'(1.5 . 1)
+ \once \override Slur.positions = #'(1.5 . 1)
e8[( f] g[ a b d,)] r4
- \once \override Slur #'positions = #'(2 . 3)
+ \once \override Slur.positions = #'(2 . 3)
e8[( f] g[ a b d,)] r4
e8[( f] g[ a b d,)] r4
}
@lilypond
\relative c {
\clef bass
- \once \override Slur #'positions = #'(1.5 . 1)
+ \once \override Slur.positions = #'(1.5 . 1)
e8[(_"15.39" f] g[ a b d,)] r4
}
@end lilypond
@lilypond
\relative c {
\clef bass
- \once \override Slur #'positions = #'(2 . 3)
+ \once \override Slur.positions = #'(2 . 3)
e8[(_"13.08" f] g[ a b d,)] r4
}
@end lilypond
}
\context {
\PianoStaff
- \override StaffGrouper #'staff-staff-spacing #'padding = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #1
}
}
}
lower voices exchange positions temporarily:
@lilypond
-collide = \once \override NoteColumn #'force-hshift = #0
+collide = \once \override NoteColumn.force-hshift = #0
\score {
<<
\change Staff = "LH" \oneVoice
\stemUp g,( c}
r4
- \override Stem #'cross-staff = ##t
- \override Stem #'length = #12
+ \override Stem.cross-staff = ##t
+ \override Stem.length = #12
<fis, b>) r\fermata
}
>>
\score {
\relative c' {
\stemDown <e g b>4_>-\arpeggio
- \override Arpeggio #'direction = #RIGHT
+ \override Arpeggio.direction = #RIGHT
\stemUp <e g b>4^>-\arpeggio
}
\layout {
\context {
\Score
- \override SpacingSpanner #'spacing-increment = #3
- \override TimeSignature #'transparent = ##t
+ \override SpacingSpanner.spacing-increment = #3
+ \override TimeSignature.transparent = ##t
}
}
}
<<
\new Staff \fragment
\new Staff \with {
- \override Beam #'beam-thickness = #0.3
- \override Stem #'thickness = #0.5
- \override Bar #'thickness = #3.6
- \override Tie #'thickness = #2.2
- \override StaffSymbol #'thickness = #3.0
- \override Tie #'extra-offset = #'(0 . 0.3)
+ \override Beam.beam-thickness = #0.3
+ \override Stem.thickness = #0.5
+ \override Bar.thickness = #3.6
+ \override Tie.thickness = #2.2
+ \override StaffSymbol.thickness = #3.0
+ \override Tie.extra-offset = #'(0 . 0.3)
}
\fragment
>>
\set autoBeaming = ##f
\time 2/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
- \once \override NoteHead #'font-series = #'bold
+ \once \override NoteHead.stencil = #note-head::brew-ez-stencil
+ \once \override NoteHead.font-size = #-7
+ \once \override NoteHead.font-family = #'sans
+ \once \override NoteHead.font-series = #'bold
<d f g>4
- \once \override NoteHead #'style = #'cross
+ \once \override NoteHead.style = #'cross
<d f g>4
\applyOutput #'Voice #mc-squared
<d f g>4
\time 4/8
\key c \minor
<< {
- \revert Stem #'direction
+ \revert Stem.direction
\change Staff = down
\set subdivideBeams = ##t
g16.[
\clef bass
\key c \minor
\set subdivideBeams = ##f
- \override Stem #'french-beaming = ##t
- \override Beam #'beam-thickness = #0.3
- \override Stem #'thickness = #4.0
+ \override Stem.french-beaming = ##t
+ \override Beam.beam-thickness = #0.3
+ \override Stem.thickness = #4.0
g'16[ b16 fis16 g16]
<< \makeClusters {
as16 <as b>
<g b>
<g cis>
} \\ {
- \override Staff.Arpeggio #'arpeggio-direction =#down
+ \override Staff.Arpeggio.arpeggio-direction =#down
<cis, e, gis, b, cis>4\arpeggio
}
>> }
}
\context {
\PianoStaff
- \override StaffGrouper #'staff-staff-spacing #'padding = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #1
}
}
}
+++ /dev/null
-depth = ../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
-
-
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Interfaces for programmers
@chapter Interfaces for programmers
(parser location beg-end)
(pair?)
#@{
- \once \override Beam #'positions = #beg-end
+ \once \override Beam.positions = #beg-end
#@})
\relative c' @{
(parser location beg end)
(number? number?)
#{
- \once \override Beam #'positions = #(cons beg end)
+ \once \override Beam.positions = #(cons beg end)
#})
\relative c' {
(parser location mag)
(number?)
#{
- \override Stem #'length = #(* 7.0 mag)
- \override NoteHead #'font-size =
+ \override Stem.length = #(* 7.0 mag)
+ \override NoteHead.font-size =
#(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
#})
AltOff = {
- \revert Stem #'length
- \revert NoteHead #'font-size
+ \revert Stem.length
+ \revert NoteHead.font-size
}
\relative c' {
(parser location mag music)
(number? ly:music?)
#{
- \override Stem #'length = #(* 7.0 mag)
- \override NoteHead #'font-size =
+ \override Stem.length = #(* 7.0 mag)
+ \override NoteHead.font-size =
#(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
#music
- \revert Stem #'length
- \revert NoteHead #'font-size
+ \revert Stem.length
+ \revert NoteHead.font-size
#})
\relative c' {
(parser location)
()
(if (eq? #t (ly:get-option 'display-bar-numbers))
- #@{ \once \override Score.BarNumber #'break-visibility = ##f #@}
+ #@{ \once \override Score.BarNumber.break-visibility = ##f #@}
#@{#@}))
@end example
set at fixed values with @code{\override}, e.g.
@example
-\override Stem #'thickness = #2.0
+\override Stem.thickness = #2.0
@end example
Properties can also be set to a Scheme procedure,
@lilypond[fragment,verbatim,quote,relative=2]
-\override Stem #'thickness = #(lambda (grob)
+\override Stem.thickness = #(lambda (grob)
(if (= UP (ly:grob-property grob 'direction))
2.0
7.0))
TODO: the example for this section is ill-chosen since
@example
-F = -\tweak #'font-size #-3 -\flageolet
+F = -\tweak font-size #-3 -\flageolet
@end example
(note the @samp{-} marking it as a post event) will actually work fine
for the stated purpose. Until this section gets a rewrite, let's
inflexibility. For example, the following produces a syntax error.
@example
-F = \tweak #'font-size #-3 -\flageolet
+F = \tweak font-size #-3 -\flageolet
\relative c'' @{
c4^\F c4_\F
(ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
\relative c'' {
- \override Tie #'after-line-breaking =
+ \override Tie.after-line-breaking =
#my-callback
c1 ~ \break
c2 ~ c
@example
\overrideProperty
-#"Score.NonMusicalPaperColumn" % Grob name
+Score.NonMusicalPaperColumn % Grob name
#'line-break-system-details % Property name
#'((next-padding . 20)) % Value
@end example
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Scheme tutorial
@chapter Scheme tutorial
There are also compound data types in Scheme. The types commonly used in
LilyPond programming include pairs, lists, alists, and hash tables.
-@subheading Pairs
+@menu
+* Pairs::
+* Lists::
+* Association lists (alists)::
+* Hash tables::
+@end menu
+
+@node Pairs
+@unnumberedsubsubsec Pairs
The foundational compound data type of Scheme is the @code{pair}. As
might be expected from its name, a pair is two values glued together.
Abelson, see
@uref{http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-14.html#footnote_Temp_133}
-@subheading Lists
+@node Lists
+@unnumberedsubsubsec Lists
A very common Scheme data structure is the @emph{list}. Formally, a
list is defined as either the empty list (represented as @code{'()},
a dialect of lisp, where @q{lisp} is an abbreviation for
@q{List Processing}. Scheme expressions are all lists.
-@subheading Association lists (alists)
+@node Association lists (alists)
+@unnumberedsubsubsec Association lists (alists)
A special type of list is an @emph{association list} or @emph{alist}.
An alist is used to store data for easy retrieval.
Alists are widely used in LilyPond to store properties and other data.
-@subheading Hash tables
+@node Hash tables
+@unnumberedsubsubsec Hash tables
A data structure that is used occasionally in LilyPond. A hash table
is similar to an array, but the indexes to the array can be any type
value resulting from their execution. They can also manipulate
variables defined outside of the procedure.
-@subheading Defining procedures
+@menu
+* Defining procedures::
+* Predicates::
+* Return values::
+@end menu
+
+@node Defining procedures
+@unnumberedsubsubsec Defining procedures
Procedures are defined in Scheme with define
15/2
@end lisp
-@subheading Predicates
+@node Predicates
+@unnumberedsubsubsec Predicates
Scheme procedures that return boolean values are often called
@emph{predicates}. By convention (but not necessity), predicate names
#f
@end lisp
-@subheading Return values
+@node Return values
+@unnumberedsubsubsec Return values
Scheme procedures always return a return value, which is the value
of the last expression executed in the procedure. The return
@node Scheme conditionals
@subsection Scheme conditionals
-@subheading if
+@menu
+* if::
+* cond::
+@end menu
+
+@node if
+@unnumberedsubsubsec if
Scheme has an @code{if} procedure:
"a is not greater than b"
@end lisp
-@subheading cond
+@node cond
+@unnumberedsubsubsec cond
Another conditional procedure in scheme is @code{cond}:
this is:
@example
-\override Stem #'thickness = #2.6
+\override Stem.thickness = #2.6
@end example
This instruction adjusts the appearance of stems. An alist entry
@node LilyPond compound variables
@subsection LilyPond compound variables
-@subheading Offsets
+@menu
+* Offsets::
+* Fractions::
+* Extents::
+* Property alists::
+* Alist chains::
+@end menu
+
+@node Offsets
+@unnumberedsubsubsec Offsets
Two-dimensional offsets (X and Y coordinates) are stored as @emph{pairs}.
The @code{car} of the offset is the X coordinate, and the @code{cdr} is
the Y coordinate.
@example
-\override TextScript #'extra-offset = #'(1 . 2)
+\override TextScript.extra-offset = #'(1 . 2)
@end example
This assigns the pair @code{(1 . 2)} to the @code{extra-offset}
Procedures for working with offsets are found in @file{scm/lily-library.scm}.
-@subheading Fractions
+@node Fractions
+@unnumberedsubsubsec Fractions
Fractions as used by LilyPond are again stored as @emph{pairs}, this
time of unsigned integers. While Scheme can represent rational numbers
means @code{(2 . 4)} in Scheme, and @code{#2/4} in LilyPond means
@code{1/2} in Scheme.
-@subheading Extents
+@node Extents
+@unnumberedsubsubsec Extents
Pairs are also used to store intervals, which represent a range of numbers
from the minimum (the @code{car}) to the maximum (the @code{cdr}).
@file{scm/lily-library.scm}. These procedures should be used when possible
to ensure consistency of code.
-@subheading Property alists
+@node Property alists
+@unnumberedsubsubsec Property alists
A property alist is a LilyPond data structure that is an alist whose
keys are properties and whose values are Scheme expressions that give
LilyPond properties are Scheme symbols, such as @code{'thickness}.
-@subheading Alist chains
+@node Alist chains
+@unnumberedsubsubsec Alist chains
An alist chain is a list containing property alists.
We have seen how LilyPond output can be heavily modified using
commands like
-@code{\override TextScript #'extra-offset = ( 1 . -1)}. But
+@code{\override TextScript.extra-offset = ( 1 . -1)}. But
we have even more power if we use Scheme. For a full explanation
of this, see the @ref{Scheme tutorial}, and
@ref{Interfaces for programmers}.
@lilypond[quote,verbatim,ragged-right]
padText = #(define-music-function (parser location padding) (number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
tempoPadded = #(define-music-function (parser location padding tempotext)
(number? markup?)
#{
- \once \override Score.MetronomeMark #'padding = #padding
+ \once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
ISOLANG = fr
depth = ../..
-SUBDIRS = web learning notation texidocs usage included essay extending
STEPMAKE_TEMPLATES = documentation texinfo
LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Jean-Charles Malahieude, John Mandereau, Gauvain Pocentek
\layout {
\context {
\Staff
- \override NoteSpacing #'stem-spacing-correction = #0.0
- \override NoteSpacing #'same-direction-correction = #0.0
- \override StaffSpacing #'stem-spacing-correction = #0.0
+ \override NoteSpacing.stem-spacing-correction = #0.0
+ \override NoteSpacing.same-direction-correction = #0.0
+ \override StaffSpacing.stem-spacing-correction = #0.0
}
}
}
\layout {
\context {
\Staff
- \override NoteSpacing #'stem-spacing-correction = #0.6
+ \override NoteSpacing.stem-spacing-correction = #0.6
}
}
}
<<
\new Staff \with {
fontSize = #-4
- \override StaffSymbol #'staff-space = #(magstep -4)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -4)
+ \override StaffSymbol.thickness = #(magstep -3)
}
\relative c' {
\global
\clef "bass"
<<
{
- \once \override DynamicText #'X-offset = #-3
+ \once \override DynamicText.X-offset = #-3
<ees g c>2.~->^\f
<ees g c>4.~ <ees g c>8
} \\ {
@lilypond
\relative c {
\clef bass
- \once \override Slur #'positions = #'(1.5 . 1)
+ \once \override Slur.positions = #'(1.5 . 1)
e8[( f] g[ a b d,)] r4
- \once \override Slur #'positions = #'(2 . 3)
+ \once \override Slur.positions = #'(2 . 3)
e8[( f] g[ a b d,)] r4
e8[( f] g[ a b d,)] r4
}
@lilypond
\relative c {
\clef bass
- \once \override Slur #'positions = #'(1.5 . 1)
+ \once \override Slur.positions = #'(1.5 . 1)
e8[(_"15.39" f] g[ a b d,)] r4
}
@end lilypond
@lilypond
\relative c {
\clef bass
- \once \override Slur #'positions = #'(2 . 3)
+ \once \override Slur.positions = #'(2 . 3)
e8[(_"13.08" f] g[ a b d,)] r4
}
@end lilypond
}
\context {
\PianoStaff
- \override StaffGrouper #'staff-staff-spacing #'padding = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #1
}
}
}
@c KEEP LY
@lilypond
-collide = \once \override NoteColumn #'force-hshift = #0
+collide = \once \override NoteColumn.force-hshift = #0
\score {
<<
\change Staff = "LH" \oneVoice
\stemUp g,( c}
r4
- \override Stem #'cross-staff = ##t
- \override Stem #'length = #12
+ \override Stem.cross-staff = ##t
+ \override Stem.length = #12
<fis, b>) r\fermata
}
>>
\score {
\relative c' {
\stemDown <e g b>4_>-\arpeggio
- \override Arpeggio #'direction = #RIGHT
+ \override Arpeggio.direction = #RIGHT
\stemUp <e g b>4^>-\arpeggio
}
\layout {
\context {
\Score
- \override SpacingSpanner #'spacing-increment = #3
- \override TimeSignature #'transparent = ##t
+ \override SpacingSpanner.spacing-increment = #3
+ \override TimeSignature.transparent = ##t
}
}
}
<<
\new Staff \fragment
\new Staff \with {
- \override Beam #'beam-thickness = #0.3
- \override Stem #'thickness = #0.5
- \override Bar #'thickness = #3.6
- \override Tie #'thickness = #2.2
- \override StaffSymbol #'thickness = #3.0
- \override Tie #'extra-offset = #'(0 . 0.3)
+ \override Beam.beam-thickness = #0.3
+ \override Stem.thickness = #0.5
+ \override Bar.thickness = #3.6
+ \override Tie.thickness = #2.2
+ \override StaffSymbol.thickness = #3.0
+ \override Tie.extra-offset = #'(0 . 0.3)
}
\fragment
>>
\set autoBeaming = ##f
\time 2/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
- \once \override NoteHead #'font-series = #'bold
+ \once \override NoteHead.stencil = #note-head::brew-ez-stencil
+ \once \override NoteHead.font-size = #-7
+ \once \override NoteHead.font-family = #'sans
+ \once \override NoteHead.font-series = #'bold
<d f g>4
- \once \override NoteHead #'style = #'cross
+ \once \override NoteHead.style = #'cross
<d f g>4
\applyOutput #'Voice #mc-squared
<d f g>4
\time 4/8
\key c \minor
<< {
- \revert Stem #'direction
+ \revert Stem.direction
\change Staff = down
\set subdivideBeams = ##t
g16.[
\clef bass
\key c \minor
\set subdivideBeams = ##f
- \override Stem #'french-beaming = ##t
- \override Beam #'beam-thickness = #0.3
- \override Stem #'thickness = #4.0
+ \override Stem.french-beaming = ##t
+ \override Beam.beam-thickness = #0.3
+ \override Stem.thickness = #4.0
g'16[ b16 fis16 g16]
<< \makeClusters {
as16 <as b>
<g b>
<g cis>
} \\ {
- \override Staff.Arpeggio #'arpeggio-direction =#down
+ \override Staff.Arpeggio.arpeggio-direction =#down
<cis, e, gis, b, cis>4\arpeggio
}
>> }
}
\context {
\PianoStaff
- \override StaffGrouper #'staff-staff-spacing #'padding = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #1
}
}
}
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Gilles Thibault
(parser location beg-end)
(pair?)
#@{
- \once \override Beam #'positions = #beg-end
+ \once \override Beam.positions = #beg-end
#@})
\relative c' @{
(parser location beg end)
(number? number?)
#{
- \once \override Beam #'positions = #(cons beg end)
+ \once \override Beam.positions = #(cons beg end)
#})
\relative c' {
(parser location mag)
(number?)
#{
- \override Stem #'length = #(* 7.0 mag)
- \override NoteHead #'font-size =
+ \override Stem.length = #(* 7.0 mag)
+ \override NoteHead.font-size =
#(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
#})
AltOff = {
- \revert Stem #'length
- \revert NoteHead #'font-size
+ \revert Stem.length
+ \revert NoteHead.font-size
}
\relative c' {
(parser location mag music)
(number? ly:music?)
#{
- \override Stem #'length = #(* 7.0 mag)
- \override NoteHead #'font-size =
+ \override Stem.length = #(* 7.0 mag)
+ \override NoteHead.font-size =
#(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
#music
- \revert Stem #'length
- \revert NoteHead #'font-size
+ \revert Stem.length
+ \revert NoteHead.font-size
#})
\relative c' {
(parser location)
()
(if (eq? #t (ly:get-option 'display-bar-numbers))
- #@{ \once \override Score.BarNumber #'break-visibility = ##f #@}
+ #@{ \once \override Score.BarNumber.break-visibility = ##f #@}
#@{#@}))
@end example
ici@tie{}:
@example
-\override Stem #'thickness = #2.0
+\override Stem.thickness = #2.0
@end example
Une procédure Scheme peut aussi se charger de modifier des
propriétés@tie{}:
@lilypond[fragment,verbatim,quote,relative=2]
-\override Stem #'thickness = #(lambda (grob)
+\override Stem.thickness = #(lambda (grob)
(if (= UP (ly:grob-property grob 'direction))
2.0
7.0))
À REVOIR : l'exemple de cette rubrique n'est pas des plus judicieux puisque
@example
-F = -\tweak #'font-size #-3 -\flageolet
+F = -\tweak font-size #-3 -\flageolet
@end example
(notez le @samp{-} qui qualifie d'événement postérieur) fonctionne
correctement dans ce cas d'espèce. En attendant un remaniement de cette
sa syntaxe. Par exemple, le code suivant produit une erreur.
@example
-F = \tweak #'font-size #-3 -\flageolet
+F = \tweak font-size #-3 -\flageolet
\relative c'' @{
c4^\F c4_\F
(ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
\relative c'' {
- \override Tie #'after-line-breaking =
+ \override Tie.after-line-breaking =
#my-callback
c1 ~ \break
c2 ~ c
@example
\overrideProperty
-#"Score.NonMusicalPaperColumn" % Nom de l'objet
+Score.NonMusicalPaperColumn % Nom de l'objet
#'line-break-system-details % Nom de la propriété
#'((next-padding . 20)) % Valeur
@end example
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Jean-Charles Malahieude
LilyPond :
@example
-\override Stem #'thickness = #2.6
+\override Stem.thickness = #2.6
@end example
Cette instruction ajuste l'apparence des hampes. Une entrée
(coordonnée Y).
@example
-\override TextScript #'extra-offset = #'(1 . 2)
+\override TextScript.extra-offset = #'(1 . 2)
@end example
Cette clause affecte la paire @code{(1 . 2)} à la propriété
We have seen how LilyPond output can be heavily modified using
commands like
-@code{\override TextScript #'extra-offset = ( 1 . -1)}. But
+@code{\override TextScript.extra-offset = ( 1 . -1)}. But
we have even more power if we use Scheme. For a full explanation
of this, see the @ref{Scheme tutorial}, and
@ref{Interfaces for programmers}.
@lilypond[quote,verbatim,ragged-right]
padText = #(define-music-function (parser location padding) (number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
tempoPadded = #(define-music-function (parser location padding tempotext)
(number? markup?)
#{
- \once \override Score.MetronomeMark #'padding = #padding
+ \once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
+++ /dev/null
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: John Mandereau
\\ % Voice two
{
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'ignore-collision = ##t
+ \once \override NoteColumn.ignore-collision = ##t
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\ % No voice three
\\ % Voice four
{
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
\\ % Voice two
{ \voiceTwoStyle
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'ignore-collision = ##t
+ \once \override NoteColumn.ignore-collision = ##t
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\ % No Voice three (we want stems down)
\\ % Voice four
{ \voiceThreeStyle
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
@}
>> % fin du contexte de la portée ManuelUn
\new Staff = "ManuelDeux" \with @{
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
@} <<
\ArmureMetrique
\clef "bass"
}
>> % end ManualOne Staff context
\new Staff = "ManualTwo" \with {
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
} <<
\keyTime
\clef "bass"
@lilypond[quote,verbatim,ragged-right]
dolce = \markup { \italic \bold dolce }
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
fthenp =_\markup {
\dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}
violin = \relative c'' @{
\repeat volta 2 @{
c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
- \once \override TextScript #'padding = #5.0
+ \once \override TextScript.padding = #5.0
c4.^"hi there!" d8 e' f g d |
c,4.\markup @{
\dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Valentin Villenave, Nicolas Klutchnikoff, Damien Heurtebise
@c Translation checkers: Jean-Charles Malahieude, John Mandereau
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
g4 a b c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
b4 c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\once \override NoteHead #'color = #green
+\once \override NoteHead.color = #green
g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
b c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>4
-\once \override NoteHead #'font-size = #-3
+\once \override NoteHead.font-size = #-3
<c e g>4
<c e g>4
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>4
-<c \tweak #'font-size #-3 e g>4
+<c \tweak font-size #-3 e g>4
@end lilypond
Vous noterez que la syntaxe de @code{\tweak} est différente de
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
a4^"Black"
- -\tweak #'color #red ^"Red"
- -\tweak #'color #green _"Green"
+ -\tweak color #red ^"Red"
+ -\tweak color #green _"Green"
@end lilypond
@noindent
jusqu'à l'événement originel :
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-<\tweak Accidental #'color #red cis4
- \tweak Accidental #'color #green es
+<\tweak Accidental.color #red cis4
+ \tweak Accidental.color #green es
g>
@end lilypond
@cindex couleur, exemple d'utilisation de la propriété
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
+\tweak direction #up
\times 4/3 {
- \tweak #'color #red
+ \tweak color #red
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
@c See issue 509
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
\times 2/3 { c8[ c c] }
-\once \override TupletNumber
- #'text = #tuplet-number::calc-fraction-text
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
\times 2/3 {
c8[ c]
c8[ c]
- \once \override TupletNumber #'transparent = ##t
+ \once \override TupletNumber.transparent = ##t
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
}
Nous obtenons :
@example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
@end example
N'oublions pas le @code{#'} qui doit précéder le nom de la propriété et
\time 6/8
{
% Increase thickness of all following slurs from 1.2 to 5.0
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
r4 bes8 bes[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
{
r4 bes8
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes8[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
{
r4 bes8
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes[( g]) g |
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
g8[( es]) es d[( f]) as |
as8 g
}
{
r4 bes8
% Increase thickness of all following slurs from 1.2 to 5.0
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
bes[( g]) g |
g8[( es]) es
% Revert thickness of all following slurs to default of 1.2
- \revert Slur #'thickness
+ \revert Slur.thickness
d8[( f]) as |
as8 g
}
est :
@example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
@end example
@noindent
as8 g
}
\addlyrics {
- \override LyricText #'font-shape = #'italic
+ \override LyricText.font-shape = #'italic
The man who | feels love's sweet e -- | mo -- tion
}
}
correcte est donc :
@example
-\override Lyrics . LyricText #'font-shape = #'italic
+\override Lyrics.LyricText.font-shape = #'italic
@end example
@warning{Dans la saisie des paroles, pensez à toujours laisser une
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override BarLine #'stencil = ##f
+ \override BarLine.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'stencil = ##f
+ \override Staff.BarLine.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,verbatim,relative=2]
{
c4 c
- \once \override NoteHead #'stencil = #point-stencil
+ \once \override NoteHead.stencil = #point-stencil
c4 c
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+ \override Staff.BarLine.break-visibility = #'#(#f #f #f)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'transparent = ##t
+ \override Staff.TimeSignature.transparent = ##t
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #white
+ \override Staff.BarLine.color = #white
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #(x11-color 'white)
+ \override Staff.BarLine.color = #(x11-color 'white)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+ \override Staff.BarLine.color = #(rgb-color 1 1 1)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.StaffSymbol #'color = #(x11-color 'grey30)
- \override Staff.TimeSignature #'color = #(x11-color 'grey60)
- \override Staff.Clef #'color = #(x11-color 'grey60)
- \override Voice.NoteHead #'color = #(x11-color 'grey85)
- \override Voice.Stem #'color = #(x11-color 'grey85)
- \override Staff.BarLine #'color = #(x11-color 'grey10)
+ \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+ \override Staff.TimeSignature.color = #(x11-color 'grey60)
+ \override Staff.Clef.color = #(x11-color 'grey60)
+ \override Voice.NoteHead.color = #(x11-color 'grey85)
+ \override Voice.Stem.color = #(x11-color 'grey85)
+ \override Staff.BarLine.color = #(x11-color 'grey10)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
alignAboveContext = #"main"
}
{
- \override Staff.Clef #'stencil = ##f
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.Clef.stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
{ f8 f c }
}
>>
\new Staff \with {
alignAboveContext = #"main"
% Don't print clefs in this staff
- \override Clef #'stencil = ##f
+ \override Clef.stencil = ##f
% Don't print time signatures in this staff
- \override TimeSignature #'stencil = ##f
+ \override TimeSignature.stencil = ##f
}
{ f8 f c }
>>
celle-ci pour les têtes de notes (@code{NoteHead}) :
@example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
@end example
soit nous changeons la taille de toutes les polices à la fois grâce à la
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \override Clef.stencil = ##f
+ \override TimeSignature.stencil = ##f
% Reduce all font sizes by ~24%
fontSize = #-2
}
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \override Clef.stencil = ##f
+ \override TimeSignature.stencil = ##f
fontSize = #-2
% Reduce stem length and line spacing to match
- \override StaffSymbol #'staff-space = #(magstep -2)
+ \override StaffSymbol.staff-space = #(magstep -2)
}
{ f8 f c }
>>
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
a4 g c a |
-\override Stem #'direction = #DOWN
+\override Stem.direction = #DOWN
a4 g c a |
-\override Stem #'direction = #UP
+\override Stem.direction = #UP
a4 g c a |
-\revert Stem #'direction
+\revert Stem.direction
a4 g c a |
@end lilypond
@lilypond[quote,verbatim,relative=2]
c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #DOWN
+\override Fingering.direction = #DOWN
c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #UP
+\override Fingering.direction = #UP
c4-5 a-3 f-1 c'-5 |
@end lilypond
@code{Fingering} étant @code{-5}, essayons @code{-7} :
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
+\override Fingering.font-size = #-7
\set fingeringOrientations = #'(left)
<f-2>4
<c-1 e-2 g-3 b-5>4
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
% Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% Place dynamics above staff
\dynamicUp
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
% Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% Place dynamics above staff
\dynamicUp
% Place following Ottava Bracket below Text Spanners
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
% Start Ottava Bracket
\ottava #1
c'4 \startTextSpan
@lilypond[quote,verbatim,relative=2]
c4( c^\markup { \tiny \sharp } d4.) c8 |
c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
c4^\markup { \tiny \sharp } d4.) c8 |
-\once \override Slur #'outside-staff-priority = #500
+\once \override Slur.outside-staff-priority = #500
c4( c^\markup { \tiny \sharp } d4.) c8 |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
c2^"Text1"
c2^"Text2" |
-\once \override TextScript #'outside-staff-priority = #500
+\once \override TextScript.outside-staff-priority = #500
c2^"Text3"
c2^"Text4" |
@end lilypond
R1 |
% Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
c,,2^"Long Text " c'' |
R1 |
% Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
\textLengthOn % and turn on textLengthOn
c,,2^"Long Text " % Spaces at end are honored
c''2 |
indications de nuances est :
@example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
@end example
@noindent
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
a4\f b\mf c\mp b\p |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
% Extend width by 1 staff space
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
c2\fermata
-\override Script #'padding = #3
+\override Script.padding = #3
b2\fermata
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
% This will not work, see below:
-\override MetronomeMark #'padding = #3
+\override MetronomeMark.padding = #3
\tempo 4=120
c1 |
% This works:
-\override Score.MetronomeMark #'padding = #3
+\override Score.MetronomeMark.padding = #3
\tempo 4=80
d1 |
@end lilypond
\relative c'' {
c4
% This prints a sesquisharp but the spacing is too small
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4 c
% This improves the spacing
- \once \override Score.AccidentalPlacement #'right-padding = #0.6
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Score.AccidentalPlacement.right-padding = #0.6
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4 |
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
% Extend width by 1 unit
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
% Align dynamics to a base line 2 units above staff
-\override DynamicLineSpanner #'staff-padding = #2
+\override DynamicLineSpanner.staff-padding = #2
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=3]
\voiceOne
<a\2>
-\once \override StringNumber #'self-alignment-X = #RIGHT
+\once \override StringNumber.self-alignment-X = #RIGHT
<a\2>
@end lilypond
<<
{ c4 c c c }
\\
- \override MultiMeasureRest #'staff-position = #-8
+ \override MultiMeasureRest.staff-position = #-8
{ R1 }
>>
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
\stemUp
f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
f4-5
@end lilypond
@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
+\once \override PhrasingSlur.positions = #'(-4 . -3)
\acciaccatura e8\( d8 c~ c d c d\)
@end lilypond
{ c'1 ~ c'2. e'8 f' }
\\
{
- \override Beam #'positions = #'(-1 . -1)
+ \override Beam.positions = #'(-1 . -1)
e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g''
}
>>
\\
{
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\
\\
{
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\voiceTwo
c,8~
% Reposition the c2 to the right of the merged note
- \once \override NoteColumn #'force-hshift = #1.0
+ \once \override NoteColumn.force-hshift = #1.0
% Move the c2 out of the main note column
% so the merge will work
\shiftOnn
% Stem on the d2 must be down to permit merging
\stemDown
% Stem on the d2 should be invisible
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
d2
}
\new Voice {
liaison vers le haut de 3,5 demi-intervalles de lignes au-dessus de la
ligne médiane :
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
Cela s'adjoint à la deuxième mesure, pour donner :
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\voiceTwo
c,8~
% Reposition the c2 to the right of the merged note
- \once \override NoteColumn #'force-hshift = #1.0
+ \once \override NoteColumn.force-hshift = #1.0
% Move the c2 out of the main note column
% so the merge will work
\shiftOnn
% Stem on the d2 must be down to permit merging
\stemDown
% Stem on the d2 should be invisible
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
d2
}
\new Voice {
@lilypond[quote,fragment,relative=2,verbatim]
<<
{
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
b8~ b\noBeam
}
\\
@lilypond[quote,fragment,relative=2,verbatim]
<<
{
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
- \tweak Stem #'length #8
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
+ \tweak Stem.length #8
b8~ b8\noBeam
}
\\
% Visible tempo marking
\tempo 4=120
a4 a a
- \once \override Score.MetronomeMark #'transparent = ##t
+ \once \override Score.MetronomeMark.transparent = ##t
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
a4\fermata |
% Visible tempo marking
\tempo 4=120
a4 a a
- \once \override Score.MetronomeMark #'stencil = ##f
+ \once \override Score.MetronomeMark.stencil = ##f
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
a4\fermata |
@code{\revert} ?
@example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
@end example
Là encore, ce serait extrêmement pénible à saisir, surtout s'il y avait
@lilypond[quote,verbatim]
emphasize = {
- \override Lyrics.LyricText #'font-shape = #'italic
- \override Lyrics.LyricText #'font-series = #'bold
+ \override Lyrics.LyricText.font-shape = #'italic
+ \override Lyrics.LyricText.font-series = #'bold
}
normal = {
- \revert Lyrics.LyricText #'font-shape
- \revert Lyrics.LyricText #'font-series
+ \revert Lyrics.LyricText.font-shape
+ \revert Lyrics.LyricText.font-series
}
global = { \key c \major \time 4/4 \partial 4 }
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
\layout{
\context {
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
}
\context {
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
}
\context {
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
\layout{
\context { \Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
}
\context { \Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
@example
tieDotted = @{
- \override Tie #'dash-period = #0.75
- \override Tie #'dash-fraction = #0.1
+ \override Tie.dash-period = #0.75
+ \override Tie.dash-fraction = #0.1
@}
@end example
\relative c' {
% Arrange to obtain color from color-notehead procedure
- \override NoteHead #'color = #color-notehead
+ \override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
}
@end lilypond
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+
+@c \version "2.17.6"
@c Translators: Jean-Charles Malahieude
\context {
\Staff
\consists "Custos_engraver"
- \override Custos #'style = #'mensural
+ \override Custos.style = #'mensural
}
}
}
\score {
<<
\new MensuralVoice = "discantus" \transpose c c' {
- \override Score.BarNumber #'transparent = ##t {
+ \override Score.BarNumber.transparent = ##t {
c'1\melisma bes a g\melismaEnd
f\breve
\[ f1\melisma a c'\breve d'\melismaEnd \]
@tab
@lilypond[relative=1,notime]
\clef "mensural-c2"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "mensural-f"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "mensural-g"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "petrucci-c2"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "petrucci-f3"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "petrucci-g"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@end multitable
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter default }
- \override Staff.TimeSignature #'style = #'numbered
+ \override Staff.TimeSignature.style = #'numbered
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter numbered }
- \override Staff.TimeSignature #'style = #'mensural
+ \override Staff.TimeSignature.style = #'mensural
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter mensural }
- \override Staff.TimeSignature #'style = #'neomensural
+ \override Staff.TimeSignature.style = #'neomensural
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter neomensural }
- \override Staff.TimeSignature #'style = #'single-digit
+ \override Staff.TimeSignature.style = #'single-digit
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter single-digit }
}
@lilypond[quote,fragment,ragged-right,verbatim]
\set Score.skipBars = ##t
\autoBeamOff
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a'
-\override NoteHead #'style = #'semipetrucci
+\override NoteHead.style = #'semipetrucci
a'\breve*5/6
-\override NoteHead #'style = #'blackpetrucci
+\override NoteHead.style = #'blackpetrucci
a'8*4/3 a'
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
a'\longa
@end lilypond
@code{mensural}.
@lilypond[quote,fragment,ragged-right,verbatim]
-\override Flag #'style = #'mensural
-\override Stem #'thickness = #1.0
-\override NoteHead #'style = #'mensural
+\override Flag.style = #'mensural
+\override Stem.thickness = #1.0
+\override NoteHead.style = #'mensural
\autoBeamOff
c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8
c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32
@lilypond[quote,fragment,ragged-right,verbatim]
\set Score.skipBars = ##t
-\override Rest #'style = #'classical
+\override Rest.style = #'classical
r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'mensural
+\override Rest.style = #'mensural
r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'neomensural
+\override Rest.style = #'neomensural
r\longa^"neomensural" r\breve r1 r2 r4 r8 r16
@end lilypond
et @code{KeySignature}, comme ceci :
@example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
#alteration-mensural-glyph-name-alist
@end example
@c @example
@c \set Score.timing = ##f
-@c \set Score.defaultBarType = "empty"
-@c \override NoteHead #'style = #'neomensural
-@c \override Staff.TimeSignature #'style = #'neomensural
+@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 \]
\score {
\transpose c c' {
\set Score.timing = ##f
- \set Score.defaultBarType = "empty"
- \override NoteHead #'style = #'petrucci
- \override Staff.TimeSignature #'style = #'mensural
+ \set Score.defaultBarType = "-"
+ \override NoteHead.style = #'petrucci
+ \override Staff.TimeSignature.style = #'mensural
\clef "petrucci-g"
\[ c'\maxima g \]
\[ d\longa
- \override NoteHead #'ligature-flexa = ##t
- \once \override NoteHead #'flexa-width = #3.2
+ \override NoteHead.ligature-flexa = ##t
+ \once \override NoteHead.flexa-width = #3.2
c\breve f e d \]
\[ c'\maxima d'\longa \]
\[ e'1 a g\breve \]
@lilypond[quote,ragged-right]
\transpose c c' {
\set Score.timing = ##f
- \set Score.defaultBarType = "empty"
- \override NoteHead #'style = #'petrucci
- \override Staff.TimeSignature #'style = #'mensural
+ \set Score.defaultBarType = "-"
+ \override NoteHead.style = #'petrucci
+ \override Staff.TimeSignature.style = #'mensural
\clef "petrucci-g"
\[ c'\maxima g \]
\[ d\longa
- \override NoteHead #'ligature-flexa = ##t
- \once \override NoteHead #'flexa-width = #3.2
+ \override NoteHead.ligature-flexa = ##t
+ \once \override NoteHead.flexa-width = #3.2
c\breve f e d \]
\[ c'\maxima d'\longa \]
\[ e'1 a g\breve \]
@code{vaticana-do3}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'vaticana.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'vaticana.punctum
\clef "vaticana-do2"
c
@end lilypond
@code{vaticana-fa1}, @code{vaticana-fa2}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'vaticana.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'vaticana.punctum
\clef "vaticana-fa2"
c
@end lilypond
@code{medicaea-do3}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'medicaea.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'medicaea.punctum
\clef "medicaea-do2"
c
@end lilypond
@code{medicaea-fa1}, @code{medicaea-fa2}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'medicaea.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'medicaea.punctum
\clef "medicaea-fa2"
c
@end lilypond
@code{hufnagel-do3}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'hufnagel.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-do2"
c
@end lilypond
@code{hufnagel-fa1}, @code{hufnagel-fa2}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'hufnagel.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-fa2"
c
@end lilypond
@code{hufnagel-do-fa}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'hufnagel.punctum
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-do-fa"
c
@end lilypond
et @code{KeySignature}, comme ceci :
@example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
#alteration-mensural-glyph-name-alist
@end example
\score {
<<
\context VaticanaVoice {
- \override TextScript #'padding = #3
+ \override TextScript.padding = #3
g a g
s^\markup { "divisio minima" }
\divisioMinima
\include "gregorian.ly"
\score {
\new VaticanaVoice {
- \override TextScript #'font-family = #'typewriter
- \override TextScript #'font-shape = #'upright
- \override Script #'padding = #-0.1
+ \override TextScript.font-family = #'typewriter
+ \override TextScript.font-shape = #'upright
+ \override Script.padding = #-0.1
a\ictus_"ictus " \bar "" \break
a\circulus_"circulus " \bar "" \break
a\semicirculus_"semicirculus " \bar "" \break
\new KievanVoice = "melody" \transpose c c' {
\cadenzaOn
c4 c c c c2 b,\longa
- \bar "kievan"
+ \bar "k"
}
\new Lyrics \lyricsto "melody" {
Го -- спо -- ди по -- ми -- луй.
@lilypond[quote,relative=1,notime,verbatim]
\clef "kievan-do"
- \override NoteHead #'style = #'kievan
+ \override NoteHead.style = #'kievan
c
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim]
\autoBeamOff
\cadenzaOn
-\override NoteHead #'style = #'kievan
+\override NoteHead.style = #'kievan
b'1 b'2 b'4 b'8 b'\breve b'\longa
@end lilypond
@lilypond[quote,relative=1,notime,verbatim]
\clef "kievan-do"
-\override NoteHead #'style = #'kievan
-\override Accidental #'glyph-name-alist =
+\override NoteHead.style = #'kievan
+\override Accidental.glyph-name-alist =
#alteration-kievan-glyph-name-alist
bes' dis,
@end lilypond
Les pièces en notation kiévienne sont habituellement terminées par une
décoration qui fait office de barre finale. Elle s'obtient à l'aide
-d'un @code{\bar "kievan"}.
+d'un @code{\bar "k"}.
@lilypond[quote,relative=1,notime,verbatim]
\clef "kievan-do"
- \override NoteHead #'style = #'kievan
- c \bar "kievan"
+ \override NoteHead.style = #'kievan
+ c \bar "k"
@end lilypond
@seealso
}
verba = \lyricmode {
- \once \override LyricText #'self-alignment-X = #-1
+ \once \override LyricText.self-alignment-X = #-1
"Noctem quietam et" fi -- nem per -- fec -- tum
- \once \override LyricText #'self-alignment-X = #-1
+ \once \override LyricText.self-alignment-X = #-1
"concedat nobis Dominus" om -- ni -- po -- tens.
}
\score {
\Staff
\remove "Time_signature_engraver"
\remove "Bar_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
}
}
}
chant = \relative c' {
\clef "G_8"
\set Score.timing = ##f
- c\breve \override NoteHead #'transparent = ##t c c c c c
- \revert NoteHead #'transparent
- \override Stem #'transparent = ##f \stemUp c4 b4 a
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t c2 c4 \divisioMaior
- c\breve \override NoteHead #'transparent = ##t c c c c c c c
- \revert NoteHead #'transparent c4 c f, f \finalis
+ c\breve \override NoteHead.transparent = ##t c c c c c
+ \revert NoteHead.transparent
+ \override Stem.transparent = ##f \stemUp c4 b4 a
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t c2 c4 \divisioMaior
+ c\breve \override NoteHead.transparent = ##t c c c c c c c
+ \revert NoteHead.transparent c4 c f, f \finalis
}
verba = \lyricmode {
\context {
\Staff
\remove "Time_signature_engraver"
- \override BarLine #'transparent = ##t
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override BarLine.transparent = ##t
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
}
}
}
@lilypond[verbatim,quote]
spiritus = \relative c' {
\time 1/4
- \override Lyrics.LyricText #'X-extent = #'(0 . 3)
+ \override Lyrics.LyricText.X-extent = #'(0 . 3)
d4 \times 2/3 { f8 a g } g a a4 g f8 e
d4 f8 g g8 d f g a g f4 g8 a a4 s
\times 2/3 { g8 f d } e f g a g4
\context {
\Staff
\remove "Time_signature_engraver"
- \override BarLine #'X-extent = #'(-1 . 1)
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Beam #'transparent = ##t
- \override BarLine #'transparent = ##t
- \override TupletNumber #'transparent = ##t
+ \override BarLine.X-extent = #'(-1 . 1)
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Beam.transparent = ##t
+ \override BarLine.transparent = ##t
+ \override TupletNumber.transparent = ##t
}
}
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Gilles Thibault
\layout {
\context {
\Staff
- \override Stem #'thickness = #4.0
+ \override Stem.thickness = #4.0
}
}
}
}
\context {
\Staff
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
}
}
}
}
}
\layout {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\set fontSize = #-4
- \override Voice.Stem #'thickness = #4.0
+ \override Voice.Stem.thickness = #4.0
}
}
@end lilypond
\new Staff {
\new Voice
\with {
- \override Stem #'thickness = #4.0
+ \override Stem.thickness = #4.0
}
{
\relative c'' {
}
}
\new Staff
- \with { \accidentalStyle "dodecaphonic" }
+ \with { \accidentalStyle dodecaphonic }
{
\new Voice
\with { \dynamicUp }
\consists "Text_engraver"
\consists "Pitch_squash_engraver"
squashedPosition = #0
- \override NoteHead #'style = #'slash
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override NoteHead.style = #'slash
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
\alias Voice
}
\context { \Staff
aucune hampe :
@example
-\override NoteHead #'style = #'slash
-\override Stem #'transparent = ##t
-\override Flag #'transparent = ##t
+\override NoteHead.style = #'slash
+\override Stem.transparent = ##t
+\override Flag.transparent = ##t
@end example
Afin que tous ces graveurs puissent travailler de concert, on leur
\consists "Text_engraver"
\consists "Pitch_squash_engraver"
squashedPosition = #0
- \override NoteHead #'style = #'slash
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override NoteHead.style = #'slash
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
\alias Voice
@}
@end example
vide entre la note et le doigté :
@example
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
@end example
En ajoutant cette commande avant la création du doigté (de l'objet
suivant :
@lilypond[quote,relative=2,verbatim]
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
c-2
\stemUp
f
La commande suivante :
@verbatim
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
@end verbatim
@noindent
@lilypond[quote,verbatim,relative=2,fragment]
c4
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
c4
c4
c4
@lilypond[quote,fragment,verbatim,relative=2]
c4
-\once \override Stem #'thickness = #4.0
+\once \override Stem.thickness = #4.0
c4
c4
@end lilypond
créé.
@lilypond[quote,fragment,verbatim,relative=2]
-\override Slur #'thickness = #3.0
+\override Slur.thickness = #3.0
c8[( c
-\override Beam #'beam-thickness = #0.6
+\override Beam.beam-thickness = #0.6
c8 c])
@end lilypond
est sans effet.
@example
-\override Voice.Stem #'thickness = #4.0
-\revert Staff.Stem #'thickness
+\override Voice.Stem.thickness = #4.0
+\revert Staff.Stem.thickness
@end example
Il existe, à l'intérieur même de certaines propriétés, des options que
Ainsi, par exemple :
@example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
+\override Stem.details.beamed-lengths = #'(4 4 3)
@end example
@end ignore
@lilypond[quote,verbatim,relative=2]
c4 c
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
c4 c
@end lilypond
celle-ci s'appliquera au contexte le plus bas :
@lilypond[quote,verbatim,relative=2]
-{ \override Staff.Stem #'thickness = #3.0
+{ \override Staff.Stem.thickness = #3.0
<<
{
e4 e
- \override Stem #'thickness = #0.5
+ \override Stem.thickness = #0.5
e4 e
} \\ {
c4 c c c
@lilypond[quote,verbatim,relative=2]
c4
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
c4 c
-\revert Voice.Stem #'thickness
+\revert Voice.Stem.thickness
c4
@end lilypond
<<
{
e4
- \override Staff.Stem #'thickness = #3.0
+ \override Staff.Stem.thickness = #3.0
e4 e e
} \\ {
c4 c c
- \revert Staff.Stem #'thickness
+ \revert Staff.Stem.thickness
c4
}
>>
{
<<
{
- \override Stem #'thickness = #3.0
+ \override Stem.thickness = #3.0
e4 e e e
} \\ {
c4
- \once \override Stem #'thickness = #3.0
+ \once \override Stem.thickness = #3.0
c4 c c
}
>>
ressemblent en général à
@example
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
@end example
@noindent
propriété. La commande devient alors :
@example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
+\override Stem.details.beamed-lengths = #'(4 4 3)
@end example
@cindex documentation exhaustive
@lilypond[relative=2,verbatim,ragged-right]
<
c
- \tweak #'color #red
+ \tweak color #red
d
g
- \tweak #'duration-log #1
+ \tweak duration-log #1
a
>4
--\tweak #'padding #8
+-\tweak padding #8
-^
@end lilypond
pourquoi le code suivant ne sera d'aucun effet :
@example
-\tweak #'color #red c4
+\tweak color #red c4
@end example
@noindent
@lilypond[relative=2,verbatim,quote]
< c
- \tweak #'color #red
+ \tweak color #red
d
g
- \tweak #'duration-log #1
+ \tweak duration-log #1
a
> 4
@end lilypond
liaison :
@lilypond[verbatim,quote,relative=1]
-c-\tweak #'thickness #5 ( d e f)
+c-\tweak thickness #5 ( d e f)
@end lilypond
La commande @code{\tweak} ne sera pleinement fonctionnelle que si elle
@code{EventChord} (un événement d'accord) :
@lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
-\tweak #'color #red <c e>4
-<\tweak #'color #red c>4
+\tweak color #red c4
+\tweak color #red <c e>4
+<\tweak color #red c>4
@end lilypond
La commande @code{\tweak} simple ne saurait servir à modifier un élément
forme dévelppée de la commande @code{\tweak} :
@lilypond[relative=2,verbatim,quote]
-\tweak Stem #'color #red
-\tweak Beam #'color #green c8 e
-<c e \tweak Accidental #'font-size #-3 ges>4
+\tweak Stem.color #red
+\tweak Beam.color #green c8 e
+<c e \tweak Accidental.font-size #-3 ges>4
@end lilypond
La commande @code{\tweak} ne peut non plus servir à modifier clefs ou
@lilypond[verbatim,quote,relative=1]
c
--\tweak #'style #'dashed-line
--\tweak #'dash-fraction #0.2
--\tweak #'thickness #3
--\tweak #'color #red
+-\tweak style #'dashed-line
+-\tweak dash-fraction #0.2
+-\tweak thickness #3
+-\tweak color #red
\glissando
f'
@end lilypond
% reduced space between staves
\new PianoStaff \with {
% this is the nested declaration
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #7
} <<
\new Staff { \clef treble c''1 }
\new Staff { \clef bass c1 }
@lilypond[quote,verbatim]
\new PianoStaff \with {
- \override StaffGrouper #'staff-staff-spacing =
+ \override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 0)
(minimum-distance . 0)
(padding . 0)
équivalentes.
@example
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 7))
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 7)
(minimum-distance . 0)
(padding . 0)
@lilypond[verbatim,quote,relative=1]
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
+ \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
}
{ a4 e' f b | d1 }
@end lilypond
@lilypond[verbatim,quote,relative=1]
\new Staff \with {
- \override StaffSymbol #'width = #23
+ \override StaffSymbol.width = #23
}
{ a4 e' f b | d1 }
@end lilypond
a~a
a
% increase the length of the tie
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
~a
@end lilypond
\compressFullBarRests
R1*23
% increase the length of the rest bar
-\once \override MultiMeasureRest #'minimum-length = #20
+\once \override MultiMeasureRest.minimum-length = #20
R1*23
a1
@end lilypond
@lilypond[verbatim,quote,relative=2]
a \< a a a \!
% increase the length of the hairpin
-\override Hairpin #'minimum-length = #20
+\override Hairpin.minimum-length = #20
a \< a a a \!
@end lilypond
@lilypond[verbatim,quote,relative=2]
a( a)
a
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
( a)
a\( a\)
a
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
\( a\)
@end lilypond
e \glissando c'
% not effective alone
-\once \override Glissando #'minimum-length = #20
+\once \override Glissando.minimum-length = #20
e, \glissando c'
% effective only when both overrides are present
-\once \override Glissando #'minimum-length = #20
-\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Glissando.minimum-length = #20
+\once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
e, \glissando c'
@end lilypond
@lilypond[verbatim,quote,relative=1]
% not effective alone
-\once \override Beam #'minimum-length = #20
+\once \override Beam.minimum-length = #20
e8 e e e
% effective only when both overrides are present
-\once \override Beam #'minimum-length = #20
-\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Beam.minimum-length = #20
+\once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
e8 e e e
@end lilypond
@lilypond[verbatim,quote,relative=2]
a \< a a a a \! a a a \break
-\override Hairpin #'to-barline = ##f
+\override Hairpin.to-barline = ##f
a \< a a a a \! a a a
@end lilypond
@lilypond[relative=2,quote,verbatim]
e2 \glissando b
-\once \override Glissando #'(bound-details left Y) = #3
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.left.Y = #3
+\once \override Glissando.bound-details.right.Y = #-2
e2 \glissando b
@end lilypond
ci-dessous :
@lilypond[relative=2,ragged-right,verbatim,quote]
-\override Glissando #'breakable = ##t
-\override Glissando #'(bound-details right-broken Y) = #-3
+\override Glissando.breakable = ##t
+\override Glissando.bound-details.right-broken.Y = #-3
c1 \glissando \break
f1
@end lilypond
un extenseur horizontal.
@lilypond[quote,ragged-right,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
c2\startTextSpan b c a\stopTextSpan
@end lilypond
le symbole verticalement par rapport au coin de la ligne :
@lilypond[relative=1,quote,verbatim]
-\override TextSpanner
- #'(bound-details left stencil-align-dir-y) = #-2
-\override TextSpanner
- #'(bound-details right stencil-align-dir-y) = #UP
-
-\override TextSpanner
- #'(bound-details left text) = #"ggg"
-\override TextSpanner
- #'(bound-details right text) = #"hhh"
+\override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
+\override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
+
+\override TextSpanner.bound-details.left.text = #"ggg"
+\override TextSpanner.bound-details.right.text = #"hhh"
c4^\startTextSpan c c c \stopTextSpan
@end lilypond
@lilypond[quote,verbatim,relative=1]
a1 a
-\override Score.BarLine #'stencil = ##f
+\override Score.BarLine.stencil = ##f
a a
-\revert Score.BarLine #'stencil
+\revert Score.BarLine.stencil
a a a
@end lilypond
@lilypond[quote,verbatim,relative=2]
a4 a
-\once \override NoteHead #'transparent = ##t
+\once \override NoteHead.transparent = ##t
a a
@end lilypond
un fantôme de l'objet blanchi comme ci-dessous :
@lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
+\override Staff.Clef.color = #white
a1
@end lilypond
pouvoir être dessiné avant.
@lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
-\override Staff.Clef #'layer = #-1
+\override Staff.Clef.color = #white
+\override Staff.Clef.layer = #-1
a1
@end lilypond
f4 g a b
f4 g a b
% Remove bar line at the end of the current line
-\once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
+\once \override Score.BarLine.break-visibility = #'#(#f #t #t)
\break
f4 g a b
f4 g a b
\key g \major
f4 g a b
% Try to remove all key signatures
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b
\break
\key g \major
f4 g a b
\set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b \break
f4 g a b
f4 g a b
\set Staff.explicitKeySignatureVisibility = #all-invisible
\set Staff.printKeyCancellation = ##f
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b \break
f4 g a b
@lilypond[relative=2,ragged-right,verbatim,quote]
d2 \glissando d'2
-\once \override Glissando #'style = #'dashed-line
+\once \override Glissando.style = #'dashed-line
d,2 \glissando d'2
-\override Glissando #'style = #'dotted-line
+\override Glissando.style = #'dotted-line
d,2 \glissando d'2
-\override Glissando #'style = #'zigzag
+\override Glissando.style = #'zigzag
d,2 \glissando d'2
-\override Glissando #'style = #'trill
+\override Glissando.style = #'trill
d,2 \glissando d'2
@end lilypond
@c TODO Complete
@lilypond[relative=2,ragged-right,verbatim,quote]
e2 \glissando f
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.right.Y = #-2
e2 \glissando f
@end lilypond
@lilypond[quote,verbatim,relative=1]
g4\< e' d' f\!
-\override Hairpin #'rotation = #'(20 -1 0)
+\override Hairpin.rotation = #'(20 -1 0)
g,,4\< e' d' f\!
@end lilypond
@c KEEP LY
@lilypond[quote,verbatim,relative=1]
-\override TextScript #'outside-staff-priority = ##f
+\override TextScript.outside-staff-priority = ##f
g4^\markup { \rotate #30 "un sol" }
b^\markup { \rotate #30 "un si" }
des^\markup { \rotate #30 "un ré bémol" }
@lilypond[verbatim,quote,relative=2]
a-3
a
--\tweak #'X-offset #0
--\tweak #'Y-offset #0
+-\tweak X-offset #0
+-\tweak Y-offset #0
-3
a
--\tweak #'X-offset #-1
--\tweak #'Y-offset #1
+-\tweak X-offset #-1
+-\tweak Y-offset #1
-3
@end lilypond
@lilypond[quote,verbatim,relative=1]
a'
--\tweak #'self-alignment-X #-1
+-\tweak self-alignment-X #-1
^"left-aligned"
--\tweak #'self-alignment-X #0
+-\tweak self-alignment-X #0
^"center-aligned"
--\tweak #'self-alignment-X #RIGHT
+-\tweak self-alignment-X #RIGHT
^"right-aligned"
--\tweak #'self-alignment-X #-2.5
+-\tweak self-alignment-X #-2.5
^"aligned further to the right"
@end lilypond
@lilypond[quote,verbatim,relative=2]
a
--\tweak #'self-alignment-X #0.5 % move horizontally left
--\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
--\tweak #'self-alignment-Y #-1 % move vertically up
+-\tweak self-alignment-X #0.5 % move horizontally left
+-\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
+-\tweak self-alignment-Y #-1 % move vertically up
-3 % third finger
@end lilypond
@lilypond[verbatim,quote,relative=1]
% The rehearsal mark will be centered above the Clef
-\override Score.RehearsalMark #'break-align-symbols = #'(clef)
+\override Score.RehearsalMark.break-align-symbols = #'(clef)
\key a \major
\clef treble
\mark "↓"
e1
% The rehearsal mark will be centered above the Time Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
+\override Score.RehearsalMark.break-align-symbols = #'(time-signature)
\key a \major
\clef treble
\time 3/4
\mark "↓"
e2.
% The rehearsal mark will be centered above the Breath Mark
-\override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
+\override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
\key a \major
\clef treble
\time 4/4
@lilypond[verbatim,quote,relative=1]
% The rehearsal mark will be centered above the Key Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
e1
% The rehearsal mark will be centered above the Clef
\set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef bass
\mark "↓"
% The rehearsal mark will be centered above the Bar Line
\set Staff.explicitKeySignatureVisibility = #all-invisible
\set Staff.explicitClefVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
@lilypond[verbatim,quote,relative=1]
% The RehearsalMark will be centered above the Key Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\key a \major
\clef treble
\time 4/4
\mark "↓"
e1
% The RehearsalMark will be aligned with the left edge of the Key Signature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
+\once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
\mark "↓"
\key a \major
e1
% The RehearsalMark will be aligned with the right edge of the Key Signature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
+\once \override Score.KeySignature.break-align-anchor-alignment = #RIGHT
\key a \major
\mark "↓"
e1
@lilypond[verbatim,quote,relative=1]
% The RehearsalMark will be aligned with the left edge of the Key Signature
% and then shifted right by 3.5 staff-spaces
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
-\once \override Score.KeySignature #'break-align-anchor = #3.5
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
+\once \override Score.KeySignature.break-align-anchor = #3.5
\key a \major
\mark "↓"
e1
% The RehearsalMark will be aligned with the left edge of the Key Signature
% and then shifted left by 2 staff-spaces
-\once \override Score.KeySignature #'break-align-anchor = #-2
+\once \override Score.KeySignature.break-align-anchor = #-2
\key a \major
\mark "↓"
e1
@lilypond[verbatim,quote]
XinO = {
- \once \override NoteHead #'stencil = #ly:text-interface::print
- \once \override NoteHead #'text = \markup {
+ \once \override NoteHead.stencil = #ly:text-interface::print
+ \once \override NoteHead.text = \markup {
\combine
\halign #-0.7 \draw-circle #0.85 #0.2 ##f
\musicglyph #"noteheads.s2cross"
@lilypond[verbatim,quote,relative=1]
<<
{
- \once \override Tie
- #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
+ \once \override Tie.control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
e1 ~ e
}
\\
'(-0.5 . 0.5)))))
squareLineCircleSpace = {
- \override NoteHead #'stencil = #square-line-circle-space
+ \override NoteHead.stencil = #square-line-circle-space
}
smartSquareLineCircleSpace = {
\squareLineCircleSpace
- \override NoteHead #'Y-extent =
+ \override NoteHead.Y-extent =
#(ly:make-unpure-pure-container
ly:grob::stencil-height
(lambda (grob start end) (ly:grob::stencil-height grob)))
\new Voice \with { \remove "Stem_engraver" }
\relative c'' {
\squareLineCircleSpace
- cis4 ces cisis c
+ cis4 ces disis d
\smartSquareLineCircleSpace
- cis4 ces cisis c
+ cis4 ces disis d
}
@end lilypond
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
(parser location note)
(ly:music?)
#{
- \tweak NoteHead #'stencil #ly:text-interface::print
- \tweak NoteHead #'text
+ \tweak NoteHead.stencil #ly:text-interface::print
+ \tweak NoteHead.text
\markup \musicglyph #"custodes.mensural.u0"
- \tweak Stem #'stencil ##f
+ \tweak Stem.stencil ##f
#note
#})
(parser location padding tempotext)
(number? markup?)
#{
- \once \override Score.MetronomeMark #'padding = #padding
+ \once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Valentin Villenave
@c Translation checkers: Jean-Charles Malahieude
@tab
@lilypond[relative=2,notime]
\set Staff.autoBeaming = ##f
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
c1 c2 c8 c16
@end lilypond
@tab notes pointées
@tab
@lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
c4. c4..
@end lilypond
@tab chiffre de mesure, métrique
@tab
@lilypond[relative=1]
-\override Staff.Clef #'stencil = #empty-stencil
+\override Staff.Clef.stencil = #empty-stencil
\time 3/4
s4_" "
\time 4/4
@tab silences
@tab
@lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
r4 r8
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Valentin Villenave,Jean-Charles Malahieude
@c Translation checkers: Jean-Charles Malahieude, John Mandereau
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:m c:m7
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:dim c:dim7
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:aug
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:maj c:maj7
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Jean-Charles Malahieude
@lilypond[verbatim,quote,relative=2]
\set fontSize = #3
c4.-> d8---3
-\override NoteHead #'font-size = #-4
+\override NoteHead.font-size = #-4
c4.-> d8---3
-\override Script #'font-size = #2
+\override Script.font-size = #2
c4.-> d8---3
-\override Stem #'font-size = #-5
+\override Stem.font-size = #-5
c4.-> d8---3
@end lilypond
@ref{Liste des couleurs}.
@lilypond[verbatim,quote,relative=2]
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
c4 c
-\override NoteHead #'color = #(x11-color 'LimeGreen)
+\override NoteHead.color = #(x11-color 'LimeGreen)
d
-\override Stem #'color = #blue
+\override Stem.color = #blue
e
@end lilypond
façon évidente au vu de la partition finale.
@lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
\set Staff.instrumentName = \markup {
\with-color #(x11-color 'navy) "Clarinet"
}
gis8 a
-\override Beam #'color = #(x11-color "medium turquoise")
+\override Beam.color = #(x11-color "medium turquoise")
gis a
-\override Accidental #'color = #(x11-color 'DarkRed)
+\override Accidental.color = #(x11-color 'DarkRed)
gis a
-\override NoteHead #'color = #(x11-color "LimeGreen")
+\override NoteHead.color = #(x11-color "LimeGreen")
gis a
% this is deliberate nonsense; note that the stems remain black
-\override Stem #'color = #(x11-color 'Boggle)
+\override Stem.color = #(x11-color 'Boggle)
b2 cis
@end lilypond
l'exemple suivant correspond à 128).
@lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
\set Staff.instrumentName = \markup {
\with-color #(x11-color 'navy) "Clarinet"
}
-\override Stem #'color = #(rgb-color 0 0 0)
+\override Stem.color = #(rgb-color 0 0 0)
gis8 a
-\override Stem #'color = #(rgb-color 1 1 1)
+\override Stem.color = #(rgb-color 1 1 1)
gis8 a
-\override Stem #'color = #(rgb-color 0 0 0.5)
+\override Stem.color = #(rgb-color 0 0 0.5)
gis4 a
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Jean-Charles Malahieude, John Mandereau
multimesures}.
@lilypond[verbatim,quote,relative=2]
-\override Script #'color = #red
-\override MultiMeasureRestText #'color = #blue
+\override Script.color = #red
+\override MultiMeasureRestText.color = #blue
a2\fermata r\fermata
R1\fermataMarkup
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Matthieu Jacquot
@c Translation checkers: Jean-Charles Malahieude
l'activation de @code{restrainOpenStrings}.
@lilypond[quote,ragged-right,verbatim]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \override Voice.StringNumber.stencil = ##f }
\new StaffGroup <<
\new Staff \relative c {
\clef "treble_8"
peuvent être ajoutés aux tablatures.
@lilypond[verbatim,quote]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \override Voice.StringNumber.stencil = ##f }
firstHarmonic = {
d'4\4\harmonic
g'4\3\harmonic
@lilypond[quote,ragged-right,verbatim]
<<
\new Voice \with {
- \override StringNumber #'stencil = ##f
+ \override StringNumber.stencil = ##f
} {
\clef "bass_8"
\relative c, {
}
}
\context Staff {
- \override Voice.TextScript
- #'(fret-diagram-details finger-code) = #'below-string
+ \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
\clef "treble_8"
<c e g c' e'>1^\markup {
\fret-diagram-terse #"x;3-3;2-2;o;1-1;o;"
}
\context Staff {
\clef "treble_8"
- \override Voice.TextScript
- #'(fret-diagram-details finger-code) = #'below-string
+ \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
<f, c f a c' f'>1^\markup {
\fret-diagram-verbose #'(
(place-fret 6 1)
\clef "treble_8"
b16 d g b e
\textSpannerDown
-\override TextSpanner #'(bound-details left text) = #"XII "
+\override TextSpanner.bound-details.left.text = #"XII "
g16\startTextSpan
b16 e g e b g\stopTextSpan
e16 b g d
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\clef "treble_8"
- \override Staff.NoteHead #'style = #'harmonic-mixed
+ \override Staff.NoteHead.style = #'harmonic-mixed
d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Jean-Charles Malahieude, Valentin Villenave
\header { tagline = ##f }
\relative c'' {
% footnotes may be added to chord constituents
- < \footnote #'(-1 . -3) #'Accidental "Un autre bémol" aes
+ < \single\footnote #'(-1 . -3) "Un autre bémol" Accidental aes
c
- \footnote #'(-1 . 0.5) #'Accidental "Un bémol" ees
+ \single\footnote #'(-1 . 0.5) "Un bémol" Accidental ees
>2
- \footnote #'(-1 . 2) #'Stem "Une hampe" ees2
+ \single\footnote #'(-1 . 2) "Une hampe" Stem ees2
}
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Jean-Charles Malahieude, John Mandereau
\new Staff = "up" {
\voiceOne
% Make space for fingering in the cross-staff voice
- \once\override DynamicLineSpanner #'staff-padding = #3.4
+ \once\override DynamicLineSpanner.staff-padding = #3.4
e''2\p\< d''\>
c1\!
}
@cindex mode
@cindex output-count
@cindex output-suffix
-@cindex parseStringResult
@cindex partCombineListener
@cindex pitchnames
@cindex toplevel-bookparts
@item mode
@item output-count
@item output-suffix
-@item parseStringResult
@item partCombineListener
@item pitchnames
@item toplevel-bookparts
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: John Mandereau
<< \new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics \nam
>>
\layout {
\context {
\Score
- \override LyricText #'font-family = #'typewriter
- \override BarNumber #'transparent =##T
+ \override LyricText.font-family = #'typewriter
+ \override BarNumber.transparent =##T
}
}
}
\new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
- \override StaffSymbol #'line-count = #2
- \override StaffSymbol #'staff-space = #2
- \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0)
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
+ \override StaffSymbol.line-count = #2
+ \override StaffSymbol.staff-space = #2
+ \override VerticalAxisGroup.minimum-Y-extent = #'(-3.0 . 4.0)
drumStyleTable = #timbales-style
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\remove "Bar_engraver"
\remove "Time_signature_engraver"
drumStyleTable = #congas-style
- \override StaffSymbol #'line-count = #2
+ \override StaffSymbol.line-count = #2
%% this sucks; it will lengthen stems.
- \override StaffSymbol #'staff-space = #2
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override StaffSymbol.staff-space = #2
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override StaffSymbol #'line-count = #2
+ \override StaffSymbol.line-count = #2
drumStyleTable = #bongos-style
%% this sucks; it will lengthen stems.
- \override StaffSymbol #'staff-space = #2
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override StaffSymbol.staff-space = #2
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\new DrumStaff \with{
\remove "Bar_engraver"
drumStyleTable = #percussion-style
- \override StaffSymbol #'line-count = #1
+ \override StaffSymbol.line-count = #1
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
woodstaff = {
% This defines a staff with only two lines.
% It also defines the positions of the two lines.
- \override Staff.StaffSymbol #'line-positions = #'(-2 3)
+ \override Staff.StaffSymbol.line-positions = #'(-2 3)
% This is necessary; if not entered, the barline would be too short!
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
}
\new DrumStaff {
Vous aurez remarqué ici l'allongement des barres de mesures par
l'instruction
-@w{@code{\override Staff.BarLine #'bar-extent #'(de . à)}}. Il faut
+@w{@code{\override Staff.BarLine.bar-extent #'(de . à)}}. Il faut
aussi définir la position des deux lignes de la portée -- voir à ce
sujet la rubrique @ref{Symbole de la portée}.
#(define mydrums '((tambourine default #t 0)))
tambustaff = {
- \override Staff.StaffSymbol #'line-positions = #'( 0 )
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.StaffSymbol.line-positions = #'( 0 )
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Tambourine"
}
#(define mydrums '((tamtam default #t 0)))
tamtamstaff = {
- \override Staff.StaffSymbol #'line-positions = #'( 0 )
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.StaffSymbol.line-positions = #'( 0 )
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Tamtam"
}
(cowbell default #t -2)))
bellstaff = {
- \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3)
+ \override DrumStaff.StaffSymbol.line-positions = #'(-2 3)
\set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Different Bells"
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Frédéric Chiasson
@c Translation checkers: Valentin Villenave, Jean-Charles Malahieude
@example
\new Staff <<
- \accidentalStyle "voice"
+ \accidentalStyle voice
@{ @dots{} @}
>>
@end example
@code{StaffGroup} -- soient soumises à la même règle :
@example
-\accidentalStyle #'StaffGroup "voice"
+\accidentalStyle StaffGroup.voice
@end example
Nous vous présentons ci-après les différentes règles d'altération prises
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicA
}
\context Staff = "down" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicB
}
>>
<<
\context Staff = "haut" @{
%%% voici la ligne à modifier en conséquence :
- \accidentalStyle #'Score "default"
+ \accidentalStyle Score.default
\musicA
@}
\context Staff = "bas" @{
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicA
}
\context Staff = "down" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "voice"
+ \accidentalStyle voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "voice"
+ \accidentalStyle voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern"
+ \accidentalStyle modern
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern"
+ \accidentalStyle modern
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-cautionary"
+ \accidentalStyle modern-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-cautionary"
+ \accidentalStyle modern-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-voice"
+ \accidentalStyle modern-voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-voice"
+ \accidentalStyle modern-voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-voice-cautionary"
+ \accidentalStyle modern-voice-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-voice-cautionary"
+ \accidentalStyle modern-voice-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "piano"
+ \accidentalStyle piano
\musicA
}
\context Staff = "down" {
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "piano-cautionary"
+ \accidentalStyle piano-cautionary
\musicA
}
\context Staff = "down" {
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern"
+ \accidentalStyle neo-modern
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern"
+ \accidentalStyle neo-modern
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-cautionary"
+ \accidentalStyle neo-modern-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-cautionary"
+ \accidentalStyle neo-modern-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-voice"
+ \accidentalStyle neo-modern-voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-voice"
+ \accidentalStyle neo-modern-voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-voice-cautionary"
+ \accidentalStyle neo-modern-voice-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-voice-cautionary"
+ \accidentalStyle neo-modern-voice-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\musicA
}
\context Staff = "down" {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\musicB
}
>>
<<
\context Staff = "up" {
\key fis \minor
- \accidentalStyle "teaching"
+ \accidentalStyle teaching
\musicA
}
\context Staff = "down" {
\key fis \minor
- \accidentalStyle "teaching"
+ \accidentalStyle teaching
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "no-reset"
+ \accidentalStyle no-reset
\musicA
}
\context Staff = "down" {
- \accidentalStyle "no-reset"
+ \accidentalStyle no-reset
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "forget"
+ \accidentalStyle forget
\musicA
}
\context Staff = "down" {
- \accidentalStyle "forget"
+ \accidentalStyle forget
\musicB
}
>>
@lilypond[quote]
{
- \accidentalStyle "modern"
+ \accidentalStyle modern
\time 2/4
\repeat volta 2 {
c'2
@lilypond[verbatim,quote]
forget = #(define-music-function (parser location music) (ly:music?) #{
- \accidentalStyle "forget"
+ \accidentalStyle forget
#music
- \accidentalStyle "modern"
+ \accidentalStyle modern
#})
{
- \accidentalStyle "modern"
+ \accidentalStyle modern
\time 2/4
\repeat volta 2 {
c'2
@lilypond[verbatim,quote,relative=2]
c4 b
-\override NoteHead #'style = #'cross
+\override NoteHead.style = #'cross
c4 b
-\revert NoteHead #'style
+\revert NoteHead.style
a b
-\override NoteHead #'style = #'harmonic
+\override NoteHead.style = #'harmonic
a b
-\revert NoteHead #'style
+\revert NoteHead.style
c4 d e f
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Frédéric Chiasson, Jean-Charles Malahieude
@c Translation checkers: Valentin Villenave, François Martin, Xavier Scheuer
permet d'obtenir une meilleure lisibilité.
@lilypond[verbatim,quote,ragged-right,relative=2]
-\override Tie #'layer = #-2
-\override Staff.TimeSignature #'layer = #-1
-\override Staff.KeySignature #'layer = #-1
-\override Staff.TimeSignature #'whiteout = ##t
-\override Staff.KeySignature #'whiteout = ##t
+\override Tie.layer = #-2
+\override Staff.TimeSignature.layer = #-1
+\override Staff.KeySignature.layer = #-1
+\override Staff.TimeSignature.whiteout = ##t
+\override Staff.KeySignature.whiteout = ##t
b2 b~
\time 3/4
\key a \major
\new Staff {
% These two lines are just to prettify this example
\time 16/1
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
% Print a maxima rest, equal to four breves
r\maxima
% Print a longa rest, equal to two breves
@c KEEP LY
@lilypond[quote,verbatim,relative=2]
% Ceci échouera : il y a erreur quant à l'objet spécifié
-\override TextScript #'padding = #5
+\override TextScript.padding = #5
R1^"pas bon !"
% Formulation correcte, qui fonctionnera
-\override MultiMeasureRestText #'padding = #5
+\override MultiMeasureRestText.padding = #5
R1^"ça marche !"
@end lilypond
@lilypond[verbatim,relative=2,quote]
% Show all bar numbers
-\override Score.BarNumber #'break-visibility = #all-visible
+\override Score.BarNumber.break-visibility = #all-visible
c4 d e d
\cadenzaOn
c4 c d8[ d d] f4 g4.
quatre dernières gardent un tempo régulier.
@lilypond[relative=1,verbatim,quote]
-\override Beam #'grow-direction = #LEFT
+\override Beam.grow-direction = #LEFT
\featherDurations #(ly:make-moment 2 1)
{ c16[ c c c c c c c] }
-\override Beam #'grow-direction = #RIGHT
+\override Beam.grow-direction = #RIGHT
\featherDurations #(ly:make-moment 2 3)
{ c32[ d e f] }
% revert to non-feathered beams
-\override Beam #'grow-direction = #'()
+\override Beam.grow-direction = #'()
{ g32[ a b c] }
@end lilypond
f1 \bar "."
g1 \bar "||"
a1 \bar ".|"
-b1 \bar ".|."
+b1 \bar ".."
c1 \bar "|.|"
d1 \bar "|."
e1
ainsi que d'une barre en pointillé et d'une discontinue :
@lilypond[quote,relative=1,verbatim]
-f1 \bar ":"
-g1 \bar "dashed"
+f1 \bar ";"
+g1 \bar "!"
a1
@end lilypond
et de cinq types de barre de reprise :
@lilypond[quote,relative=1,verbatim]
-f1 \bar "|:"
-g1 \bar ":|:"
+f1 \bar ".|:"
+g1 \bar ":..:"
a1 \bar ":|.|:"
b1 \bar ":|.:"
-c1 \bar ":|"
+c1 \bar ":|."
e1
@end lilypond
c4 c c c \break
\bar "S"
c4 c c c
-\bar "|S"
+\bar "S-|"
c4 c c c \break
-\bar "|S"
+\bar "S-|"
c4 c c c
-\bar "S|"
+\bar "S-S"
c4 c c c \break
-\bar "S|"
+\bar "S-S"
c1
@end lilypond
@lilypond[quote,relative=2,verbatim]
c4 c c c
-\bar "||:"
+\bar ".|:-||"
c4 c c c \break
-\bar "||:"
+\bar ".|:-||"
c4 c c c
@end lilypond
@lilypond[quote,relative=2,verbatim]
c4 c c c
-\bar ":|S"
+\bar ":|.S"
c4 c c c \break
-\bar ":|S"
+\bar ":|.S"
c4 c c c
-\bar ":|S."
+\bar ":|.S-S"
c4 c c c \break
-\bar ":|S."
+\bar ":|.S-S"
c4 c c c
-\bar "S|:"
+\bar "S.|:-S"
c4 c c c \break
-\bar "S|:"
+\bar "S.|:-S"
c4 c c c
-\bar ".S|:"
+\bar "S.|:"
c4 c c c \break
-\bar ".S|:"
+\bar "S.|:"
c4 c c c
-\bar ":|S|:"
+\bar ":|.S.|:"
c4 c c c \break
-\bar ":|S|:"
+\bar ":|.S.|:"
c4 c c c
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
c4 c c c \break
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
c1
@end lilypond
numéros de mesure :
@lilypond[verbatim,quote,relative=1]
-\override Score.BarNumber #'break-visibility = #'#(#t #t #t)
+\override Score.BarNumber.break-visibility = #'#(#t #t #t)
\set Score.currentBarNumber = #11
% Permit first bar number to be printed
\bar ""
@lilypond[quote,relative=2,verbatim]
<<
- \new Staff { e4 \bar "|:" \grace c16 d2. }
- \new Staff { c4 \bar "|:" d2. }
+ \new Staff { e4 \bar ".|:" \grace c16 d2. }
+ \new Staff { c4 \bar ".|:" d2. }
>>
@end lilypond
@lilypond[quote,relative=2,verbatim]
<<
- \new Staff { e4 \bar "|:" \grace c16 d2. }
- \new Staff { c4 \bar "|:" \grace s16 d2. }
+ \new Staff { e4 \bar ".|:" \grace c16 d2. }
+ \new Staff { c4 \bar ".|:" \grace s16 d2. }
>>
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Frédéric Chiasson, Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Jean-Charles Malahieude, John Mandereau
désactivé par une clause
@example
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
@end example
Ceci n'aura pas pour seule conséquence que ce message ne sera plus
@cindex collisions, ignorer
@knownissues
-Une clause @code{\override NoteColumn #'ignore-collision = ##t} aura
+Une clause @code{\override NoteColumn.ignore-collision = ##t} aura
pour effet une fusion incorrecte des têtes de note différentes à partir
de voix différentes.
@lilypond[quote,relative=1,verbatim]
\mergeDifferentlyHeadedOn
<< { c16 a' b a } \\ { c,2 } >>
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
<< { c16 a' b a } \\ { c,2 } >>
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Frédéric Chiasson, Jean-Charles Malahieude
Could we add a sentence:
"Use instead the pair fontSize = #@var{N}
- \override StaffSymbol #'staff-space = #(magstep @var{N})
+ \override StaffSymbol.staff-space = #(magstep @var{N})
inside the Staff context to change the size of the font and the
distance between staff lines accordingly."
@table @code
-@item blank-after-score-page-force
-@funindex blank-after-score-page-force
+@item blank-after-score-page-penalty
+@funindex blank-after-score-page-penalty
Pénalité pour apparition d'une page blanche entre deux partitions. Sa
valeur est par défaut inférieure à celle de
-@code{blank-page-force} ; nous préférons qu'une page blanche
+@code{blank-page-penalty} ; nous préférons qu'une page blanche
s'insère après la fin de la partition plutôt qu'au milieu.
-@item blank-last-page-force
-@funindex blank-last-page-force
+@item blank-last-page-penalty
+@funindex blank-last-page-penalty
Pénalité pour fin de partition intervenant sur une page impaire. La
valeur par défaut est de @code{0}.
-@item blank-page-force
-@funindex blank-page-force
+@item blank-page-penalty
+@funindex blank-page-penalty
Pénalité pour apparition d'une page blanche en cours de partition.
L'algorithme @code{ly:optimal-breaking} n'en tiendra pas compte
indent = 2\cm
\context @{
\StaffGroup
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #8
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #8
@}
\context @{
\Voice
- \override TextScript #'padding = #1
- \override Glissando #'thickness = #3
+ \override TextScript.padding = #1
+ \override Glissando.thickness = #3
@}
@}
@end example
\layout @{
\context @{
\Voice
- \override TextScript #'color = #magenta
- \override Glissando #'thickness = #1.5
+ \override TextScript.color = #magenta
+ \override Glissando.thickness = #1.5
@}
@}
@end example
layoutVariable = \layout @{
\context @{
\Voice
- \override NoteHead #'font-size = #4
+ \override NoteHead.font-size = #4
@}
@}
@end example
\layoutVariable
\context @{
\Voice
- \override NoteHead #'color = #red
+ \override NoteHead.color = #red
@}
@}
@end example
Selon le même principe, un saut de ligne ne peut intervenir alors qu'une
ligature s'étend sur deux mesures consécutives. Il faut en ce cas là
-introduire la dérogation @w{@code{\override Beam #'breakable = ##t}}.
+introduire la dérogation @w{@code{\override Beam.breakable = ##t}}.
@lilypond[quote,ragged-right,relative=2,verbatim]
-\override Beam #'breakable = ##t
+\override Beam.breakable = ##t
c2. c8[ c | \break
c8 c] c2. |
@end lilypond
avec ces deux instructions dérogatoires :
@example
-\override NonMusicalPaperColumn #'line-break-permission = ##f
-\override NonMusicalPaperColumn #'page-break-permission = ##f
+\override NonMusicalPaperColumn.line-break-permission = ##f
+\override NonMusicalPaperColumn.page-break-permission = ##f
@end example
Lorsque vous désactivez @code{line-break-permission}, LilyPond
\layout {
\context {
\Score
- \override NonMusicalPaperColumn #'line-break-permission = ##f
- \override NonMusicalPaperColumn #'page-break-permission = ##f
+ \override NonMusicalPaperColumn.line-break-permission = ##f
+ \override NonMusicalPaperColumn.page-break-permission = ##f
}
}
}
\score {
\new Staff <<
\new Voice {
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
s1 * 2 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 35))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 35))
s1 * 3 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 70))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 70))
s1 * 6 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 105))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 105))
s1 * 5 \break
}
\new Voice {
#(define zero-space '((padding . -inf.0) (basic-distance . 0)))
alignToZero = \with {
- \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space
- \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #zero-space
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #zero-space
}
lowerCaseChords = \with {
chordNameLowercaseMinor = ##t
}
staffAffinityDown = \with {
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
labelContext =
#(define-music-function
\lowerCaseChords }
\context { \FretBoards \alignToZero \staffAffinityDown }
\context { \Score
- \override BarLine #'stencil = ##f
- \override DynamicText #'self-alignment-X = #-1
- \override FretBoard #'X-offset = #1.75
- \override InstrumentName #'minimum-Y-extent = #'(-2 . 2)
- \override InstrumentName #'extra-offset = #'(0 . -0.5)
- \override TextScript #'minimum-Y-extent = #'(-2 . 3)
- \override TimeSignature #'stencil = ##f
+ \override BarLine.stencil = ##f
+ \override DynamicText.self-alignment-X = #-1
+ \override FretBoard.X-offset = #1.75
+ \override InstrumentName.minimum-Y-extent = #'(-2 . 2)
+ \override InstrumentName.extra-offset = #'(0 . -0.5)
+ \override TextScript.minimum-Y-extent = #'(-2 . 3)
+ \override TimeSignature.stencil = ##f
}
}
@example
\new Staff \with @{
- \override VerticalAxisGroup #'staff-staff-spacing #'basic-distance = #10
+ \override VerticalAxisGroup.staff-staff-spacing.basic-distance = #10
@} @{ @dots{} @}
\new Staff \with @{
- \override VerticalAxisGroup #'staff-staff-spacing =
+ \override VerticalAxisGroup.staff-staff-spacing =
#'(('basic-distance . 10)
(minimum-distance . 9)
(padding . 1)
\layout @{
\context @{
\Staff
- \override VerticalAxisGroup #'staff-staff-spacing #'basic-distance = #10
+ \override VerticalAxisGroup.staff-staff-spacing.basic-distance = #10
@}
@}
@end example
\layout {
\context {
\Staff
- \override VerticalAxisGroup #'default-staff-staff-spacing =
+ \override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 8)
(minimum-distance . 7)
(padding . 1))
% By setting 'padding to a negative value, staves can be made to
% collide. The lowest acceptable value for 'basic-distance is 0.
\new Staff \with {
- \override VerticalAxisGroup #'default-staff-staff-spacing =
+ \override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 3.5)
(padding . -10))
} { \clef bass g2 r | }
\layout {
\context {
\Score
- \override StaffGrouper #'staff-staff-spacing #'padding = #0
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #0
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #1
}
}
<<
\new PianoStaff \with {
- \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20
+ \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
} <<
\new Staff { c'1 }
\new Staff { c'1 }
\layout {
\context {
\Lyrics
- \override VerticalAxisGroup
- #'nonstaff-nonstaff-spacing #'stretchability = #1000
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing.stretchability = #1000
}
}
\new StaffGroup
<<
\new Staff \with {
- \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 30))
+ \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30))
} { c'1 }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #UP
+ \override VerticalAxisGroup.staff-affinity = #UP
} \lyricmode { up }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #CENTER
+ \override VerticalAxisGroup.staff-affinity = #CENTER
} \lyricmode { center }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
} \lyricmode { down }
\new Staff { c'1 }
>>
de la commande @code{\overrideProperty} :
@example
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((Y-offset . 40))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20)
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
(Y-offset . 40))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((alignment-distances . (15)))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((alignment-distances . (15)))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20)
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
(Y-offset . 40)
(alignment-distances . (15)))
@end example
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 40))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 80))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 80))
s1*5 \break
}
\new Voice { \repeat unfold 15 { c'4 c' c' c' } }
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 20)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 20)
(alignment-distances . (15)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 60)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
(alignment-distances . (15)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 100)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
(alignment-distances . (15)))
s1*5 \break
}
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0)
(alignment-distances . (30 10)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 60)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
(alignment-distances . (10 10)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 100)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
(alignment-distances . (10 30)))
s1*5 \break
}
@lilypond[quote,ragged-right,relative=2,verbatim]
c4_"Text"\pp
r2.
-\once \override TextScript #'outside-staff-priority = #1
+\once \override TextScript.outside-staff-priority = #1
c4_"Text"\pp % this time the text will be closer to the staff
r2.
% by setting outside-staff-priority to a non-number,
% we disable the automatic collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
-\once \override DynamicLineSpanner #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
+\once \override DynamicLineSpanner.outside-staff-priority = ##f
c4_"Text"\pp % now they will collide
@end lilypond
@c KEEP LY
@lilypond[quote,ragged-right,relative=2,verbatim,staffsize=18]
-\once \override TextScript #'outside-staff-padding = #0
+\once \override TextScript.outside-staff-padding = #0
a'^"Ce texte est placé au plus près de la note"
-\once \override TextScript #'outside-staff-padding = #3
+\once \override TextScript.outside-staff-padding = #3
c^"Ce texte est décalé par rapport au texte précédent"
c^"Ce texte est accolé au texte précédent"
@end lilypond
c''2
% setting outside-staff-horizontal-padding fixes this
R1
-\once \override TextScript #'outside-staff-horizontal-padding = #1
+\once \override TextScript.outside-staff-horizontal-padding = #1
c,,4^"Text"
c4
c''2
{
c'4 e''4 e'4 b'4 |
b'4 e''4 b'4 e''4 |
- \override Staff.NoteSpacing #'stem-spacing-correction = #1.5
- \override Staff.StaffSpacing #'stem-spacing-correction = #1.5
+ \override Staff.NoteSpacing.stem-spacing-correction = #1.5
+ \override Staff.StaffSpacing.stem-spacing-correction = #1.5
c'4 e''4 e'4 b'4 |
b'4 e''4 b'4 e''4 |
}
suffit d'ajuster la valeur du décalage @emph{(padding)} autant que de
besoin.
@example
- \override Score.NonMusicalPaperColumn #'padding = #10
+ \override Score.NonMusicalPaperColumn.padding = #10
@end example
Il n'y a aucun moyen de diminuer l'espacement.
\layout {
\context {
\Score
- \override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 1 16)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16)
}
}
}
\layout {
\context {
\Score
- \override SpacingSpanner #'uniform-stretching = ##t
+ \override SpacingSpanner.uniform-stretching = ##t
}
}
}
d'ornement qui pourraient apparaître :
@lilypond[quote,ragged-right,relative=2,verbatim]
-\override Score.SpacingSpanner #'strict-note-spacing = ##t
+\override Score.SpacingSpanner.strict-note-spacing = ##t
\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] }
@end lilypond
@item @code{\remove "Separating_line_group_engraver"}
-@item @code{\override PaperColumn #'used = ##t}
+@item @code{\override PaperColumn.used = ##t}
@end itemize
\context {
\Score
proportionalNotationDuration = #(ly:make-moment 1 20)
- \override SpacingSpanner #'uniform-stretching = ##t
+ \override SpacingSpanner.uniform-stretching = ##t
}
}
}
\new Staff {
\set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
- \override Score.SpacingSpanner #'strict-note-spacing = ##t
+ \override Score.SpacingSpanner.strict-note-spacing = ##t
c''8
c''8
c''8
réglages en usage dans la notation proportionnelle comme, entre autres,
@itemize
-@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
+@item @code{\override SpacingSpanner.strict-grace-spacing = ##t}
@item @code{tupletFullLength = ##t}
-@item @code{\override Beam #'breakable = ##t}
-@item @code{\override Glissando #'breakable = ##t}
-@item @code{\override TextSpanner #'breakable = ##t}
-@item @code{\remove "Forbid_line_break_engraver" dans le contexte de voix}
+@item @code{\override Beam.breakable = ##t}
+@item @code{\override Glissando.breakable = ##t}
+@item @code{\override TextSpanner.breakable = ##t}
+@item @code{\remove "Forbid_line_break_engraver"} (dans un contexte de voix)
@end itemize
Ces différents réglages permettent un espacement strict des notes
@lilypond[verbatim,quote,relative=1]
e4 c g\f c
-e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c
+e4 c g-\tweak X-offset #-2.7 -\tweak Y-offset #2.5 \f c
@end lilypond
@item
\layout {
\context {
\Score
- \override SpacingSpanner
- #'common-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 2)
}
}
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: John Mandereau
@lilypond[verbatim,quote,relative=2]
f4 d \stopStaff
-\override Staff.StaffSymbol #'line-count = #2
+\override Staff.StaffSymbol.line-count = #2
\startStaff g, e |
f'4 d \stopStaff
-\revert Staff.StaffSymbol #'line-count
+\revert Staff.StaffSymbol.line-count
\startStaff g, e |
@end lilypond
@lilypond[verbatim,quote,relative=2]
f4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(1 3 5 -1 -3)
+\override Staff.StaffSymbol.line-positions = #'(1 3 5 -1 -3)
\startStaff g, e |
f'4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(8 6.5 -6 -8 -0.5)
+\override Staff.StaffSymbol.line-positions = #'(8 6.5 -6 -8 -0.5)
\startStaff g, e
@end lilypond
@lilypond[verbatim,quote,relative=1]
\new Staff \with {
- \override StaffSymbol #'thickness = #3
+ \override StaffSymbol.thickness = #3
}
{ e4 d c b }
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'thickness = #2
- \override StaffSymbol #'ledger-line-thickness = #'(0.5 . 0.4)
+ \override StaffSymbol.thickness = #2
+ \override StaffSymbol.ledger-line-thickness = #'(0.5 . 0.4)
}
{ f'4 a, a,, f }
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'ledger-positions = #'(-3 -2 -1 2 5 6)
+ \override StaffSymbol.ledger-positions = #'(-3 -2 -1 2 5 6)
}
{ f'4 a, a,, f }
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'ledger-extra = #4
+ \override StaffSymbol.ledger-extra = #4
}
{ f'4 a, d, f, }
@end lilypond
@code{\override} qui s'applique à l'intégralité du @code{StaffSymbol}.
@lilypond[fragment,quote,relative=1]
-\override Staff.StaffSymbol #'line-positions = #'(-8 0 2 4)
+\override Staff.StaffSymbol.line-positions = #'(-8 0 2 4)
d4 e f g
\stopStaff
\startStaff
-\override Staff.StaffSymbol #'ledger-positions = #'(-8 -6 (-4 -2) 0)
+\override Staff.StaffSymbol.ledger-positions = #'(-8 -6 (-4 -2) 0)
d4 e f g
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'staff-space = #1.5
+ \override StaffSymbol.staff-space = #1.5
}
{ f'4 d, g, e, }
@end lilypond
\remove "Time_signature_engraver"
alignAboveContext = #"main"
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
firstClef = ##f
}
{ e4 d f e }
<<
\new Staff = ossia \with {
\remove "Time_signature_engraver"
- \override Clef #'transparent = ##t
+ \override Clef.transparent = ##t
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
}
{ \stopStaff s1*6 }
<<
\new Staff = ossia \with {
\remove "Time_signature_engraver"
- \override Clef #'transparent = ##t
+ \override Clef.transparent = ##t
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
} \relative c'' {
R1*3
c4 e8 d c2
\layout {
\context {
\Staff \RemoveEmptyStaves
- \override VerticalAxisGroup #'remove-first = ##t
+ \override VerticalAxisGroup.remove-first = ##t
}
}
@end lilypond
graveur, recourir aux dérogations suivantes :
@example
-\override StaffSymbol #'stencil = ##f
-\override NoteHead #'no-ledgers = ##t
+\override StaffSymbol.stencil = ##f
+\override NoteHead.no-ledgers = ##t
@end example
En ce qui concerne les désagréments et messages liés à l'utilisation de
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Jean-Charles Malahieude
@c Translation checkers: Valentin Villenave, John Mandereau
vous pouvez toutefois vous en affranchir en ajoutant
@example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
@end example
entre deux notes à l'aide de la syntaxe suivante :
@lilypond[verbatim,quote,relative=2]
-\override TextSpanner #'(bound-details left text) = "rit."
+\override TextSpanner.bound-details.left.text = "rit."
b1\startTextSpan
e,\stopTextSpan
@end lilypond
voir @ref{Mise en forme du texte}.
@lilypond[quote,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text) =
+\override TextSpanner.bound-details.left.text =
\markup { \upright "rit." }
b1\startTextSpan c
e,\stopTextSpan
défaut.
@lilypond[quote,verbatim,relative=2]
-\override Score.RehearsalMark #'font-family = #'typewriter
+\override Score.RehearsalMark.font-family = #'typewriter
\mark \markup "Ouverture"
-\override Voice.TextScript #'font-shape = #'italic
-\override Voice.TextScript #'font-series = #'bold
+\override Voice.TextScript.font-shape = #'italic
+\override Voice.TextScript.font-series = #'bold
d2.^\markup "Allegro"
-\override Voice.TextScript #'font-size = #-3
+\override Voice.TextScript.font-size = #-3
c4^smaller
@end lilypond
respectez la syntaxe suivante :
@lilypond[quote,verbatim,relative=2]
-\override Staff.TimeSignature #'font-name = #"Bitstream Charter"
-\override Staff.TimeSignature #'font-size = #2
+\override Staff.TimeSignature.font-name = #"Bitstream Charter"
+\override Staff.TimeSignature.font-size = #2
\time 3/4
a1_\markup {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Jean-Jacques Gerbaud
d'une commande. En d'autres termes, @strong{ne saisissez pas}
@example
-\override Score.LyricText #'font-shape = #'italic
+\override Score.LyricText.font-shape = #'italic
@end example
@noindent
mais plutôt
@example
-\override Score . LyricText #'font-shape = #'italic
+\override Score.LyricText.font-shape = #'italic
@end example
Pour utiliser des lettres accentuées ou des caractères spéciaux
<<
\new Lyrics = "lyrics" \with {
% lyrics above a staff should have this override
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff {
\new Voice = "melody" {
\new Lyrics = "sopranos"
\new Lyrics = "contraltos" \with {
% lyrics above a staff should have this override
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff {
\new Voice = "contraltos" {
@lilypond[relative=1,verbatim,quote,ragged-right]
{
c c c c
- \override Lyrics.LyricSpace #'minimum-distance = #1.0
+ \override Lyrics.LyricSpace.minimum-distance = #1.0
c c c c
}
\addlyrics {
\layout {
\context {
\Lyrics
- \override LyricSpace #'minimum-distance = #1.0
+ \override LyricSpace.minimum-distance = #1.0
}
}
}
fonctionnalité en ajoutant
@example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
@end example
Pour s'assurer que les paroles ne seront pas traversées par des barres
\Lyrics
\consists "Bar_engraver"
\consists "Separating_line_group_engraver"
- \override BarLine #'transparent = ##t
+ \override BarLine.transparent = ##t
@}
@}
@end example
\voiceOne
\times 2/3 {
% show associations clearly.
- \override NoteColumn #'force-hshift = #-3
+ \override NoteColumn.force-hshift = #-3
f8 f g
}
}
\layout {
\context {
\Score
- \override DynamicText #'direction = #UP
- \override DynamicLineSpanner #'direction = #UP
+ \override DynamicText.direction = #UP
+ \override DynamicLineSpanner.direction = #UP
}
}
}
% position name of cue-ing instrument just before the cue notes,
% and above the staff
\new CueVoice {
- \override InstrumentSwitch #'self-alignment-X = #RIGHT
+ \override InstrumentSwitch.self-alignment-X = #RIGHT
\set instrumentCueName = "Flute"
}
\cueDuring "flute" #UP { g4 bes4 }
\transposition c'
% position name of cue-ing instrument below the staff
\new CueVoice {
- \override InstrumentSwitch #'self-alignment-X = #RIGHT
- \override InstrumentSwitch #'direction = #DOWN
+ \override InstrumentSwitch.self-alignment-X = #RIGHT
+ \override InstrumentSwitch.direction = #DOWN
\set instrumentCueName = "Clar."
}
\cueDuring "clarinet" #DOWN { c4. g8 }
\score {
<<
\new Lyrics \with {
- \override LyricText #'font-shape = #'italic
- \override LyricText #'self-alignment-X = #LEFT
+ \override LyricText.font-shape = #'italic
+ \override LyricText.self-alignment-X = #LEFT
}
{ \dialogue }
\new Staff {
rythme et l'accentuation des paroles elles-mêmes.
@lilypond[verbatim,quote]
-stemOff = { \override Staff.Stem #'transparent = ##t }
+stemOff = { \override Staff.Stem.transparent = ##t }
\relative c' {
\stemOff
\bar "'"
a4 b c2
a4 b c2
-\bar ":"
+\bar ";"
a4 b c2
-\bar "dashed"
+\bar "!"
a4 b c2
\bar "||"
@end lilypond
@lilypond[verbatim,quote]
divisioMinima = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-minima
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
divisioMaior = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maior
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maior
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
divisioMaxima = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maxima
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maxima
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
finalis = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::finalis
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::finalis
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
\layout {
\context {
\Score
- \override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 2)
}
\context {
\Staff
<!--
- Translation of GIT committish: 5198521ee5e91631a2cbf236d79489b12624797b
+ Translation of GIT committish: a278b3a9015f156998816868f09929a4c07d698c
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
<!--
we depend on an external entity here, which we cannot control. Suppose
-we go from 2.16.x to 2.17.x and put the documentation under "v2.17".
+we go from 2.15.x to 2.17.x and put the documentation under "v2.17".
For some time, Google won't have the new location in its index, so the
-search would get nothing. It would be better to keep "v2.16" in the
-search for a while and have a redirection from "v2.16" to "v2.17".
+search would get nothing. It would be better to keep "v2.15" in the
+search for a while and have a redirection from "v2.15" to "v2.17".
-->
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org/doc/v2.16 '
+ onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org/doc/v2.16 '
+ onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org/doc/v2.16 '
+ onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Recherche sur Google">
<input type="text" name="brute_query" onfocus="this.value=''" value="Rechercher">
+++ /dev/null
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Jean-Charles Malahieude
@c Translation checkers:
les notes, placées sur la portée inférieure, restent en noir.
@lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
\new Staff { a }
@end lilypond
@lilypond[quote,verbatim,relative=2]
\new Staff {
- \override Staff.NoteHead #'color = #red
+ \override Staff.NoteHead.color = #red
a
}
@end lilypond
une portée, à l'aide de l'instruction
@example
-\override VerticalAxisGroup #'staff-affinity = ##f
+\override VerticalAxisGroup.staff-affinity = ##f
@end example
@noindent
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
ISOLANG = hu
depth = ../..
-SUBDIRS = web learning texidocs usage included
STEPMAKE_TEMPLATES = documentation texinfo
LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
+++ /dev/null
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
@c -*- coding: utf-8; mode: texinfo; -*-
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Alapfogalmak
@chapter Alapfogalmak
@translationof Fundamental concepts
\\ % Voice four
{
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'force-hshift = #0
+ \once \override NoteColumn.force-hshift = #0
<ees c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
>> |
\\ % Voice four
{ \voiceThreeStyle
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'force-hshift = #0
+ \once \override NoteColumn.force-hshift = #0
<ees c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
>>
@c TODO Avoid padtext - not needed with skylining
@lilypond[quote,verbatim,ragged-right]
dolce = \markup { \italic \bold dolce }
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
fthenp=_\markup { \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
violin = \relative c'' {
\repeat volta 2 {
violin = \relative c'' @{
\repeat volta 2 @{
c4._\markup @{ \italic \bold dolce @} b8 a8 g a b
- \once \override TextScript #'padding = #5.0
+ \once \override TextScript.padding = #5.0
c4.^"hi there!" d8 e' f g d
c,4.\markup @{ \dynamic f \italic \small @{ 2nd @}
\hspace #0.1 \dynamic p @}
padText =
#(define-music-function (parser location padding) (number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
--- /dev/null
+@c -*- coding: utf-8; mode: texinfo; -*-
+
+@ignore
+ Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+ When revising a translation, copy the HEAD committish of the
+ version that you are working on. For details, see the Contributors'
+ Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.16.0"
+
+@node Preface
+@unnumbered Preface
+
+
+It must have been during a rehearsal of the EJE (Eindhoven Youth
+Orchestra), somewhere in 1995 that Jan, one of the cranked violists,
+told Han-Wen, one of the distorted French horn players, about the
+grand new project he was working on. It was an automated system for
+printing music (to be precise, it was MPP, a preprocessor for
+MusiXTeX). As it happened, Han-Wen accidentally wanted to print out
+some parts from a score, so he started looking at the software, and he
+quickly got hooked. It was decided that MPP was a dead end. After
+lots of philosophizing and heated email exchanges, Han-Wen started
+LilyPond in 1996. This time, Jan got sucked into Han-Wen's new
+project.
+
+In some ways, developing a computer program is like learning to play
+an instrument. In the beginning, discovering how it works is fun, and
+the things you cannot do are challenging. After the initial excitement,
+you have to practice and practice. Scales and studies can be dull, and
+if you are not motivated by others -- teachers, conductors or
+audience -- it is very tempting to give up. You continue, and gradually
+playing becomes a part of your life. Some days it comes naturally, and
+it is wonderful, and on some days it just does not work, but you keep
+playing, day after day.
+
+Like making music, working on LilyPond can be dull work, and on
+some days it feels like plodding through a morass of bugs.
+Nevertheless, it has become a part of our life, and we keep doing it.
+Probably the most important motivation is that our program actually
+does something useful for people. When we browse around the net we
+find many people who use LilyPond, and produce impressive pieces of
+sheet music. Seeing that feels unreal, but in a very pleasant way.
+
+Our users not only give us good vibes by using our program, many of
+them also help us by giving suggestions and sending bug reports, so we
+would like to thank all users that sent us bug reports, gave
+suggestions or contributed in any other way to LilyPond.
+
+Playing and printing music is more than a nice analogy. Programming
+together is a lot of fun, and helping people is deeply satisfying, but
+ultimately, working on LilyPond is a way to express our deep love for
+music. May it help you create lots of beautiful music!
+
+Han-Wen and Jan
+
+Utrecht/Eindhoven, The Netherlands, July 2002.
+
@c -*- coding: utf-8; mode: texinfo; -*-
-@c \version "2.16.0"
+@c \version "2.17.6"
@node A kimenet finomhangolása
@chapter A kimenet finomhangolása
@translationof Tweaking output
@c line-width ensures no break
@c line-width ensures no break
@c ode{staff-position} property, which is specified in half staff
-@c ode{\once \override Tie #'staff-position = #3.5}
+@c ode{\once \override Tie.staff-position = #3.5}
@c line-width ensures no break
@c line-width ensures no break
@c index Tie, example of overriding
@c index variables, using for tweaks
@c index using variables for tweaks
@c index tweaks, using variables for
-@c ode{\override Lyrics . LyricText #'font-shape = #'italic}
-@c ode{\override Lyrics . LyricText #'font-series = #'bold}
-@c ode{\revert Lyrics . LyricText #'font-shape}
-@c ode{\revert Lyrics . LyricText #'font-series}
+@c ode{\override Lyrics.LyricText.font-shape = #'italic}
+@c ode{\override Lyrics.LyricText.font-series = #'bold}
+@c ode{\revert Lyrics.LyricText.font-shape}
+@c ode{\revert Lyrics.LyricText.font-series}
@c index LyricText, example of overriding
@c index font-shape property, example
@c index font-series property, example
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org +v2.16 '
+ onSubmit="search.q.value='site:lilypond.org +v2.17 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org +v2.16 '
+ onMouseMove="search.q.value='site:lilypond.org +v2.17 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org +v2.16 '
+ onKeyUp="search.q.value='site:lilypond.org +v2.17 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Google keresés">
<input type="text" name="brute_query" onfocus="this.value=''" value="Keresés">
+++ /dev/null
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node A lilypond használata
színű, fekete kottafejek lesznek.
@lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
\new Staff { a }
@end lilypond
@lilypond[quote,verbatim,relative=2]
\new Staff {
- \override Staff.NoteHead #'color = #red
+ \override Staff.NoteHead.color = #red
a
}
@end lilypond
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
@c -*- coding: utf-8; mode: texinfo; -*-
-@c This file is part of community.itexi and ../topdocs/AUTHORS.itexi
+@c This file is part of community.itexi
@ignore
list is sorted alphabetically by surname. This file lists people
that have contributed more than a few hours of work.
- Developers are people who are (or have been) listed under the
- "Development Team" in the THANKS, and can choose their own
- titles. Contributors are everybody else, and simply list their
+ Developers are people who have been listed under the "Development
+ Team" in Documentation/misc/THANKS*, or who are added when they
+ reach a significant amount of contributions with respect to the
+ existing Developers list, and can choose their own titles.
+ Contributors are everybody else, and simply list their
contributions. All lists are sorted alphabetically.
Anybody who has finished doing a "main devel team" task should
+++ /dev/null
-depth = ../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES= README
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
list is sorted alphabetically by surname. This file lists people
that have contributed more than a few hours of work.
- Developers are people who are (or have been) listed under the
- "Development Team" in the THANKS, and can choose their own
- titles. Contributors are everybody else, and simply list their
+ Developers are people who have been listed under the "Development
+ Team" in Documentation/misc/THANKS*, or who are added when they
+ reach a significant amount of contributions with respect to the
+ existing Developers list, and can choose their own titles.
+ Contributors are everybody else, and simply list their
contributions. All lists are sorted alphabetically.
+ Developers should be listed under "main developers" and nowhere
+ else. Main developers may appear in both the current and previous.
Anybody who has finished doing a "main devel team" task should
list it under developersPrevious, even if they're still doing
other "main devel team" stuff. See "Graham Percival" for an
example.
- Contributors are also split between Current and Previous, and
- each category contains:
+ Contributors are also split between Current and Previous.
+ Anybody who worked on anything up to and including the latest
+ stable release should be listed under "previous contributors".
+ Contributors who worked on the unstable release should be listed
+ under "current contributors". A contributor can thus be listed
+ twice (under previous and current).
+
+ Each category contains:
core... (programming)
font... (duh)
doc... (documentation and examples)
Core developer
@item Mike Solomon:
-@email{mike@@apollinemike.com},
+@email{mike@@mikesolomon.org},
Core developer, Frog meister
@item Carl Sorensen:
@item Valentin Villenave:
LSR editor and Bug squad member
-@item Jan Warchoł:
+@item Janek Warchoł:
happy nitpicker
@end itemize
@c use commas not colons
Aleksandr Andreev,
-Sven Axelsson,
-Peter Chubb,
-Karin Hoethker,
Marc Hohl,
-David Nalesnik,
-Justin Ohmie,
+Keith OHara,
Benkő Pál,
-Julien Rioux,
-Patrick Schmidt,
-Adam Spiers,
-Heikki Taurainen,
-Piers Titus van der Torren,
-Jan-Peter Voigt,
-Janek Warchol
+Julien Rioux
@c no comma for last entry
@c use commas not colons
+Frédéric Bron,
James Lowe,
-Pavel Roskin,
-Alberto Simoes,
-Stefan Weil
+Arnold Theresius,
+Rodolfo Zitellini
@c no comma for last entry
@macro bugsquadCurrent
+@c use commas not colons
+
Colin Campbell,
Eluze,
+Marc Hohl,
Phil Holmes,
Marek Klein,
-Ralph Palmer,
-James Lowe
+Ralph Palmer
@c no comma for last entry
@c use commas not colons
-Colin Campbell,
-Christian Hitz,
-Phil Holmes
-
@c no comma for last entry
@end macro
@c use commas not colons
+Federico Bruni,
+Felipe Castro,
+Pavel Fric,
Jean-Charles Malahieude,
-Till Paala,
-Yoshiki Sawada
+Till Rettig
@c no comma for last entry
Erlend Aasland,
Maximilian Albert,
+Aleksandr Andreev,
Guido Amoruso,
Sven Axelsson,
Kristof Bastiaensen,
Pál Benkő,
-Bertrand Bordage,
Frédéric Bron,
Juliusz Chroboczek,
Peter Chubb,
Yuval Harel,
Andrew Hawryluk,
Christian Hitz,
+Karin Hoethker,
Marc Hohl,
-Ian Hulin,
Bernard Hurley,
Yoshinobu Ishizaki,
Chris Jackson,
Kieren MacMillan,
Hendrik Maryns,
Thomas Morgan,
-Joe Neeman,
+David Nalesnik,
Matthias Neeracher,
Keith OHara,
+Justin Ohmie,
Tatsuya Ono,
+Benkő Pál,
Benjamin Peterson,
Guy Gascoigne-Piggford,
Henning Hraban Ramm,
Boris Shingarov,
Kim Shrier,
Edward Sanford Sutton,
+Adam Spiers,
David Svoboda,
+Heikki Taurainen,
+Piers Titus van der Torren,
Owen Tuz,
Sebastiano Vigna,
-Jan Warchoł,
+Jan-Peter Voigt,
Arno Waschk,
John Williams,
Andrew Wilson,
Andrew Hawryluk,
Cameron Horsburgh,
Geoff Horton,
-Ian Hulin,
Heikki Junes,
Kurtis Kroon,
James Lowe,
David Pounder,
Michael Rasmussen,
Till Rettig,
+Pavel Roskin,
Patrick Schmidt,
-Carl D. Sorensen,
+Alberto Simoes,
Anh Hai Trinh,
Eduardo Vieira,
+Stefan Weil,
Rune Zedeler
@c no comma for last entry
@macro bugsquadPrevious
@c use commas not colons
+
+Colin Campbell,
James E. Bailey,
+Eluze,
+Phil Holmes,
Derek Klinge,
+Marek Klein,
Urs Liska,
+James Lowe,
Kieren MacMillan,
Ralph Palmer,
Dmytro O. Redchuk
@c use commas not colons
+Colin Campbell,
Anthony Fok,
Christian Hitz,
+Phil Holmes,
Chris Jackson,
Heikki Junes,
David Svoboda
-\version "2.16.0"
+\version "2.17.6"
#(define (filter-instrument instrument-name tuning-alist)
(filter (lambda (entry)
{
\new Staff {
\textLengthOn
- \override Score.RehearsalMark #'self-alignment-X = #LEFT
+ \override Score.RehearsalMark.self-alignment-X = #LEFT
\mark \markup {\left-align "Guitar tunings"}
\clef "treble_8"
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
myStaffSize = 20
{
\set Staff.instrumentName = #"Gonv override"
c2^\trill c
- \override NoteHead #'font-family = #'gonville
- \override Script #'font-family = #'gonville
+ \override NoteHead.font-family = #'gonville
+ \override Script.font-family = #'gonville
c^\trill c
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="
pattern = <<
\new Voice {
- \override Stem #'direction = #UP
+ \override Stem.direction = #UP
e'4 e'2. e'1 e'\breve*1/2 e'\longa*1/4 \bar "||"
}
\new Voice {
- \override Stem #'direction = #DOWN
+ \override Stem.direction = #DOWN
a4 a2. a1 a\breve*1/2 a\longa*1/4 \bar "||"
}
>>
\transpose c c {
\clef C
- \override Staff.NoteHead #'style = #'default
+ \override Staff.NoteHead.style = #'default
s1*0^\markup { "default" }
\pattern
- \override Staff.NoteHead #'style = #'altdefault
+ \override Staff.NoteHead.style = #'altdefault
s1*0^\markup { "altdefault" }
\pattern
\break
- \override Staff.NoteHead #'style = #'baroque
+ \override Staff.NoteHead.style = #'baroque
s1*0^\markup { "baroque" }
\pattern
- \override Staff.NoteHead #'style = #'neomensural
+ \override Staff.NoteHead.style = #'neomensural
s1*0^\markup { "neomensural" }
\pattern
\break
- \override Staff.NoteHead #'style = #'mensural
+ \override Staff.NoteHead.style = #'mensural
s1*0^\markup { "mensural" }
\pattern
- \override Staff.NoteHead #'style = #'petrucci
+ \override Staff.NoteHead.style = #'petrucci
s1*0^\markup { "petrucci" }
\pattern
\break
- \override Staff.NoteHead #'style = #'harmonic
+ \override Staff.NoteHead.style = #'harmonic
s1*0^\markup { "harmonic" }
\pattern
- \override Staff.NoteHead #'style = #'harmonic-black
+ \override Staff.NoteHead.style = #'harmonic-black
s1*0^\markup { "harmonic-black" }
\pattern
\break
- \override Staff.NoteHead #'style = #'harmonic-mixed
+ \override Staff.NoteHead.style = #'harmonic-mixed
s1*0^\markup { "harmonic-mixed" }
\pattern
- \override Staff.NoteHead #'style = #'diamond
+ \override Staff.NoteHead.style = #'diamond
s1*0^\markup { "diamond" }
\pattern
\break
- \override Staff.NoteHead #'style = #'cross
+ \override Staff.NoteHead.style = #'cross
s1*0^\markup { "cross" }
\pattern
- \override Staff.NoteHead #'style = #'xcircle
+ \override Staff.NoteHead.style = #'xcircle
s1*0^\markup { "xcircle" }
\pattern
\break
- \override Staff.NoteHead #'style = #'triangle
+ \override Staff.NoteHead.style = #'triangle
s1*0^\markup { "triangle" }
\pattern
- \override Staff.NoteHead #'style = #'slash
+ \override Staff.NoteHead.style = #'slash
s1*0^\markup { "slash" }
\pattern
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc ="@cindex Feta scripts
\Score
timing = ##f
barAlways = ##t
- \override NonMusicalPaperColumn #'padding = #2.5
- \override PaperColumn #'keep-inside-line = ##t
+ \override NonMusicalPaperColumn.padding = #2.5
+ \override PaperColumn.keep-inside-line = ##t
}
\context {
\RhythmicStaff
\remove "Time_signature_engraver"
- \override BarLine #'transparent = ##t
- \override Stem #'direction = #down
+ \override BarLine.transparent = ##t
+ \override Stem.direction = #down
}
\context {
\Lyrics
- \override LyricText #'font-family = #'typewriter
- \override LyricText #'font-shape = #'upright
+ \override LyricText.font-family = #'typewriter
+ \override LyricText.font-shape = #'upright
}
\context {
\VaticanaVoice
- \override Script #'padding = #0
+ \override Script.padding = #0
}
}
ISOLANG = it
depth = ../..
-SUBDIRS = learning texidocs web usage included notation
STEPMAKE_TEMPLATES = documentation texinfo
LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Concetti fondamentali
@chapter Concetti fondamentali
\\ % Voice two
{
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'ignore-collision = ##t
+ \once \override NoteColumn.ignore-collision = ##t
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\ % No voice three
\\ % Voice four
{
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
\\ % Voice two
{ \voiceTwoStyle
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'ignore-collision = ##t
+ \once \override NoteColumn.ignore-collision = ##t
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\ % No Voice three (we want stems down)
\\ % Voice four
{ \voiceThreeStyle
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
@}
>> % fine del contesto ManualOne Staff
\new Staff = "ManualTwo" \with @{
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
@} <<
\keyTime
\clef "bass"
}
>> % end ManualOne Staff context
\new Staff = "ManualTwo" \with {
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
} <<
\keyTime
\clef "bass"
@lilypond[quote,verbatim,ragged-right]
dolce = \markup { \italic \bold dolce }
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
fthenp =_\markup {
\dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}
violin = \relative c'' @{
\repeat volta 2 @{
c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
- \once \override TextScript #'padding = #5.0
+ \once \override TextScript.padding = #5.0
c4.^"hi there!" d8 e' f g d |
c,4.\markup @{
\dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Modifica dell'output
@chapter Modifica dell'output
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
g4 a b c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
b4 c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\once \override NoteHead #'color = #green
+\once \override NoteHead.color = #green
g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
b c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>4
-\once \override NoteHead #'font-size = #-3
+\once \override NoteHead.font-size = #-3
<c e g>4
<c e g>4
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>4
-<c \tweak #'font-size #-3 e g>4
+<c \tweak font-size #-3 e g>4
@end lilypond
Si noti che la sintassi di @code{\tweak} è diversa da quella di
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
a4^"Black"
- -\tweak #'color #red ^"Red"
- -\tweak #'color #green _"Green"
+ -\tweak color #red ^"Red"
+ -\tweak color #green _"Green"
@end lilypond
@noindent
seguire la sua origine fino all'evento originale:
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-<\tweak Accidental #'color #red cis4
- \tweak Accidental #'color #green es
+<\tweak Accidental.color #red cis4
+ \tweak Accidental.color #green es
g>
@end lilypond
@cindex colore, esempio
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
+\tweak direction #up
\times 4/3 {
- \tweak #'color #red
+ \tweak color #red
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
@c See issue 509
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
\times 2/3 { c8[ c c] }
-\once \override TupletNumber
- #'text = #tuplet-number::calc-fraction-text
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
\times 2/3 {
c8[ c]
c8[ c]
- \once \override TupletNumber #'transparent = ##t
+ \once \override TupletNumber.transparent = ##t
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
}
spessore, per essere sicuri che il comando funzioni:
@example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
@end example
Non dimenticare il @code{#'} che precede il nome della
\time 6/8
{
% Increase thickness of all following slurs from 1.2 to 5.0
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
r4 bes8 bes[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
{
r4 bes8
% Aumenta lo spessore solo della legatura che segue
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes8[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
{
r4 bes8
% Aumenta lo spessore solo della legatura che segue
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes[( g]) g |
% Aumenta lo spessore solo della legatura che segue
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
g8[( es]) es d[( f]) as |
as8 g
}
{
r4 bes8
% Aumenta lo spessore di tutte le legature di portamento che seguono da 1.2 a 5.0
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
bes[( g]) g |
g8[( es]) es
% Ripristina lo spessore di tutte le legature di portamento che seguono al valore predefinito 1.2
- \revert Slur #'thickness
+ \revert Slur.thickness
d8[( f]) as |
as8 g
}
Quindi il comando @code{\override} che rende il testo corsivo è:
@example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
@end example
@noindent
as8 g
}
\addlyrics {
- \override LyricText #'font-shape = #'italic
+ \override LyricText.font-shape = #'italic
The man who | feels love's sweet e -- | mo -- tion
}
}
l'interprete non sarà in grado di distinguerli. Dunque il comando sarà:
@example
-\override Lyrics . LyricText #'font-shape = #'italic
+\override Lyrics.LyricText.font-shape = #'italic
@end example
@warning{Nel testo bisogna lasciare sempre uno spazio bianco tra l'ultima
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override BarLine #'stencil = ##f
+ \override BarLine.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'stencil = ##f
+ \override Staff.BarLine.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,verbatim,relative=2]
{
c4 c
- \once \override NoteHead #'stencil = #point-stencil
+ \once \override NoteHead.stencil = #point-stencil
c4 c
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+ \override Staff.BarLine.break-visibility = #'#(#f #f #f)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'transparent = ##t
+ \override Staff.TimeSignature.transparent = ##t
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #white
+ \override Staff.BarLine.color = #white
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #(x11-color 'white)
+ \override Staff.BarLine.color = #(x11-color 'white)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+ \override Staff.BarLine.color = #(rgb-color 1 1 1)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.StaffSymbol #'color = #(x11-color 'grey30)
- \override Staff.TimeSignature #'color = #(x11-color 'grey60)
- \override Staff.Clef #'color = #(x11-color 'grey60)
- \override Voice.NoteHead #'color = #(x11-color 'grey85)
- \override Voice.Stem #'color = #(x11-color 'grey85)
- \override Staff.BarLine #'color = #(x11-color 'grey10)
+ \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+ \override Staff.TimeSignature.color = #(x11-color 'grey60)
+ \override Staff.Clef.color = #(x11-color 'grey60)
+ \override Voice.NoteHead.color = #(x11-color 'grey85)
+ \override Voice.Stem.color = #(x11-color 'grey85)
+ \override Staff.BarLine.color = #(x11-color 'grey10)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
alignAboveContext = #"main"
}
{
- \override Staff.Clef #'stencil = ##f
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.Clef.stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
{ f8 f c }
}
>>
\new Staff \with {
alignAboveContext = #"main"
% Nasconde le chiavi di questo rigo
- \override Clef #'stencil = ##f
+ \override Clef.stencil = ##f
% Nasconde le indicazioni di tempo di questo rigo
- \override TimeSignature #'stencil = ##f
+ \override TimeSignature.stencil = ##f
}
{ f8 f c }
>>
(@code{NoteHead}) con un comando di questo tipo
@example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
@end example
oppure possiamo modificare la dimensione di tutti i tipi di carattere usando
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \override Clef.stencil = ##f
+ \override TimeSignature.stencil = ##f
% Riduce la dimensione di tutti i tipi di carattere di circa il 24%
fontSize = #-2
}
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \override Clef.stencil = ##f
+ \override TimeSignature.stencil = ##f
fontSize = #-2
% Riduce proporzionalmente la lunghezza dei gambi e la spaziatura tra le linee
- \override StaffSymbol #'staff-space = #(magstep -2)
+ \override StaffSymbol.staff-space = #(magstep -2)
}
{ f8 f c }
>>
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
a4 g c a |
-\override Stem #'direction = #DOWN
+\override Stem.direction = #DOWN
a4 g c a |
-\override Stem #'direction = #UP
+\override Stem.direction = #UP
a4 g c a |
-\revert Stem #'direction
+\revert Stem.direction
a4 g c a |
@end lilypond
@lilypond[quote,verbatim,relative=2]
c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #DOWN
+\override Fingering.direction = #DOWN
c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #UP
+\override Fingering.direction = #UP
c4-5 a-3 f-1 c'-5 |
@end lilypond
con @w{@code{-7}}:
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
+\override Fingering.font-size = #-7
\set fingeringOrientations = #'(left)
<f-2>4
<c-1 e-2 g-3 b-5>4
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
% Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% Place dynamics above staff
\dynamicUp
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
% Imposta i dettagli per l'estensione del testo vocale seguente
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% Posiziona le indicazione dinamiche sopra il rigo
\dynamicUp
% Posiziona l'estensione del segno d'ottava sotto il testo vocale
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
% Inizia l'estensione del segno d'ottava
\ottava #1
c'4 \startTextSpan
@lilypond[quote,verbatim,relative=2]
c4( c^\markup { \tiny \sharp } d4.) c8 |
c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
c4^\markup { \tiny \sharp } d4.) c8 |
-\once \override Slur #'outside-staff-priority = #500
+\once \override Slur.outside-staff-priority = #500
c4( c^\markup { \tiny \sharp } d4.) c8 |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
c2^"Testo1"
c2^"Testo2" |
-\once \override TextScript #'outside-staff-priority = #500
+\once \override TextScript.outside-staff-priority = #500
c2^"Testo3"
c2^"Testo4" |
@end lilypond
R1 |
% Disattiva l'elusione delle collisioni
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
c,,2^"Testo Lungo " c'' |
R1 |
% Disattiva l'elusione delle collisioni
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
\textLengthOn % e attiva textLengthOn
c,,2^"Testo Lungo " % Gli spazi finali vengono rispettati
c''2 |
comando che lo fa sul testo della dinamica:
@example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
@end example
@noindent
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
a4\f b\mf c\mp b\p |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
% Aumenta la larghezza di 1 spazio rigo
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
c2\fermata
-\override Script #'padding = #3
+\override Script.padding = #3
b2\fermata
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
% Questo non funziona, vedi sotto
-\override MetronomeMark #'padding = #3
+\override MetronomeMark.padding = #3
\tempo 4 = 120
c1 |
% Questo funziona
-\override Score.MetronomeMark #'padding = #3
+\override Score.MetronomeMark.padding = #3
\tempo 4 = 80
d1 |
@end lilypond
\relative c'' {
c4
% Mostra un triesis (alterazione ascendente di tre quarti di tono) ma lo spazio è troppo stretto
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4 c
% Ecco come migliorare lo spazio
- \once \override Score.AccidentalPlacement #'right-padding = #0.6
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Score.AccidentalPlacement.right-padding = #0.6
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4 |
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
% Aumenta la larghezza di 1 unità
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
% Allinea le dinamiche alla base posta 2 unità sopra il rigo
-\override DynamicLineSpanner #'staff-padding = #2
+\override DynamicLineSpanner.staff-padding = #2
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=3]
\voiceOne
<a\2>
-\once \override StringNumber #'self-alignment-X = #RIGHT
+\once \override StringNumber.self-alignment-X = #RIGHT
<a\2>
@end lilypond
<<
{ c4 c c c }
\\
- \override MultiMeasureRest #'staff-position = #-8
+ \override MultiMeasureRest.staff-position = #-8
{ R1 }
>>
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
\stemUp
f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
f4-5
@end lilypond
@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
+\once \override PhrasingSlur.positions = #'(-4 . -3)
\acciaccatura e8\( d8 c~ c d c d\)
@end lilypond
{ c'1 ~ c'2. e'8 f' }
\\
{
- \override Beam #'positions = #'(-1 . -1)
+ \override Beam.positions = #'(-1 . -1)
e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g''
}
>>
\\
{
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\
\\
{
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\voiceTwo
c,8~
% Reposition the c2 to the right of the merged note
- \once \override NoteColumn #'force-hshift = #1.0
+ \once \override NoteColumn.force-hshift = #1.0
% Move the c2 out of the main note column
% so the merge will work
\shiftOnn
% Stem on the d2 must be down to permit merging
\stemDown
% Stem on the d2 should be invisible
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
d2
}
\new Voice {
posizionata proprio prima della prima nota della legatura sposta la legatura
3.5 mezzi spazi di rigo sopra la linea centrale:
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
Questo completa la seconda battuta:
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\voiceTwo
c,8~
% Riposiziona il c2 a destra della nota unita
- \once \override NoteColumn #'force-hshift = #1.0
+ \once \override NoteColumn.force-hshift = #1.0
% Sposta il c2 fuori dalla colonna della nota principale
% in modo che l'unione di note funzioni
\shiftOnn
% Il gambo di d2 deve essere in giù per permettere l'unione delle note
\stemDown
% Stem on the d2 should be invisible
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
d2
}
\new Voice {
@lilypond[quote,fragment,relative=2,verbatim]
<<
{
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
b8~ b\noBeam
}
\\
@lilypond[quote,fragment,relative=2,verbatim]
<<
{
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
- \tweak Stem #'length #8
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
+ \tweak Stem.length #8
b8~ b\noBeam
}
\\
% Indicazione di tempo visibile
\tempo 4=120
a4 a a
- \once \override Score.MetronomeMark #'transparent = ##t
+ \once \override Score.MetronomeMark.transparent = ##t
% Indicazione di tempo invisibile per allungare la fermata nel MIDI
\tempo 4=80
a4\fermata |
% Indicazione di tempo visibile
\tempo 4=120
a4 a a
- \once \override Score.MetronomeMark #'stencil = ##f
+ \once \override Score.MetronomeMark.stencil = ##f
% Indicazione di tempo invisibile per allungare la fermata nel MIDI
\tempo 4=80
a4\fermata |
alternativa possiamo usare i comandi @code{\override} e @code{\revert}?
@example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
@end example
Anche questi sarebbero molto noiosi da inserire se ci fossero
@lilypond[quote,verbatim]
emphasize = {
- \override Lyrics.LyricText #'font-shape = #'italic
- \override Lyrics.LyricText #'font-series = #'bold
+ \override Lyrics.LyricText.font-shape = #'italic
+ \override Lyrics.LyricText.font-series = #'bold
}
normal = {
- \revert Lyrics.LyricText #'font-shape
- \revert Lyrics.LyricText #'font-series
+ \revert Lyrics.LyricText.font-shape
+ \revert Lyrics.LyricText.font-series
}
global = { \key c \major \time 4/4 \partial 4 }
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
\layout{
\context {
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
}
\context {
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
}
\context {
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
\layout{
\context { \Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
}
\context { \Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
@example
tieDotted = @{
- \override Tie #'dash-period = #0.75
- \override Tie #'dash-fraction = #0.1
+ \override Tie.dash-period = #0.75
+ \override Tie.dash-fraction = #0.1
@}
@end example
\relative c' {
% Fa sì che il colore sia preso dalla procedura color-notehead
- \override NoteHead #'color = #color-notehead
+ \override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
}
@end lilypond
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Altezze
@example
\new Staff <<
- \accidentalStyle "voice"
+ \accidentalStyle voice
@{ @dots{} @}
>>
@end example
usare lo stesso stile in tutti i righi dell'attuale @code{StaffGroup}, si usa:
@example
-\accidentalStyle #'StaffGroup "voice"
+\accidentalStyle StaffGroup.voice
@end example
Sono supportati i seguenti modi di gestire le alterazioni. Il seguente esempio
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicA
}
\context Staff = "down" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicB
}
>>
<<
\context Staff = "up" @{
%%% change the next line as desired:
- \accidentalStyle #'Score "default"
+ \accidentalStyle Score.default
\musicA
@}
\context Staff = "down" @{
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicA
}
\context Staff = "down" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "voice"
+ \accidentalStyle voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "voice"
+ \accidentalStyle voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern"
+ \accidentalStyle modern
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern"
+ \accidentalStyle modern
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-cautionary"
+ \accidentalStyle modern-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-cautionary"
+ \accidentalStyle modern-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-voice"
+ \accidentalStyle modern-voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-voice"
+ \accidentalStyle modern-voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-voice-cautionary"
+ \accidentalStyle modern-voice-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-voice-cautionary"
+ \accidentalStyle modern-voice-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "piano"
+ \accidentalStyle piano
\musicA
}
\context Staff = "down" {
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "piano-cautionary"
+ \accidentalStyle piano-cautionary
\musicA
}
\context Staff = "down" {
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern"
+ \accidentalStyle neo-modern
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern"
+ \accidentalStyle neo-modern
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-cautionary"
+ \accidentalStyle neo-modern-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-cautionary"
+ \accidentalStyle neo-modern-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-voice"
+ \accidentalStyle neo-modern-voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-voice"
+ \accidentalStyle neo-modern-voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-voice-cautionary"
+ \accidentalStyle neo-modern-voice-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-voice-cautionary"
+ \accidentalStyle neo-modern-voice-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\musicA
}
\context Staff = "down" {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\musicB
}
>>
<<
\context Staff = "up" {
\key fis \minor
- \accidentalStyle "teaching"
+ \accidentalStyle teaching
\musicA
}
\context Staff = "down" {
\key fis \minor
- \accidentalStyle "teaching"
+ \accidentalStyle teaching
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "no-reset"
+ \accidentalStyle no-reset
\musicA
}
\context Staff = "down" {
- \accidentalStyle "no-reset"
+ \accidentalStyle no-reset
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "forget"
+ \accidentalStyle forget
\musicA
}
\context Staff = "down" {
- \accidentalStyle "forget"
+ \accidentalStyle forget
\musicB
}
>>
@lilypond[quote]
{
- \accidentalStyle "modern"
+ \accidentalStyle modern
\time 2/4
\repeat volta 2 {
c'2
@lilypond[verbatim,quote]
forget = #(define-music-function (parser location music) (ly:music?) #{
- \accidentalStyle "forget"
+ \accidentalStyle forget
#music
- \accidentalStyle "modern"
+ \accidentalStyle modern
#})
{
- \accidentalStyle "modern"
+ \accidentalStyle modern
\time 2/4
\repeat volta 2 {
c'2
@lilypond[verbatim,quote,relative=2]
c4 b
-\override NoteHead #'style = #'cross
+\override NoteHead.style = #'cross
c4 b
-\revert NoteHead #'style
+\revert NoteHead.style
a b
-\override NoteHead #'style = #'harmonic
+\override NoteHead.style = #'harmonic
a b
-\revert NoteHead #'style
+\revert NoteHead.style
c4 d e f
@end lilypond
<!--
we depend on an external entity here, which we cannot control. Suppose
-we go from 2.16.x to 2.17.x and put the documentation under "v2.17".
+we go from 2.15.x to 2.17.x and put the documentation under "v2.17".
For some time, Google won't have the new location in its index, so the
-search would get nothing. It would be better to keep "v2.16" in the
-search for a while and have a redirection from "v2.16" to "v2.17".
+search would get nothing. It would be better to keep "v2.15" in the
+search for a while and have a redirection from "v2.15" to "v2.17".
-->
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org/doc/v2.16 '
+ onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org/doc/v2.16 '
+ onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org/doc/v2.16 '
+ onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Cerca con Google">
<input type="text" name="brute_query" onfocus="this.value=''" value="Cerca">
+++ /dev/null
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Eseguire lilypond
conserva il colore nero predefinito per le teste delle note.
@lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
\new Staff { a }
@end lilypond
@lilypond[quote,verbatim,relative=2]
\new Staff {
- \override Staff.NoteHead #'color = #red
+ \override Staff.NoteHead.color = #red
a
}
@end lilypond
come un rigo inserendo
@example
-\override VerticalAxisGroup #'staff-affinity = ##f
+\override VerticalAxisGroup.staff-affinity = ##f
@end example
@noindent
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
ISOLANG = ja
depth = ../..
-SUBDIRS = web learning texidocs usage included notation
STEPMAKE_TEMPLATES = documentation texinfo
LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
NO_PDF_FILES = 1
+++ /dev/null
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
\\ % Voice two
{
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'ignore-collision = ##t
+ \once \override NoteColumn.ignore-collision = ##t
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\ % No voice three
\\ % Voice four
{
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
\\ % Voice two
{ \voiceTwoStyle
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'ignore-collision = ##t
+ \once \override NoteColumn.ignore-collision = ##t
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\ % No Voice three (we want stems down)
\\ % Voice four
{ \voiceThreeStyle
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
@}
>> % ManualOne Staff コンテキストの終了
\new Staff = "ManualTwo" \with @{
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
@} <<
\keyTime
\clef "bass"
}
>> % ManualOne Staff コンテキストの終了
\new Staff = "ManualTwo" \with {
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
} <<
\keyTime
\clef "bass"
@lilypond[quote,verbatim,ragged-right]
dolce = \markup { \italic \bold dolce }
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
fthenp =_\markup {
\dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}
violin = \relative c'' @{
\repeat volta 2 @{
c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
- \once \override TextScript #'padding = #5.0
+ \once \override TextScript.padding = #5.0
c4.^"hi there!" d8 e' f g d |
c,4.\markup @{
\dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
g4 a b c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
b4 c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\once \override NoteHead #'color = #green
+\once \override NoteHead.color = #green
g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
b c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>4
-\once \override NoteHead #'font-size = #-3
+\once \override NoteHead.font-size = #-3
<c e g>4
<c e g>4
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>4
-<c \tweak #'font-size #-3 e g>4
+<c \tweak font-size #-3 e g>4
@end lilypond
@code{\tweak} の構文は @code{\override} コマンドの構文とは@c
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
a4^"Black"
- -\tweak #'color #red ^"Red"
- -\tweak #'color #green _"Green"
+ -\tweak color #red ^"Red"
+ -\tweak color #green _"Green"
@end lilypond
@noindent
追跡できるようにすることで、@code{\tweak} で調整することができます:
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-<\tweak Accidental #'color #red cis4
- \tweak Accidental #'color #green es
+<\tweak Accidental.color #red cis4
+ \tweak Accidental.color #green es
g>
@end lilypond
@cindex color property, example (color プロパティの例)
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
+\tweak direction #up
\times 4/3 {
- \tweak #'color #red
+ \tweak color #red
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
@c See issue 509
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
\times 2/3 { c8[ c c] }
-\once \override TupletNumber
- #'text = #tuplet-number::calc-fraction-text
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
\times 2/3 {
c8[ c]
c8[ c]
- \once \override TupletNumber #'transparent = ##t
+ \once \override TupletNumber.transparent = ##t
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
}
実行するコマンドは以下のようになります:
@example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
@end example
プロパティ名の前に @code{#'} を付けること、@c
\time 6/8
{
% Increase thickness of all following slurs from 1.2 to 5.0
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
r4 bes8 bes[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
{
r4 bes8
% 直後にあるスラーのみを太くします
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes8[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
{
r4 bes8
% 直後にあるスラーのみを太くします
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes[( g]) g |
% 直後にあるスラーのみを太くします
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
g8[( es]) es d[( f]) as |
as8 g
}
{
r4 bes8
% 以後のスラーの太さを 1.2 から 5.0 に増やします
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
bes[( g]) g |
g8[( es]) es
% 以後のスラーの太さをデフォルトの 1.2 に戻します
- \revert Slur #'thickness
+ \revert Slur.thickness
d8[( f]) as |
as8 g
}
@code{\override} コマンドは以下のようになります:
@example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
@end example
@noindent
as8 g
}
\addlyrics {
- \override LyricText #'font-shape = #'italic
+ \override LyricText.font-shape = #'italic
The man who | feels love's sweet e -- | mo -- tion
}
}
そのため、コマンドは以下のようにすべきです:
@example
-\override Lyrics . LyricText #'font-shape = #'italic
+\override Lyrics.LyricText.font-shape = #'italic
@end example
@warning{歌詞の中では、最後の音節と終端の波括弧の間に常にスペースを@c
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override BarLine #'stencil = ##f
+ \override BarLine.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'stencil = ##f
+ \override Staff.BarLine.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,verbatim,relative=2]
{
c4 c
- \once \override NoteHead #'stencil = #point-stencil
+ \once \override NoteHead.stencil = #point-stencil
c4 c
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+ \override Staff.BarLine.break-visibility = #'#(#f #f #f)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'transparent = ##t
+ \override Staff.TimeSignature.transparent = ##t
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #white
+ \override Staff.BarLine.color = #white
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #(x11-color 'white)
+ \override Staff.BarLine.color = #(x11-color 'white)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+ \override Staff.BarLine.color = #(rgb-color 1 1 1)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.StaffSymbol #'color = #(x11-color 'grey30)
- \override Staff.TimeSignature #'color = #(x11-color 'grey60)
- \override Staff.Clef #'color = #(x11-color 'grey60)
- \override Voice.NoteHead #'color = #(x11-color 'grey85)
- \override Voice.Stem #'color = #(x11-color 'grey85)
- \override Staff.BarLine #'color = #(x11-color 'grey10)
+ \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+ \override Staff.TimeSignature.color = #(x11-color 'grey60)
+ \override Staff.Clef.color = #(x11-color 'grey60)
+ \override Voice.NoteHead.color = #(x11-color 'grey85)
+ \override Voice.Stem.color = #(x11-color 'grey85)
+ \override Staff.BarLine.color = #(x11-color 'grey10)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
alignAboveContext = #"main"
}
{
- \override Staff.Clef #'stencil = ##f
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.Clef.stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
{ f8 f c }
}
>>
\new Staff \with {
alignAboveContext = #"main"
% この譜には音部記号を譜刻しません
- \override Clef #'stencil = ##f
+ \override Clef.stencil = ##f
% この譜には拍子記号を譜刻しません
- \override TimeSignature #'stencil = ##f
+ \override TimeSignature.stencil = ##f
}
{ f8 f c }
>>
フォント サイズを変更する:
@example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
@end example
あるいは、@code{\set} を使って特別なプロパティ @code{fontSize} を設定するか、@c
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \override Clef.stencil = ##f
+ \override TimeSignature.stencil = ##f
% すべてのフォント サイズを約 24% 減らします
fontSize = #-2
}
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \override Clef.stencil = ##f
+ \override TimeSignature.stencil = ##f
fontSize = #-2
% 符幹の長さと譜線の間隔を減らします
- \override StaffSymbol #'staff-space = #(magstep -2)
+ \override StaffSymbol.staff-space = #(magstep -2)
}
{ f8 f c }
>>
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
a4 g c a |
-\override Stem #'direction = #DOWN
+\override Stem.direction = #DOWN
a4 g c a |
-\override Stem #'direction = #UP
+\override Stem.direction = #UP
a4 g c a |
-\revert Stem #'direction
+\revert Stem.direction
a4 g c a |
@end lilypond
@lilypond[quote,verbatim,relative=2]
c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #DOWN
+\override Fingering.direction = #DOWN
c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #UP
+\override Fingering.direction = #UP
c4-5 a-3 f-1 c'-5 |
@end lilypond
@w{@code{-5}} であることがわかるので、@w{@code{-7}} にセットしてみましょう:
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
+\override Fingering.font-size = #-7
\set fingeringOrientations = #'(left)
<f-2>4
<c-1 e-2 g-3 b-5>4
@c KEEP LY
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
% 以降のテキスト スパナの詳細を設定します
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% 強弱記号を譜の上に配置します
\dynamicUp
@c KEEP LY
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
% 以降のテキスト スパナの詳細を設定します
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% 強弱記号を譜の上に配置します
\dynamicUp
% 以降のオッターバ囲みをテキスト スパナの下に配置します
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
% オッターバ囲みの開始
\ottava #1
c'4 \startTextSpan
@lilypond[quote,verbatim,relative=2]
c4( c^\markup { \tiny \sharp } d4.) c8 |
c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
c4^\markup { \tiny \sharp } d4.) c8 |
-\once \override Slur #'outside-staff-priority = #500
+\once \override Slur.outside-staff-priority = #500
c4( c^\markup { \tiny \sharp } d4.) c8 |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
c2^"Text1"
c2^"Text2" |
-\once \override TextScript #'outside-staff-priority = #500
+\once \override TextScript.outside-staff-priority = #500
c2^"Text3"
c2^"Text4" |
@end lilypond
R1 |
% 衝突回避を OFF にします
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
c,,2^"Long Text " c'' |
R1 |
% 衝突回避を OFF にします
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
\textLengthOn % そして textLengthOn を ON にします
c,,2^"Long Text " % 後ろにスペースが付け加えられます
c''2 |
以下は強弱記号テキストに対してこれを行うコマンドです:
@example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
@end example
@noindent
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
a4\f b\mf c\mp b\p |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
% Extend width by 1 staff space
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
c2\fermata
-\override Script #'padding = #3
+\override Script.padding = #3
b2\fermata
@end lilypond
@c KEEP LY
@lilypond[quote,fragment,relative=1,verbatim]
% これは機能しません。この下を見てください
-\override MetronomeMark #'padding = #3
+\override MetronomeMark.padding = #3
\tempo 4 = 120
c1 |
% これは機能します
-\override Score.MetronomeMark #'padding = #3
+\override Score.MetronomeMark.padding = #3
\tempo 4 = 80
d1 |
@end lilypond
\relative c'' {
c4
% これは 1.5 倍シャープを譜刻しますが、スペースが小さすぎます
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4 c
% これはスペースを改善しています
- \once \override Score.AccidentalPlacement #'right-padding = #0.6
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Score.AccidentalPlacement.right-padding = #0.6
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4 |
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
% 幅を 1 単位広げます
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
% 強弱記号を譜から 2 単位上のベース ラインに揃えます
-\override DynamicLineSpanner #'staff-padding = #2
+\override DynamicLineSpanner.staff-padding = #2
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=3]
\voiceOne
<a\2>
-\once \override StringNumber #'self-alignment-X = #RIGHT
+\once \override StringNumber.self-alignment-X = #RIGHT
<a\2>
@end lilypond
<<
{ c4 c c c }
\\
- \override MultiMeasureRest #'staff-position = #-8
+ \override MultiMeasureRest.staff-position = #-8
{ R1 }
>>
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
\stemUp
f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
f4-5
@end lilypond
@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
+\once \override PhrasingSlur.positions = #'(-4 . -3)
\acciaccatura e8\( d8 c~ c d c d\)
@end lilypond
{ c'1 ~ c'2. e'8 f' }
\\
{
- \override Beam #'positions = #'(-1 . -1)
+ \override Beam.positions = #'(-1 . -1)
e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g''
}
>>
\\
{
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\
\\
{
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\voiceTwo
c,8~
% マージされる音符の右にある c2 を再配置します
- \once \override NoteColumn #'force-hshift = #1.0
+ \once \override NoteColumn.force-hshift = #1.0
% c2 をメインの音符列から外したため、
% マージが機能します
\shiftOnn
% マージさせるために d2 の符幹を下向きにする必要があります
\stemDown
% d2 の符幹を不可視にします
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
d2
}
\new Voice {
ですから、以下の以下のオーバライドをタイで結ばれる最初の音符の前に置けば、@c
タイは中央線から 3.5 半譜スペースだけ上の位置に移動させられます:
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
これで第 2 小節の修正も完了で、以下のようになります:
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\voiceTwo
c,8~
% マージされる音符の右にある c2 を再配置します
- \once \override NoteColumn #'force-hshift = #1.0
+ \once \override NoteColumn.force-hshift = #1.0
% c2 をメインの音符列から外したため、マージが機能します
\shiftOnn
c2
% マージさせるために d2 の符幹を下向きにする必要があります
\stemDown
% d2 の符幹を不可視にします
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
d2
}
\new Voice {
@lilypond[quote,fragment,relative=2,verbatim]
<<
{
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
b8~ b\noBeam
}
\\
@lilypond[quote,fragment,relative=2,verbatim]
<<
{
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
- \tweak Stem #'length #8
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
+ \tweak Stem.length #8
b8~ b\noBeam
}
\\
% Visible tempo marking
\tempo 4=120
a4 a a
- \once \override Score.MetronomeMark #'transparent = ##t
+ \once \override Score.MetronomeMark.transparent = ##t
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
a4\fermata |
% Visible tempo marking
\tempo 4=120
a4 a a
- \once \override Score.MetronomeMark #'stencil = ##f
+ \once \override Score.MetronomeMark.stencil = ##f
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
a4\fermata |
使うことはできないでしょうか?
@example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
@end example
これらも、強調する必要のある単語がたくさんある場合、入力するのが@c
@lilypond[quote,verbatim]
emphasize = {
- \override Lyrics.LyricText #'font-shape = #'italic
- \override Lyrics.LyricText #'font-series = #'bold
+ \override Lyrics.LyricText.font-shape = #'italic
+ \override Lyrics.LyricText.font-series = #'bold
}
normal = {
- \revert Lyrics.LyricText #'font-shape
- \revert Lyrics.LyricText #'font-series
+ \revert Lyrics.LyricText.font-shape
+ \revert Lyrics.LyricText.font-series
}
global = { \key c \major \time 4/4 \partial 4 }
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
\layout{
\context {
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
}
\context {
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
}
\context {
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
\layout{
\context { \Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
}
\context { \Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
@example
tieDotted = @{
- \override Tie #'dash-period = #0.75
- \override Tie #'dash-fraction = #0.1
+ \override Tie.dash-period = #0.75
+ \override Tie.dash-fraction = #0.1
@}
@end example
\relative c' {
% Arrange to obtain color from color-notehead procedure
- \override NoteHead #'color = #color-notehead
+ \override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
}
@end lilypond
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
\layout {
\context {
\Staff
- \override Stem #'thickness = #4.0
+ \override Stem.thickness = #4.0
}
}
}
@end lilypond
@item
-@code{\dynamicUp} や @code{\accidentalStyle "dodecaphonic"} のような音楽@c
+@code{\dynamicUp} や @code{\accidentalStyle dodecaphonic} のような音楽@c
表記等、あらかじめ定義されているコマンド
@lilypond[quote,verbatim]
}
\context {
\Staff
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
}
}
}
}
}
\layout {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\set fontSize = #-4
- \override Voice.Stem #'thickness = #4.0
+ \override Voice.Stem.thickness = #4.0
}
}
@end lilypond
\new Staff {
\new Voice
\with {
- \override Stem #'thickness = #4.0
+ \override Stem.thickness = #4.0
}
{
\relative c'' {
}
}
\new Staff
- \with { \accidentalStyle "dodecaphonic" }
+ \with { \accidentalStyle dodecaphonic }
{
\new Voice
\with { \dynamicUp }
\consists "Text_engraver"
\consists "Pitch_squash_engraver"
squashedPosition = #0
- \override NoteHead #'style = #'slash
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override NoteHead.style = #'slash
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
\alias Voice
}
\context { \Staff
音符はスラッシュで、符幹を持ちません:
@example
-\override NoteHead #'style = #'slash
-\override Stem #'transparent = ##t
-\override Flag #'transparent = ##t
+\override NoteHead.style = #'slash
+\override Stem.transparent = ##t
+\override Flag.transparent = ##t
@end example
これらのプラグインすべてが共同する必要があり、@c
\consists "Text_engraver"
\consists "Pitch_squash_engraver"
squashedPosition = #0
- \override NoteHead #'style = #'slash
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override NoteHead.style = #'slash
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
\alias Voice
@}
@end example
以下のコマンドは、音符と運指記号の間に 3 譜スペースを挿入します:
@example
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
@end example
このコマンドを @code{Fingering} オブジェクトが作成される前に挿入する
-- つまり @code{c2} の前に挿入する -- と、以下のような結果が得られます:
@lilypond[quote,relative=2,fragment,verbatim]
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
c-2
\stemUp
f
The command
@verbatim
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
@end verbatim
@noindent
@lilypond[quote,verbatim,relative=2,fragment]
c4
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
c4
c4
c4
@lilypond[quote,fragment,verbatim,relative=2]
c4
-\once \override Stem #'thickness = #4.0
+\once \override Stem.thickness = #4.0
c4
c4
@end lilypond
when the object is created. In this example,
@lilypond[quote,fragment,verbatim,relative=2]
-\override Slur #'thickness = #3.0
+\override Slur.thickness = #3.0
c8[( c
-\override Beam #'thickness = #0.6
+\override Beam.thickness = #0.6
c8 c])
@end lilypond
@code{\revert} in the next example does not do anything.
@example
-\override Voice.Stem #'thickness = #4.0
-\revert Staff.Stem #'thickness
+\override Voice.Stem.thickness = #4.0
+\revert Staff.Stem.thickness
@end example
Some tweakable options are called @q{subproperties} and reside inside
such as
@example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
+\override Stem.details.beamed-lengths = #'(4 4 3)
@end example
@end ignore
@lilypond[quote,verbatim,relative=2]
c4 c
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
c4 c
@end lilypond
context is used:
@lilypond[quote,verbatim,relative=2]
-{ \override Staff.Stem #'thickness = #3.0
+{ \override Staff.Stem.thickness = #3.0
<<
{
e4 e
- \override Stem #'thickness = #0.5
+ \override Stem.thickness = #0.5
e4 e
} \\ {
c4 c c c
@lilypond[quote,verbatim,relative=2]
c4
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
c4 c
-\revert Voice.Stem #'thickness
+\revert Voice.Stem.thickness
c4
@end lilypond
<<
{
e4
- \override Staff.Stem #'thickness = #3.0
+ \override Staff.Stem.thickness = #3.0
e4 e e
} \\ {
c4 c c
- \revert Staff.Stem #'thickness
+ \revert Staff.Stem.thickness
c4
}
>>
{
<<
{
- \override Stem #'thickness = #3.0
+ \override Stem.thickness = #3.0
e4 e e e
} \\ {
c4
- \once \override Stem #'thickness = #3.0
+ \once \override Stem.thickness = #3.0
c4 c c
}
>>
Commands which change output generally look like
@example
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
@end example
@noindent
properties. To tweak those, use commands in the form
@example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
+\override Stem.details.beamed-lengths = #'(4 4 3)
@end example
@cindex internal documentation
@lilypond[relative=2,verbatim,quote]
< c
- \tweak #'color #red
+ \tweak color #red
d
g
- \tweak #'duration-log #1
+ \tweak duration-log #1
a
> 4
--\tweak #'padding #8
+-\tweak padding #8
-^
@end lilypond
So, this works:
@lilypond[relative=2,verbatim,quote]
-<\tweak #'color #red c>4
+<\tweak color #red c>4
@end lilypond
@noindent
but this does not:
@lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
+\tweak color #red c4
@end lilypond
@end ignore
@lilypond[relative=2,verbatim,quote]
< c
- \tweak #'color #red
+ \tweak color #red
d
g
- \tweak #'duration-log #1
+ \tweak duration-log #1
a
> 4
@end lilypond
@code{\tweak} を用いて、スラーを変更することができます:
@lilypond[verbatim,quote,relative=1]
-c-\tweak #'thickness #5 ( d e f)
+c-\tweak thickness #5 ( d e f)
@end lilypond
からです:
@lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
-\tweak #'color #red <c e>4
-<\tweak #'color #red c e>4
+\tweak color #red c4
+\tweak color #red <c e>4
+<\tweak color #red c e>4
@end lilypond
単純な @code{\tweak} コマンドでは入力から直接作成されないオブジェクトを@c
@code{\tweak} コマンドを用いることで調整することができます:
@lilypond[relative=2,verbatim,quote]
-\tweak Stem #'color #red
-\tweak Beam #'color #green c8 e
-<c e \tweak Accidental #'font-size #-3 ges>4
+\tweak Stem.color #red
+\tweak Beam.color #green c8 e
+<c e \tweak Accidental.font-size #-3 ges>4
@end lilypond
@code{\tweak} コマンドで音部記号や拍子記号を変更することはできません。@c
@lilypond[verbatim,quote,relative=1]
c
--\tweak #'style #'dashed-line
--\tweak #'dash-fraction #0.2
--\tweak #'thickness #3
--\tweak #'color #red
+-\tweak style #'dashed-line
+-\tweak dash-fraction #0.2
+-\tweak thickness #3
+-\tweak color #red
\glissando
f'
@end lilypond
% 譜間スペースを減らします
\new PianoStaff \with {
% this is the nested declaration
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #7
} <<
\new Staff { \clef treble c''1 }
\new Staff { \clef bass c1 }
@lilypond[quote,verbatim]
\new PianoStaff \with {
- \override StaffGrouper #'staff-staff-spacing =
+ \override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 0)
(minimum-distance . 0)
(padding . 0)
このため、以下の 2 つの宣言は等価です:
@example
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 7))
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 7)
(minimum-distance . 0)
(padding . 0)
@lilypond[verbatim,quote,relative=1]
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
+ \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
}
{ a4 e' f b | d1 }
@end lilypond
@lilypond[verbatim,quote,relative=1]
\new Staff \with {
- \override StaffSymbol #'width = #23
+ \override StaffSymbol.width = #23
}
{ a4 e' f b | d1 }
@end lilypond
a~a
a
% タイの長さを増加させます
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
~a
@end lilypond
\compressFullBarRests
R1*23
% 休符バーの長さを増加させます
-\once \override MultiMeasureRest #'minimum-length = #20
+\once \override MultiMeasureRest.minimum-length = #20
R1*23
a1
@end lilypond
@lilypond[verbatim,quote,relative=2]
a \< a a a \!
% ヘアピンの長さを増加させます
-\override Hairpin #'minimum-length = #20
+\override Hairpin.minimum-length = #20
a \< a a a \!
@end lilypond
@lilypond[verbatim,quote,relative=2]
a( a)
a
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
( a)
a\( a\)
a
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
\( a\)
@end lilypond
e \glissando c'
% 単独では効果を持ちません
-\once \override Glissando #'minimum-length = #20
+\once \override Glissando.minimum-length = #20
e, \glissando c'
% 以下の両方のオーバライドが存在する場合にのみ、効果を持ちます
-\once \override Glissando #'minimum-length = #20
-\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Glissando.minimum-length = #20
+\once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
e, \glissando c'
@end lilypond
@c KEEP LY
@lilypond[verbatim,quote,relative=1]
% 単独では効果を持ちません
-\once \override Beam #'minimum-length = #20
+\once \override Beam.minimum-length = #20
e8 e e e
% 以下の両方のオーバライドが存在する場合にのみ、効果を持ちます
-\once \override Beam #'minimum-length = #20
-\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Beam.minimum-length = #20
+\once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
e8 e e e
@end lilypond
@lilypond[verbatim,quote,relative=2]
a \< a a a a \! a a a \break
-\override Hairpin #'to-barline = ##f
+\override Hairpin.to-barline = ##f
a \< a a a a \! a a a
@end lilypond
@lilypond[relative=2,quote,verbatim]
e2 \glissando b
-\once \override Glissando #'(bound-details left Y) = #3
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.left.Y = #3
+\once \override Glissando.bound-details.right.Y = #-2
e2 \glissando b
@end lilypond
例を示します:
@lilypond[relative=2,ragged-right,verbatim,fragment]
-\override Glissando #'breakable = ##t
-\override Glissando #'(bound-details right-broken Y) = #-3
+\override Glissando.breakable = ##t
+\override Glissando.bound-details.right-broken.Y = #-3
c1 \glissando \break
f1
@end lilypond
水平スパナに @i{cresc.}, @i{tr} それに他のテキストを配置するために使用されます。
@lilypond[quote,ragged-right,fragment,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
c2\startTextSpan b c a\stopTextSpan
@end lilypond
記号が上下します:
@lilypond[relative=1,fragment,verbatim]
-\override TextSpanner
- #'(bound-details left stencil-align-dir-y) = #-2
-\override TextSpanner
- #'(bound-details right stencil-align-dir-y) = #UP
-
-\override TextSpanner
- #'(bound-details left text) = #"ggg"
-\override TextSpanner
- #'(bound-details right text) = #"hhh"
+\override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
+\override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
+
+\override TextSpanner.bound-details.left.text = #"ggg"
+\override TextSpanner.bound-details.right.text = #"hhh"
c4^\startTextSpan c c c \stopTextSpan
@end lilypond
@lilypond[quote,verbatim,relative=1]
a1 a
-\override Score.BarLine #'stencil = ##f
+\override Score.BarLine.stencil = ##f
a a
-\revert Score.BarLine #'stencil
+\revert Score.BarLine.stencil
a a a
@end lilypond
@lilypond[quote,verbatim,relative=2]
a4 a
-\once \override NoteHead #'transparent = ##t
+\once \override NoteHead.transparent = ##t
a a
@end lilypond
白いオブジェクトの画像が幽霊のように浮かび上がることがあります:
@lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
+\override Staff.Clef.color = #white
a1
@end lilypond
音部記号を先に描画させる必要があります:
@lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
-\override Staff.Clef #'layer = #-1
+\override Staff.Clef.color = #white
+\override Staff.Clef.layer = #-1
a1
@end lilypond
f4 g a b
f4 g a b
% カレント行の最後で小節線を削除します
-\once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
+\once \override Score.BarLine.break-visibility = #'#(#f #t #t)
\break
f4 g a b
f4 g a b
\key g \major
f4 g a b
% すべての調号を削除しようと試みます
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b
\break
\key g \major
f4 g a b
\set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b \break
f4 g a b
f4 g a b
\set Staff.explicitKeySignatureVisibility = #all-invisible
\set Staff.printKeyCancellation = ##f
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b \break
f4 g a b
@lilypond[relative=2,ragged-right,verbatim,fragment]
d2 \glissando d'2
-\once \override Glissando #'style = #'dashed-line
+\once \override Glissando.style = #'dashed-line
d,2 \glissando d'2
-\override Glissando #'style = #'dotted-line
+\override Glissando.style = #'dotted-line
d,2 \glissando d'2
-\override Glissando #'style = #'zigzag
+\override Glissando.style = #'zigzag
d,2 \glissando d'2
-\override Glissando #'style = #'trill
+\override Glissando.style = #'trill
d,2 \glissando d'2
@end lilypond
@c TODO Complete
@lilypond[relative=2,ragged-right,verbatim,quote]
e2 \glissando f
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.right.Y = #-2
e2 \glissando f
@end lilypond
@lilypond[quote,verbatim,relative=1]
g4\< e' d' f\!
-\override Hairpin #'rotation = #'(20 -1 0)
+\override Hairpin.rotation = #'(20 -1 0)
g,,4\< e' d' f\!
@end lilypond
そうしなければテキストのいくつかは高く押し上げられてしまいます。
@lilypond[quote,verbatim,relative=1]
-\override TextScript #'outside-staff-priority = ##f
+\override TextScript.outside-staff-priority = ##f
g4^\markup { \rotate #30 "a G" }
b^\markup { \rotate #30 "a B" }
des^\markup { \rotate #30 "a D-Flat" }
@lilypond[verbatim,quote,relative=2]
a-3
a
--\tweak #'X-offset #0
--\tweak #'Y-offset #0
+-\tweak X-offset #0
+-\tweak Y-offset #0
-3
a
--\tweak #'X-offset #-1
--\tweak #'Y-offset #1
+-\tweak X-offset #-1
+-\tweak Y-offset #1
-3
@end lilypond
@lilypond[quote,verbatim,relative=1]
a'
--\tweak #'self-alignment-X #-1
+-\tweak self-alignment-X #-1
^"left-aligned"
--\tweak #'self-alignment-X #0
+-\tweak self-alignment-X #0
^"center-aligned"
--\tweak #'self-alignment-X #RIGHT
+-\tweak self-alignment-X #RIGHT
^"right-aligned"
--\tweak #'self-alignment-X #-2.5
+-\tweak self-alignment-X #-2.5
^"aligned further to the right"
@end lilypond
@c KEEP LY
@lilypond[quote,verbatim,relative=2]
a
--\tweak #'self-alignment-X #0.5 % 左方向に移動させます
--\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
--\tweak #'self-alignment-Y #-1 % 上方向に移動させます
+-\tweak self-alignment-X #0.5 % 左方向に移動させます
+-\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
+-\tweak self-alignment-Y #-1 % 上方向に移動させます
-3 % 3 の指
@end lilypond
@c KEEP LY
@lilypond[verbatim,quote,relative=1]
% リハーサル記号は音部記号の上に中央揃えされます
-\override Score.RehearsalMark #'break-align-symbols = #'(clef)
+\override Score.RehearsalMark.break-align-symbols = #'(clef)
\key a \major
\clef treble
\mark "↓"
e1
% リハーサル記号は拍子記号の上に中央揃えされます
-\override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
+\override Score.RehearsalMark.break-align-symbols = #'(time-signature)
\key a \major
\clef treble
\time 3/4
\mark "↓"
e2.
% リハーサル記号はブレス記号の上に中央揃えされます
-\override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
+\override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
\key a \major
\clef treble
\time 4/4
@c KEEP LY
@lilypond[verbatim,quote,relative=1]
% リハーサル記号は調号の上に中央揃えされます
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
e1
% リハーサル記号は音部記号の上に中央揃えされます
\set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \minor
\clef bass
\mark "↓"
% リハーサル記号は小節線の上に中央揃えされます
\set Staff.explicitKeySignatureVisibility = #all-invisible
\set Staff.explicitClefVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
@c KEEP LY
@lilypond[verbatim,quote,relative=1]
% RehearsalMark は KeySignature の上に中央揃えされます
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\key a \major
\clef treble
\time 4/4
\mark "↓"
e1
% RehearsalMark は KeySignature の左端に揃えられます
-\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
+\once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
\mark "↓"
\key a \major
e
% RehearsalMark は KeySignature の右端に揃えられます
-\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
+\once \override Score.KeySignature.break-align-anchor-alignment = #RIGHT
\key a \major
\mark "↓"
e
@lilypond[verbatim,quote,relative=1]
% リハーサル記号は調号の左端に揃えられて
% さらに 3.5 譜スペース右にずらされます
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
-\once \override Score.KeySignature #'break-align-anchor = #3.5
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
+\once \override Score.KeySignature.break-align-anchor = #3.5
\key a \major
\mark "↓"
e1
% リハーサル記号は調号の左端に揃えられて
% さらに 2 譜スペース左にずらされます
-\once \override Score.KeySignature #'break-align-anchor = #-2
+\once \override Score.KeySignature.break-align-anchor = #-2
\key a \major
\mark "↓"
e1
@lilypond[verbatim,quote]
XinO = {
- \once \override NoteHead #'stencil = #ly:text-interface::print
- \once \override NoteHead #'text = \markup {
+ \once \override NoteHead.stencil = #ly:text-interface::print
+ \once \override NoteHead.text = \markup {
\combine
\halign #-0.7 \draw-circle #0.85 #0.2 ##f
\musicglyph #"noteheads.s2cross"
@lilypond[verbatim,quote,relative=1]
<<
{
- \once \override Tie
- #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
+ \once \override Tie.control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
e1 ~ e
}
\\
'(-0.5 . 0.5)))))
squareLineCircleSpace = {
- \override NoteHead #'stencil = #square-line-circle-space
+ \override NoteHead.stencil = #square-line-circle-space
}
smartSquareLineCircleSpace = {
\squareLineCircleSpace
- \override NoteHead #'Y-extent =
+ \override NoteHead.Y-extent =
#(ly:make-unpure-pure-container
ly:grob::stencil-height
(lambda (grob start end) (ly:grob::stencil-height grob)))
\new Voice \with { \remove "Stem_engraver" }
\relative c'' {
\squareLineCircleSpace
- cis4 ces cisis c
+ cis4 ces disis d
\smartSquareLineCircleSpace
- cis4 ces cisis c
+ cis4 ces disis d
}
@end lilypond
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = $padding
+ \once \override TextScript.padding = $padding
#})
\relative c''' {
(parser location note)
(ly:music?)
#{
- \tweak NoteHead #'stencil #ly:text-interface::print
- \tweak NoteHead #'text
+ \tweak NoteHead.stencil #ly:text-interface::print
+ \tweak NoteHead.text
\markup \musicglyph #"custodes.mensural.u0"
- \tweak Stem #'stencil ##f
+ \tweak Stem.stencil ##f
#note
#})
(parser location padding tempotext)
(number? markup?)
#{
- \once \override Score.MetronomeMark #'padding = $padding
+ \once \override Score.MetronomeMark.padding = $padding
\tempo \markup { \bold #tempotext }
#})
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@tab
@lilypond[fragment,relative=2,notime]
\set Staff.autoBeaming = ##f
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
c1 c2 c8 c16
@end lilypond
@tab 増音の付点
@tab
@lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
c4. c4..
@end lilypond
@tab 拍子記号
@tab
@lilypond[fragment]
-\override Staff.Clef #'transparent = ##t
+\override Staff.Clef.transparent = ##t
\time 3/4
s4_" "
\time 4/4
@tab 休符
@tab
@lilypond[relative=2,notime,fragment]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
r4 r8
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:m c:m7
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:dim c:dim7
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:aug
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:maj c:maj7
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@lilypond[verbatim,quote,relative=2]
\set fontSize = #3
c4.-> d8---3
-\override NoteHead #'font-size = #-4
+\override NoteHead.font-size = #-4
c4.-> d8---3
-\override Script #'font-size = #2
+\override Script.font-size = #2
c4.-> d8---3
-\override Stem #'font-size = #-5
+\override Stem.font-size = #-5
c4.-> d8---3
@end lilypond
有効なカラー名は @ref{List of colors} でリストアップされています。
@lilypond[verbatim,quote,relative=2]
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
c4 c
-\override NoteHead #'color = #(x11-color 'LimeGreen)
+\override NoteHead.color = #(x11-color 'LimeGreen)
d
-\override Stem #'color = #blue
+\override Stem.color = #blue
e
@end lilypond
@c KEEP LY
@lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
\set Staff.instrumentName = \markup {
\with-color #(x11-color 'navy) "Clarinet"
}
gis8 a
-\override Beam #'color = #(x11-color "medium turquoise")
+\override Beam.color = #(x11-color "medium turquoise")
gis a
-\override Accidental #'color = #(x11-color 'DarkRed)
+\override Accidental.color = #(x11-color 'DarkRed)
gis a
-\override NoteHead #'color = #(x11-color "LimeGreen")
+\override NoteHead.color = #(x11-color "LimeGreen")
gis a
% 以下は意図的に意味をなさない色を指定しています。符幹が黒のままであることに注意してください
-\override Stem #'color = #(x11-color 'Boggle)
+\override Stem.color = #(x11-color 'Boggle)
b2 cis
@end lilypond
厳密な RGB カラーを指定することができます。
@lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
\set Staff.instrumentName = \markup {
\with-color #(x11-color 'navy) "Clarinet"
}
-\override Stem #'color = #(rgb-color 0 0 0)
+\override Stem.color = #(rgb-color 0 0 0)
gis8 a
-\override Stem #'color = #(rgb-color 1 1 1)
+\override Stem.color = #(rgb-color 1 1 1)
gis8 a
-\override Stem #'color = #(rgb-color 0 0 0.5)
+\override Stem.color = #(rgb-color 0 0 0.5)
gis4 a
@end lilypond
version that you are working on. For details, see the Contributors'
Guide, node Updating translation committishes..@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
このコマンドは @code{MultiMeasureRestText} オブジェクトを作成します。
@lilypond[verbatim,quote,relative=2]
-\override Script #'color = #red
-\override MultiMeasureRestText #'color = #blue
+\override Script.color = #red
+\override MultiMeasureRestText.color = #blue
a2\fermata r\fermata
R1\fermataMarkup
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
変更することができます。
@lilypond[quote,ragged-right,verbatim]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \override Voice.StringNumber.stencil = ##f }
\new StaffGroup <<
\new Staff \relative c {
\clef "treble_8"
ハーモニック指示を演奏するピッチとしてタブ譜に付け加えることができます:
@lilypond[verbatim,quote]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \override Voice.StringNumber.stencil = ##f }
firstHarmonic = {
d'4\4\harmonic
g'4\3\harmonic
@lilypond[quote,ragged-right,verbatim]
<<
\new Voice \with {
- \override StringNumber #'stencil = ##f
+ \override StringNumber.stencil = ##f
} {
\clef "bass_8"
\relative c, {
}
}
\context Staff {
- \override Voice.TextScript
- #'(fret-diagram-details finger-code) = #'below-string
+ \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
\clef "treble_8"
<c e g c' e'>1^\markup {
\fret-diagram-terse #"x;3-3;2-2;o;1-1;o;"
}
\context Staff {
\clef "treble_8"
- \override Voice.TextScript
- #'(fret-diagram-details finger-code) = #'below-string
+ \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
<f, c f a c' f'>1^\markup {
\fret-diagram-verbose #'(
(place-fret 6 1)
\clef "treble_8"
b16 d g b e
\textSpannerDown
-\override TextSpanner #'(bound-details left text) = #"XII "
+\override TextSpanner.bound-details.left.text = #"XII "
g16\startTextSpan
b16 e g e b g\stopTextSpan
e16 b g d
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\clef "treble_8"
- \override Staff.NoteHead #'style = #'harmonic-mixed
+ \override Staff.NoteHead.style = #'harmonic-mixed
d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@item Scheme 表記要素を区切る空白。
@item @code{lyricmode} モードの @code{\override} と @code{\set} コマンドの@c
中にある単語を区切る空白。@c
-特に、@code{\override Score . LyricText #'font-size = #5} のように、@c
+特に、@code{\override Score.LyricText.font-size = #5} のように、@c
コマンドの中のドットとイコール記号の前後、コマンド全体の前後に@c
空白を挿入することを忘れないで下さい。
\footnote #'(0.5 . -2)
\markup { The first note }
a'4 b8
- \footnote #'(0.5 . 1) #'Flag
- \markup { The third note }
+ \single\footnote #'(0.5 . 1)
+ \markup { The third note } Flag
e\noBeam c4 d4
}
}
a'4-\footnote #'(-3 . 0) \markup { \bold Forte } \f
-\footnote #'(0 . 1.5) \markup { スラー } (
b8)-\footnote #'(0 . -2) \markup { 連桁 } [ e]
- \footnote #'(1 . -1) #'Stem
- \markup { \teeny { これは符幹です } }
+ \single\footnote #'(1 . -1)
+ \markup { \teeny { これは符幹です } } Stem
c4
- \footnote #'(0 . 0.5) #'AccidentalCautionary
- \markup \italic { 忠告の臨時記号 }
+ \single\footnote #'(0 . 0.5)
+ \markup \italic { 忠告の臨時記号 } AccidentalCautionary
\footnote #'(1 . 1) "音符自体"
dis?4-\footnote #'(0.5 . -0.5) \markup \italic { スロー ダウン }
_"rit."
\markup { \teeny 3 } #'(0 . -2)
\markup { 3. 連桁 } [
e]
- \footnote
- \markup { 4 } #'(1 . -1) #'Stem
- \markup { \bold 4. { これは符幹です } }
+ \single\footnote
+ \markup { 4 } #'(1 . -1)
+ \markup { \bold 4. { これは符幹です } } Stem
c4
- \footnote
+ \single\footnote
\markup \concat \teeny { "sharp (v)" }
- #'(0 . 0.5) #'AccidentalCautionary
- \markup \italic { v. 忠告の臨時記号 }
+ #'(0 . 0.5)
+ \markup \italic { v. 忠告の臨時記号 } AccidentalCautionary
dis?4-\footnote
\markup \concat \teeny { "a" } #'(0.5 . -0.5)
\markup \italic { a. スローダウン } _"rit."
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
\new Staff = "up" {
\voiceOne
% 譜を跨ぐボイスの中にある運指記号のためのスペースを作ります
- \once\override DynamicLineSpanner #'staff-padding = #3.4
+ \once\override DynamicLineSpanner.staff-padding = #3.4
e''2\p\< d''\>
c''1\!
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
<< \new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics \nam
>>
\layout {
\context {
\Score
- \override LyricText #'font-family = #'typewriter
- \override BarNumber #'transparent =##T
+ \override LyricText.font-family = #'typewriter
+ \override BarNumber.transparent =##T
}
}
}
\new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
- \override StaffSymbol #'line-count = #2
- \override StaffSymbol #'staff-space = #2
- \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0)
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
+ \override StaffSymbol.line-count = #2
+ \override StaffSymbol.staff-space = #2
+ \override VerticalAxisGroup.minimum-Y-extent = #'(-3.0 . 4.0)
drumStyleTable = #timbales-style
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\remove "Bar_engraver"
\remove "Time_signature_engraver"
drumStyleTable = #congas-style
- \override StaffSymbol #'line-count = #2
+ \override StaffSymbol.line-count = #2
%% this sucks; it will lengthen stems.
- \override StaffSymbol #'staff-space = #2
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override StaffSymbol.staff-space = #2
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override StaffSymbol #'line-count = #2
+ \override StaffSymbol.line-count = #2
drumStyleTable = #bongos-style
%% this sucks; it will lengthen stems.
- \override StaffSymbol #'staff-space = #2
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override StaffSymbol.staff-space = #2
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\new DrumStaff \with{
\remove "Bar_engraver"
drumStyleTable = #percussion-style
- \override StaffSymbol #'line-count = #1
+ \override StaffSymbol.line-count = #1
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
woodstaff = {
% 以下は二線の譜を定義します。
% また、二線の位置も定義します。
- \override Staff.StaffSymbol #'line-positions = #'(-2 3)
+ \override Staff.StaffSymbol.line-positions = #'(-2 3)
% 以下の行が必要です。この行を省略すると、小節線は短すぎます!
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
}
\new DrumStaff {
@end lilypond
上記の特殊なケースでは、@c
-小節線の長さを @code{\override Staff.BarLine #'bar-extent #'(from . to)}
+小節線の長さを @code{\override Staff.BarLine.bar-extent #'(from . to)}
で変更する必要があります。@c
さもないと、小節線の長さが短すぎます。@c
また、2 本の譜線の位置を定義する必要があります。@c
#(define mydrums '((tambourine default #t 0)))
tambustaff = {
- \override Staff.StaffSymbol #'line-positions = #'( 0 )
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.StaffSymbol.line-positions = #'( 0 )
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Tambourine"
}
#(define mydrums '((tamtam default #t 0)))
tamtamstaff = {
- \override Staff.StaffSymbol #'line-positions = #'( 0 )
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.StaffSymbol.line-positions = #'( 0 )
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Tamtam"
}
(cowbell default #t -2)))
bellstaff = {
- \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3)
+ \override DrumStaff.StaffSymbol.line-positions = #'(-2 3)
\set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Different Bells"
}
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
@example
\new Staff <<
- \accidentalStyle "voice"
+ \accidentalStyle voice
@{ @dots{} @}
>>
@end example
以下のようにします:
@example
-\accidentalStyle #'StaffGroup "voice"
+\accidentalStyle StaffGroup.voice
@end example
サポートされる臨時記号スタイルを以下で示します。@c
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicA
}
\context Staff = "down" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicB
}
>>
<<
\context Staff = "up" @{
%%% 次の行を変更したいスタイルに合わせて変更してください:
- \accidentalStyle #'Score "default"
+ \accidentalStyle Score.default
\musicA
@}
\context Staff = "down" @{
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicA
}
\context Staff = "down" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "voice"
+ \accidentalStyle voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "voice"
+ \accidentalStyle voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern"
+ \accidentalStyle modern
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern"
+ \accidentalStyle modern
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-cautionary"
+ \accidentalStyle modern-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-cautionary"
+ \accidentalStyle modern-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-voice"
+ \accidentalStyle modern-voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-voice"
+ \accidentalStyle modern-voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-voice-cautionary"
+ \accidentalStyle modern-voice-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-voice-cautionary"
+ \accidentalStyle modern-voice-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "piano"
+ \accidentalStyle piano
\musicA
}
\context Staff = "down" {
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "piano-cautionary"
+ \accidentalStyle piano-cautionary
\musicA
}
\context Staff = "down" {
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern"
+ \accidentalStyle neo-modern
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern"
+ \accidentalStyle neo-modern
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-cautionary"
+ \accidentalStyle neo-modern-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-cautionary"
+ \accidentalStyle neo-modern-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-voice"
+ \accidentalStyle neo-modern-voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-voice"
+ \accidentalStyle neo-modern-voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-voice-cautionary"
+ \accidentalStyle neo-modern-voice-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-voice-cautionary"
+ \accidentalStyle neo-modern-voice-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\musicA
}
\context Staff = "down" {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\musicB
}
>>
<<
\context Staff = "up" {
\key fis \minor
- \accidentalStyle "teaching"
+ \accidentalStyle teaching
\musicA
}
\context Staff = "down" {
\key fis \minor
- \accidentalStyle "teaching"
+ \accidentalStyle teaching
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "no-reset"
+ \accidentalStyle no-reset
\musicA
}
\context Staff = "down" {
- \accidentalStyle "no-reset"
+ \accidentalStyle no-reset
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "forget"
+ \accidentalStyle forget
\musicA
}
\context Staff = "down" {
- \accidentalStyle "forget"
+ \accidentalStyle forget
\musicB
}
>>
@lilypond[quote]
{
- \accidentalStyle "modern"
+ \accidentalStyle modern
\time 2/4
\repeat volta 2 {
c'2
@lilypond[verbatim,quote]
forget = #(define-music-function (parser location music) (ly:music?) #{
- \accidentalStyle "forget"
+ \accidentalStyle forget
#music
- \accidentalStyle "modern"
+ \accidentalStyle modern
#})
{
- \accidentalStyle "modern"
+ \accidentalStyle modern
\time 2/4
\repeat volta 2 {
c'2
@lilypond[verbatim,quote,relative=2]
c4 b
-\override NoteHead #'style = #'cross
+\override NoteHead.style = #'cross
c4 b
-\revert NoteHead #'style
+\revert NoteHead.style
a b
-\override NoteHead #'style = #'harmonic
+\override NoteHead.style = #'harmonic
a b
-\revert NoteHead #'style
+\revert NoteHead.style
c4 d e f
@end lilypond
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
オーバライドしてください。
@lilypond[verbatim,quote,ragged-right,relative=2]
-\override Tie #'layer = #-2
-\override Staff.TimeSignature #'layer = #-1
-\override Staff.KeySignature #'layer = #-1
-\override Staff.TimeSignature #'whiteout = ##t
-\override Staff.KeySignature #'whiteout = ##t
+\override Tie.layer = #-2
+\override Staff.TimeSignature.layer = #-1
+\override Staff.KeySignature.layer = #-1
+\override Staff.TimeSignature.whiteout = ##t
+\override Staff.KeySignature.whiteout = ##t
b2 b~
\time 3/4
\key a \major
\new Staff {
% この 2 本線には意味はありません
\time 16/1
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
% 八全休符を譜刻します。二全休符 4 つと等価です
r\maxima
% 四全休符を譜刻します。二全休符 2 つと等価です
@c KEEP LY
@lilypond[quote,verbatim,relative=2]
% この例は誤ったオブジェクト名を指定しているため失敗します
-\override TextScript #'padding = #5
+\override TextScript.padding = #5
R1^"wrong"
% この例は正しいオブジェクト名が指定されています
-\override MultiMeasureRestText #'padding = #5
+\override MultiMeasureRestText.padding = #5
R1^"right"
@end lilypond
@lilypond[verbatim,relative=2,quote]
% すべての小節番号を表示します
-\override Score.BarNumber #'break-visibility = #all-visible
+\override Score.BarNumber.break-visibility = #all-visible
c4 d e d
\cadenzaOn
c4 c d8[ d d] f4 g4.
最後の 4 つの 32 分音符は一定のテンポです。
@lilypond[relative=1,verbatim,quote]
-\override Beam #'grow-direction = #LEFT
+\override Beam.grow-direction = #LEFT
\featherDurations #(ly:make-moment 2 1)
{ c16[ c c c c c c c] }
-\override Beam #'grow-direction = #RIGHT
+\override Beam.grow-direction = #RIGHT
\featherDurations #(ly:make-moment 2 3)
{ c32[ d e f] }
% revert to non-feathered beams
-\override Beam #'grow-direction = #'()
+\override Beam.grow-direction = #'()
{ g32[ a b c] }
@end lilypond
f1 \bar "."
g1 \bar "||"
a1 \bar ".|"
-b1 \bar ".|."
+b1 \bar ".."
c1 \bar "|.|"
d1 \bar "|."
e1
さらに、点線と破線の小節線があります:
@lilypond[quote,relative=1,verbatim]
-f1 \bar ":"
-g1 \bar "dashed"
+f1 \bar ";"
+g1 \bar "!"
a1
@end lilypond
さらに、繰り返しの小節線が 5 種類あります:
@lilypond[quote,relative=1,verbatim]
-f1 \bar "|:"
-g1 \bar ":|:"
+f1 \bar ".|:"
+g1 \bar ":..:"
a1 \bar ":|.|:"
b1 \bar ":|.:"
-c1 \bar ":|"
+c1 \bar ":|."
e1
@end lilypond
c4 c c c \break
\bar "S"
c4 c c c
-\bar "|S"
+\bar "S-|"
c4 c c c \break
-\bar "|S"
+\bar "S-|"
c4 c c c
-\bar "S|"
+\bar "S-S"
c4 c c c \break
-\bar "S|"
+\bar "S-S"
c1
@end lilypond
@lilypond[quote,relative=2,verbatim]
c4 c c c
-\bar "||:"
+\bar ".|:-||"
c4 c c c \break
-\bar "||:"
+\bar ".|:-||"
c4 c c c
@end lilypond
@lilypond[quote,relative=2,verbatim]
c4 c c c
-\bar ":|S"
+\bar ":|.S"
c4 c c c \break
-\bar ":|S"
+\bar ":|.S"
c4 c c c
-\bar ":|S."
+\bar ":|.S-S"
c4 c c c \break
-\bar ":|S."
+\bar ":|.S-S"
c4 c c c
-\bar "S|:"
+\bar "S.|:-S"
c4 c c c \break
-\bar "S|:"
+\bar "S.|:-S"
c4 c c c
-\bar ".S|:"
+\bar "S.|:"
c4 c c c \break
-\bar ".S|:"
+\bar "S.|:"
c4 c c c
-\bar ":|S|:"
+\bar ":|.S.|:"
c4 c c c \break
-\bar ":|S|:"
+\bar ":|.S.|:"
c4 c c c
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
c4 c c c \break
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
c1
@end lilypond
以下の例では、譜刻可能な場所すべてに小節番号を譜刻しています:
@lilypond[verbatim,quote,relative=1]
-\override Score.BarNumber #'break-visibility = #'#(#t #t #t)
+\override Score.BarNumber.break-visibility = #'#(#t #t #t)
\set Score.currentBarNumber = #11
% Permit first bar number to be printed
\bar ""
@lilypond[quote,relative=2,verbatim]
<<
- \new Staff { e4 \bar "|:" \grace c16 d2. }
- \new Staff { c4 \bar "|:" d2. }
+ \new Staff { e4 \bar ".|:" \grace c16 d2. }
+ \new Staff { c4 \bar ".|:" d2. }
>>
@end lilypond
@lilypond[quote,relative=2,verbatim]
<<
- \new Staff { e4 \bar "|:" \grace c16 d2. }
- \new Staff { c4 \bar "|:" \grace s16 d2. }
+ \new Staff { e4 \bar ".|:" \grace c16 d2. }
+ \new Staff { c4 \bar ".|:" \grace s16 d2. }
>>
@end lilypond
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
以下でこのメッセージを表示させなくすることができます:
@example
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
@end example
しかしながら、これは警告を非表示にするだけでなく、@c
@cindex collisions, ignoring (衝突を無視する)
@knownissues
-@code{\override NoteColumn #'ignore-collision = ##t} を使うと@c
+@code{\override NoteColumn.ignore-collision = ##t} を使うと@c
異なるボイスにある符頭が異なる音符を不適切にマージします。
@lilypond[quote,relative=1,verbatim]
\mergeDifferentlyHeadedOn
<< { c16 a' b a } \\ { c,2 } >>
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
<< { c16 a' b a } \\ { c,2 } >>
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
Could we add a sentence:
"Use instead the pair fontSize = #@var{N}
- \override StaffSymbol #'staff-space = #(magstep
+ \override StaffSymbol.staff-space = #(magstep
@var{N})
inside the Staff context to change the size of the font and the
distance between
@table @code
-@item blank-after-score-page-force
-@funindex blank-after-score-page-force
+@item blank-after-score-page-penalty
+@funindex blank-after-score-page-penalty
楽譜の後ろ (と次の楽譜の前) に強制的に白紙を挿入します。@c
-デフォルトでは、この値は @code{blank-page-force} よりも小さいため、@c
+デフォルトでは、この値は @code{blank-page-penalty} よりも小さいため、@c
楽譜の途中ではなく後ろに白紙が挿入されます。
-@item blank-last-page-force
-@funindex blank-last-page-force
+@item blank-last-page-penalty
+@funindex blank-last-page-penalty
楽譜の最後が奇数ページの場合、楽譜の後ろに白紙を挿入します。
-@item blank-page-force
-@funindex blank-page-force
+@item blank-page-penalty
+@funindex blank-page-penalty
楽譜の途中に強制的に白紙を挿入します。@c
この値は @code{ly:optimal-breaking} では用いられません。@c
indent = 2\cm
\context @{
\StaffGroup
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #8
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #8
@}
\context @{
\Voice
- \override TextScript #'padding = #1
- \override Glissando #'thickness = #3
+ \override TextScript.padding = #1
+ \override Glissando.thickness = #3
@}
@}
@end example
\layout @{
\context @{
\Voice
- \override TextScript #'color = #magenta
- \override Glissando #'thickness = #1.5
+ \override TextScript.color = #magenta
+ \override Glissando.thickness = #1.5
@}
@}
@end example
layoutVariable = \layout @{
\context @{
\Voice
- \override NoteHead #'font-size = #4
+ \override NoteHead.font-size = #4
@}
@}
@end example
\layoutVariable
\context @{
\Voice
- \override NoteHead #'color = #red
+ \override NoteHead.color = #red
@}
@}
@end example
@end lilypond
同様に、通常は連桁が小節線を跨いでいる場合も、改行は禁止されます。@c
-この振る舞いは、@code{\override Beam #'breakable = ##t} により、@c
+この振る舞いは、@code{\override Beam.breakable = ##t} により、@c
変更することができます:
@lilypond[quote,ragged-right,relative=2,verbatim]
-\override Beam #'breakable = ##t
+\override Beam.breakable = ##t
c2. c8[ c | \break
c8 c] c2. |
@end lilypond
この振る舞いを上書きするための 2 つのコマンドがあります:
@example
-\override NonMusicalPaperColumn #'line-break-permission = ##f
-\override NonMusicalPaperColumn #'page-break-permission = ##f
+\override NonMusicalPaperColumn.line-break-permission = ##f
+\override NonMusicalPaperColumn.page-break-permission = ##f
@end example
@code{line-break-permission} が偽に上書きされた場合、@c
\layout {
\context {
\Score
- \override NonMusicalPaperColumn #'line-break-permission = ##f
- \override NonMusicalPaperColumn #'page-break-permission = ##f
+ \override NonMusicalPaperColumn.line-break-permission = ##f
+ \override NonMusicalPaperColumn.page-break-permission = ##f
}
}
}
\score {
\new Staff <<
\new Voice {
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
s1 * 2 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 35))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 35))
s1 * 3 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 70))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 70))
s1 * 6 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 105))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 105))
s1 * 5 \break
}
\new Voice {
#(define zero-space '((padding . -inf.0) (basic-distance . 0)))
alignToZero = \with {
- \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space
- \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #zero-space
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #zero-space
}
lowerCaseChords = \with {
chordNameLowercaseMinor = ##t
}
staffAffinityDown = \with {
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
labelContext =
#(define-music-function
\lowerCaseChords }
\context { \FretBoards \alignToZero \staffAffinityDown }
\context { \Score
- \override BarLine #'stencil = ##f
- \override DynamicText #'self-alignment-X = #-1
- \override FretBoard #'X-offset = #1.75
- \override InstrumentName #'minimum-Y-extent = #'(-2 . 2)
- \override InstrumentName #'extra-offset = #'(0 . -0.5)
- \override TextScript #'minimum-Y-extent = #'(-2 . 3)
- \override TimeSignature #'stencil = ##f
+ \override BarLine.stencil = ##f
+ \override DynamicText.self-alignment-X = #-1
+ \override FretBoard.X-offset = #1.75
+ \override InstrumentName.minimum-Y-extent = #'(-2 . 2)
+ \override InstrumentName.extra-offset = #'(0 . -0.5)
+ \override TextScript.minimum-Y-extent = #'(-2 . 3)
+ \override TimeSignature.stencil = ##f
}
}
@example
\new Staff \with @{
- \override VerticalAxisGroup #'default-staff-staff-spacing
- #'basic-distance = #10
+ \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
@} @{ @dots{} @}
\new Staff \with @{
- \override VerticalAxisGroup #'default-staff-staff-spacing =
+ \override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 10)
(minimum-distance . 9)
(padding . 1)
\layout @{
\context @{
\Staff
- \override VerticalAxisGroup #'default-staff-staff-spacing
- #'basic-distance = #10
+ \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
@}
@}
@end example
\layout {
\context {
\Staff
- \override VerticalAxisGroup #'default-staff-staff-spacing =
+ \override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 8)
(minimum-distance . 7)
(padding . 1))
% 'padding に負の値を設定することにより、譜を重ねることができます。
% 'basic-distance が取り得る最小の値は 0 です。
\new Staff \with {
- \override VerticalAxisGroup #'default-staff-staff-spacing =
+ \override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 3.5)
(padding . -10))
} { \clef bass g2 r | }
\layout {
\context {
\Score
- \override StaffGrouper #'staff-staff-spacing #'padding = #0
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #0
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #1
}
}
<<
\new PianoStaff \with {
- \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20
+ \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
} <<
\new Staff { c'1 }
\new Staff { c'1 }
\layout {
\context {
\Lyrics
- \override VerticalAxisGroup
- #'nonstaff-nonstaff-spacing #'stretchability = #1000
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing.stretchability = #1000
}
}
\new StaffGroup
<<
\new Staff \with {
- \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 30))
+ \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30))
} { c'1 }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #UP
+ \override VerticalAxisGroup.staff-affinity = #UP
} \lyricmode { up }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #CENTER
+ \override VerticalAxisGroup.staff-affinity = #CENTER
} \lyricmode { center }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
} \lyricmode { down }
\new Staff { c'1 }
>>
@code{NonMusicalPaperColumn} を上書きする例をいくつか挙げます:
@example
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((Y-offset . 40))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20)
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
(Y-offset . 40))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((alignment-distances . (15)))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((alignment-distances . (15)))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20)
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
(Y-offset . 40)
(alignment-distances . (15)))
@end example
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 40))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 80))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 80))
s1*5 \break
}
\new Voice { \repeat unfold 15 { c'4 c' c' c' } }
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 20)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 20)
(alignment-distances . (15)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 60)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
(alignment-distances . (15)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 100)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
(alignment-distances . (15)))
s1*5 \break
}
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0)
(alignment-distances . (30 10)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 60)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
(alignment-distances . (10 10)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 100)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
(alignment-distances . (10 30)))
s1*5 \break
}
@lilypond[quote,ragged-right,relative=2,verbatim]
c4_"Text"\pp
r2.
-\once \override TextScript #'outside-staff-priority = #1
+\once \override TextScript.outside-staff-priority = #1
c4_"Text"\pp % ここでは、テキストが譜の近くに配置されます
r2.
% outside-staff-priority に数ではない値を設定することにより、
% 自動衝突回避を無効にします
-\once \override TextScript #'outside-staff-priority = ##f
-\once \override DynamicLineSpanner #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
+\once \override DynamicLineSpanner.outside-staff-priority = ##f
c4_"Text"\pp % ここでは、2 つのオブジェクトが衝突します
@end lilypond
@c KEEP LY
@lilypond[quote,ragged-right,relative=2,verbatim,staffsize=18]
-\once \override TextScript #'outside-staff-padding = #0
+\once \override TextScript.outside-staff-padding = #0
a'^"このテキストは音符のすぐ近くに配置されます。"
-\once \override TextScript #'outside-staff-padding = #3
+\once \override TextScript.outside-staff-padding = #3
c^"このテキストは前のテキストから離れた位置に配置されます"
c^"この手キスとは前にテキストの近くに配置されます"
@end lilypond
c''2
% outside-staff-horizontal-padding を設定することで修正します
R1
-\once \override TextScript #'outside-staff-horizontal-padding = #1
+\once \override TextScript.outside-staff-horizontal-padding = #1
c,,4^"Text"
c4
c''2
{
c'4 e''4 e'4 b'4 |
b'4 e''4 b'4 e''4 |
- \override Staff.NoteSpacing #'stem-spacing-correction = #1.5
- \override Staff.StaffSpacing #'stem-spacing-correction = #1.5
+ \override Staff.NoteSpacing.stem-spacing-correction = #1.5
+ \override Staff.StaffSpacing.stem-spacing-correction = #1.5
c'4 e''4 e'4 b'4 |
b'4 e''4 b'4 e''4 |
}
-- 必要に応じて、パディングの値を調整しています。
@example
- \override Score.NonMusicalPaperColumn #'padding = #10
+ \override Score.NonMusicalPaperColumn.padding = #10
@end example
スペースを減らすための手段はありません。
\layout {
\context {
\Score
- \override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 1 16)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16)
}
}
}
\layout {
\context {
\Score
- \override SpacingSpanner #'uniform-stretching = ##t
+ \override SpacingSpanner.uniform-stretching = ##t
}
}
}
音符にスペースが割り当てられます。
@lilypond[quote,ragged-right,relative=2,verbatim]
-\override Score.SpacingSpanner #'strict-note-spacing = ##t
+\override Score.SpacingSpanner.strict-note-spacing = ##t
\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] }
@end lilypond
@item @code{uniform-stretching}
@item @code{strict-note-spacing}
@item @code{\remove "Separating_line_group_engraver"}
-@item @code{\override PaperColumn #'used = ##t}
+@item @code{\override PaperColumn.used = ##t}
@end itemize
以下の例では、@c
\context {
\Score
proportionalNotationDuration = #(ly:make-moment 1 20)
- \override SpacingSpanner #'uniform-stretching = ##t
+ \override SpacingSpanner.uniform-stretching = ##t
}
}
}
\new Staff {
\set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
- \override Score.SpacingSpanner #'strict-note-spacing = ##t
+ \override Score.SpacingSpanner.strict-note-spacing = ##t
c''8
c''8
c''8
以下のような設定です:
@itemize
-@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
+@item @code{\override SpacingSpanner.strict-grace-spacing = ##t}
@item @code{tupletFullLength = ##t}
-@item @code{\override Beam #'breakable = ##t}
-@item @code{\override Glissando #'breakable = ##t}
-@item @code{\override TextSpanner #'breakable = ##t}
+@item @code{\override Beam.breakable = ##t}
+@item @code{\override Glissando.breakable = ##t}
+@item @code{\override TextSpanner.breakable = ##t}
@item @code{\remove "Forbid_line_break_engraver" in the Voice context}
@end itemize
@lilypond[verbatim,quote,relative=1]
e4 c g\f c
-e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c
+e4 c g-\tweak X-offset #-2.7 -\tweak Y-offset #2.5 \f c
@end lilypond
@item
\layout {
\context {
\Score
- \override SpacingSpanner
- #'common-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 2)
}
}
}
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@lilypond[verbatim,quote,relative=2]
f4 d \stopStaff
-\override Staff.StaffSymbol #'line-count = #2
+\override Staff.StaffSymbol.line-count = #2
\startStaff g, e |
f'4 d \stopStaff
-\revert Staff.StaffSymbol #'line-count
+\revert Staff.StaffSymbol.line-count
\startStaff g, e |
@end lilypond
@lilypond[verbatim,quote,relative=2]
f4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(1 3 5 -1 -3)
+\override Staff.StaffSymbol.line-positions = #'(1 3 5 -1 -3)
\startStaff g, e |
f'4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(8 6.5 -6 -8 -0.5)
+\override Staff.StaffSymbol.line-positions = #'(8 6.5 -6 -8 -0.5)
\startStaff g, e
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'thickness = #3
+ \override StaffSymbol.thickness = #3
}
{ f4 d g, e }
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'thickness = #2
- \override StaffSymbol #'ledger-line-thickness = #'(0.5 . 0.4)
+ \override StaffSymbol.thickness = #2
+ \override StaffSymbol.ledger-line-thickness = #'(0.5 . 0.4)
}
{ f'4 a, a,, f }
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'ledger-positions = #'(-3 -2 -1 2 5 6)
+ \override StaffSymbol.ledger-positions = #'(-3 -2 -1 2 5 6)
}
{ f'4 a, a,, f }
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'ledger-extra = #4
+ \override StaffSymbol.ledger-extra = #4
}
{ f'4 a, d, f, }
@end lilypond
@code{\stopStaff} を行う必要があります。
@lilypond[fragment,quote,relative=1]
-\override Staff.StaffSymbol #'line-positions = #'(-8 0 2 4)
+\override Staff.StaffSymbol.line-positions = #'(-8 0 2 4)
d4 e f g
\stopStaff
\startStaff
-\override Staff.StaffSymbol #'ledger-positions = #'(-8 -6 (-4 -2) 0)
+\override Staff.StaffSymbol.ledger-positions = #'(-8 -6 (-4 -2) 0)
d4 e f g
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'staff-space = #1.5
+ \override StaffSymbol.staff-space = #1.5
}
{ f'4 d, g, e, }
@end lilypond
\remove "Time_signature_engraver"
alignAboveContext = #"main"
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
firstClef = ##f
}
{ e4 d f e }
<<
\new Staff = ossia \with {
\remove "Time_signature_engraver"
- \override Clef #'transparent = ##t
+ \override Clef.transparent = ##t
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
}
{ \stopStaff s1*6 }
<<
\new Staff = ossia \with {
\remove "Time_signature_engraver"
- \override Clef #'transparent = ##t
+ \override Clef.transparent = ##t
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
} \relative c'' {
R1*3
c4 e8 d c2
\layout {
\context {
\Staff \RemoveEmptyStaves
- \override VerticalAxisGroup #'remove-first = ##t
+ \override VerticalAxisGroup.remove-first = ##t
}
}
@end lilypond
以下のオーバライドを使用してください:
@example
-\override StaffSymbol #'stencil = ##f
-\override NoteHead #'no-ledgers = ##t
+\override StaffSymbol.stencil = ##f
+\override NoteHead.no-ledgers = ##t
@end example
@code{\Staff \RemoveEmptyStaves} に関連する既知の問題と警告は
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
処理速度を上げる必要がある場合は、以下を用います:
@example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
@end example
ある音符から他の音符までの範囲に作成することができます:
@lilypond[verbatim,quote,relative=2]
-\override TextSpanner #'(bound-details left text) = "rit."
+\override TextSpanner.bound-details.left.text = "rit."
b1\startTextSpan
e,\stopTextSpan
@end lilypond
@code{\markup} ブロックを用いることで他の書体にすることができます。
@lilypond[quote,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text) =
+\override TextSpanner.bound-details.left.text =
\markup { \upright "rit." }
b1\startTextSpan c
e,\stopTextSpan
@code{font-size} に提供する値が必要となります。
@lilypond[quote,verbatim,relative=2]
-\override Score.RehearsalMark #'font-family = #'typewriter
+\override Score.RehearsalMark.font-family = #'typewriter
\mark \markup "Ouverture"
-\override Voice.TextScript #'font-shape = #'italic
-\override Voice.TextScript #'font-series = #'bold
+\override Voice.TextScript.font-shape = #'italic
+\override Voice.TextScript.font-series = #'bold
d2.^\markup "Allegro"
-\override Voice.TextScript #'font-size = #-3
+\override Voice.TextScript.font-size = #-3
c4^smaller
@end lilypond
楽譜の中で使用することができます:
@lilypond[quote,verbatim,relative=2]
-\override Staff.TimeSignature #'font-name = #"Bitstream Charter"
-\override Staff.TimeSignature #'font-size = #2
+\override Staff.TimeSignature.font-name = #"Bitstream Charter"
+\override Staff.TimeSignature.font-size = #2
\time 3/4
a1_\markup {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
以下のように記述しないでください
@example
-\override Score.LyricText #'font-shape = #'italic
+\override Score.LyricText.font-shape = #'italic
@end example
@noindent
以下のように記述してください
@example
-\override Score . LyricText #'font-shape = #'italic
+\override Score.LyricText.font-shape = #'italic
@end example
句読点、アクセントが付いた文字を持つ歌詞、英語以外の言語の文字、@c
<<
\new Lyrics = "lyrics" \with {
% 譜の上に配置する歌詞は以下のオーバライドを行う必要があります
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff {
\new Voice = "melody" {
\new Lyrics = "contraltos" \with {
% 譜の上に配置する歌詞は以下のオーバライドを行う必要があります
% lyrics above a staff should have this override
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff {
\new Voice = "contraltos" {
@lilypond[relative=1,verbatim,quote,ragged-right]
{
c c c c
- \override Lyrics.LyricSpace #'minimum-distance = #1.0
+ \override Lyrics.LyricSpace.minimum-distance = #1.0
c c c c
}
\addlyrics {
\layout {
\context {
\Lyrics
- \override LyricSpace #'minimum-distance = #1.0
+ \override LyricSpace.minimum-distance = #1.0
}
}
}
この機能を無効にすることで、処理をわずかにスピードアップすることができます:
@example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
@end example
歌詞が小節線を避けるようにするには、以下を使います:
\Lyrics
\consists "Bar_engraver"
\consists "Separating_line_group_engraver"
- \override BarLine #'transparent = ##t
+ \override BarLine.transparent = ##t
@}
@}
@end example
\voiceOne
\times 2/3 {
% show associations clearly.
- \override NoteColumn #'force-hshift = #-3
+ \override NoteColumn.force-hshift = #-3
f8 f g
}
}
\layout {
\context {
\Score
- \override DynamicText #'direction = #UP
- \override DynamicLineSpanner #'direction = #UP
+ \override DynamicText.direction = #UP
+ \override DynamicLineSpanner.direction = #UP
}
}
}
c4. g8
% 合図音符の楽器名を、合図音符の直前、かつ譜の上に配置します
\new CueVoice {
- \override InstrumentSwitch #'self-alignment-X = #RIGHT
+ \override InstrumentSwitch.self-alignment-X = #RIGHT
\set instrumentCueName = "Flute"
}
\cueDuring "flute" #UP { g4 bes4 }
\transposition c'
% 合図音符の楽器名を譜の下に配置します
\new CueVoice {
- \override InstrumentSwitch #'self-alignment-X = #RIGHT
- \override InstrumentSwitch #'direction = #DOWN
+ \override InstrumentSwitch.self-alignment-X = #RIGHT
+ \override InstrumentSwitch.direction = #DOWN
\set instrumentCueName = "Clar."
}
\cueDuring "clarinet" #DOWN { c4. g8 }
\score {
<<
\new Lyrics \with {
- \override LyricText #'font-shape = #'italic
- \override LyricText #'self-alignment-X = #LEFT
+ \override LyricText.font-shape = #'italic
+ \override LyricText.self-alignment-X = #LEFT
}
{ \dialogue }
\new Staff {
リズムは単語の音声リズムから取ります。
@lilypond[verbatim,quote]
-stemOff = { \override Staff.Stem #'transparent = ##t }
+stemOff = { \override Staff.Stem.transparent = ##t }
\relative c' {
\stemOff
\bar "'"
a4 b c2
a4 b c2
-\bar ":"
+\bar ";"
a4 b c2
-\bar "dashed"
+\bar "!"
a4 b c2
\bar "||"
@end lilypond
@lilypond[verbatim,quote]
divisioMinima = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-minima
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
divisioMaior = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maior
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maior
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
divisioMaxima = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maxima
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maxima
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
finalis = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::finalis
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::finalis
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
\layout {
\context {
\Score
- \override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 2)
}
\context {
\Staff
+++ /dev/null
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
結果は 2 つの譜が表示され、下の譜の符頭の色はデフォルトの黒のままとなります。
@lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
\new Staff { a }
@end lilypond
@lilypond[quote,verbatim,relative=2]
\new Staff {
- \override Staff.NoteHead #'color = #red
+ \override Staff.NoteHead.color = #red
a
}
@end lilypond
譜として振舞うコンテキストを作ることで回避できます:
@example
-\override VerticalAxisGroup #'staff-affinity = ##f
+\override VerticalAxisGroup.staff-affinity = ##f
@end example
@noindent
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Fundamental concepts
@chapter Fundamental concepts
\\ % Voice two
{
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'ignore-collision = ##t
+ \once \override NoteColumn.ignore-collision = ##t
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\ % No voice three
\\ % Voice four
{
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
\\ % Voice two
{ \voiceTwoStyle
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'ignore-collision = ##t
+ \once \override NoteColumn.ignore-collision = ##t
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\ % No Voice three (we want stems down)
\\ % Voice four
{ \voiceThreeStyle
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
@seealso
The starting templates can be found in the @q{Templates} appendix,
-see @ref{Single staff}.
+see @ref{Single staff templates}.
@node Four-part SATB vocal score
@end lilypond
None of the templates provides this layout exactly. The nearest is
-@q{SATB vocal score and automatic piano reduction} -- see
-@ref{Vocal ensembles} -- but we need to change the layout and add a piano
+@ref{SATB vocal score and automatic piano reduction} -- but we need
+to change the layout and add a piano
accompaniment which is not derived automatically from the vocal parts.
The variables holding the music and words for the vocal parts are
fine, but we shall need to add variables for the piano reduction.
@}
>> % end ManualOne Staff context
\new Staff = "ManualTwo" \with @{
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
@} <<
\keyTime
\clef "bass"
}
>> % end ManualOne Staff context
\new Staff = "ManualTwo" \with {
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
} <<
\keyTime
\clef "bass"
@lilypond[quote,verbatim,ragged-right]
dolce = \markup { \italic \bold dolce }
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
fthenp =_\markup {
\dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}
violin = \relative c'' @{
\repeat volta 2 @{
c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
- \once \override TextScript #'padding = #5.0
+ \once \override TextScript.padding = #5.0
c4.^"hi there!" d8 e' f g d |
c,4.\markup @{
\dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
already set up for you. Just add notes, run LilyPond, and enjoy
beautiful printed scores!
-@c bad node name for ancient notation to avoid conflict
@menu
-* Single staff::
+* Single staff templates::
* Piano templates::
-* String quartet::
-* Vocal ensembles::
+* String quartet templates::
+* Vocal ensembles templates::
* Orchestral templates::
* Ancient notation templates::
* Other templates::
@end menu
-@node Single staff
-@appendixsec Single staff
+@node Single staff templates
+@appendixsec Single staff templates
+
+@menu
+* Notes only::
+* Notes and lyrics::
+* Notes and chords::
+* Notes lyrics and chords::
+@end menu
+@node Notes only
@appendixsubsec Notes only
@lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
{single-staff-template-with-only-notes.ly}
-
+@node Notes and lyrics
@appendixsubsec Notes and lyrics
@lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
{single-staff-template-with-notes-and-lyrics.ly}
+@node Notes and chords
@appendixsubsec Notes and chords
@lilypondfile[verbatim,quote,ragged-right,texidoc]
{single-staff-template-with-notes-and-chords.ly}
-@appendixsubsec Notes, lyrics, and chords.
+@node Notes lyrics and chords
+@appendixsubsec Notes, lyrics, and chords
@lilypondfile[verbatim,quote,ragged-right,texidoc]
{single-staff-template-with-notes,-lyrics,-and-chords.ly}
@node Piano templates
@appendixsec Piano templates
+@menu
+* Solo piano::
+* Piano and melody with lyrics::
+* Piano centered lyrics::
+@end menu
+
+@node Solo piano
@appendixsubsec Solo piano
@lilypondfile[verbatim,quote,ragged-right,texidoc]
{piano-template-simple.ly}
+@node Piano and melody with lyrics
@appendixsubsec Piano and melody with lyrics
@lilypondfile[verbatim,quote,ragged-right,texidoc]
{piano-template-with-melody-and-lyrics.ly}
+@node Piano centered lyrics
@appendixsubsec Piano centered lyrics
@lilypondfile[verbatim,quote,ragged-right,texidoc]
{piano-template-with-centered-lyrics.ly}
-@node String quartet
-@appendixsec String quartet
+@node String quartet templates
+@appendixsec String quartet templates
+@menu
+* String quartet::
+* String quartet parts::
+@end menu
+
+@node String quartet
@appendixsubsec String quartet
@lilypondfile[verbatim,quote,ragged-right,texidoc]
{string-quartet-template-simple.ly}
+@node String quartet parts
@appendixsubsec String quartet parts
@lilypondfile[verbatim,quote,ragged-right,texidoc]
{string-quartet-template-with-separate-parts.ly}
-@node Vocal ensembles
-@appendixsec Vocal ensembles
+@node Vocal ensembles templates
+@appendixsec Vocal ensembles templates
+@menu
+* SATB vocal score::
+* SATB vocal score and automatic piano reduction::
+* SATB with aligned contexts::
+* SATB on four staves::
+* Solo verse and two-part refrain::
+* Hymn tunes::
+* Psalms::
+@end menu
+
+@node SATB vocal score
@appendixsubsec SATB vocal score
@lilypondfile[verbatim,quote,ragged-right,texidoc]
{vocal-ensemble-template.ly}
+@node SATB vocal score and automatic piano reduction
@appendixsubsec SATB vocal score and automatic piano reduction
@lilypondfile[verbatim,quote,ragged-right,texidoc]
{vocal-ensemble-template-with-automatic-piano-reduction.ly}
+@node SATB with aligned contexts
@appendixsubsec SATB with aligned contexts
@lilypondfile[verbatim,quote,ragged-right,texidoc]
{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly}
+@node SATB on four staves
@appendixsubsec SATB on four staves
@lilypondfile[verbatim,quote,ragged-right,texidoc]
{satb-choir-template---four-staves.ly}
+@node Solo verse and two-part refrain
@appendixsubsec Solo verse and two-part refrain
@lilypondfile[verbatim,quote,ragged-right,texidoc]
{vocal-ensemble-template-with-verse-and-refrain.ly}
+@node Hymn tunes
@appendixsubsec Hymn tunes
@lilypondfile[verbatim,quote,ragged-right,texidoc]
{hymn-template.ly}
+@node Psalms
@appendixsubsec Psalms
@lilypondfile[verbatim,quote,ragged-right,texidoc]
@node Orchestral templates
@appendixsec Orchestral templates
+@menu
+* Orchestra choir and piano::
+@end menu
+
+@node Orchestra choir and piano
@appendixsubsec Orchestra, choir and piano
+
@lilypondfile[verbatim,quote,ragged-right,texidoc]
{orchestra,-choir-and-piano-template.ly}
-@c bad node name to avoid node name conflict
@node Ancient notation templates
@appendixsec Ancient notation templates
+@menu
+* Transcription of mensural music::
+* Gregorian transcription template::
+@end menu
+
+@node Transcription of mensural music
@appendixsubsec Transcription of mensural music
@c Line-width below is because of Issue 766. If that's fixed, it can be removed.
@lilypondfile[verbatim,quote,ragged-right,texidoc,line-width=140]
{ancient-notation-template----modern-transcription-of-mensural-music.ly}
+@node Gregorian transcription template
@appendixsubsec Gregorian transcription template
@lilypondfile[verbatim,quote,ragged-right,texidoc]
@node Other templates
@appendixsec Other templates
+@menu
+* Jazz combo::
+@end menu
+
+@node Jazz combo
@appendixsubsec Jazz combo
@c Line-width below is because of Issue 766. If that's fixed, it can be removed.
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Tweaking output
@chapter Tweaking output
The general syntax of this command is:
@example
-\override @var{Context}.@var{LayoutObject} #'@var{layout-property} =
-#@var{value}
+\override @var{Context}.@var{LayoutObject}.@var{layout-property} = #@var{value}
@end example
@noindent
layout object with the name @var{LayoutObject}, which is a member of
the @var{Context} context, to the value @var{value}.
-The @var{Context} can be omitted (and usually is) when the
+The @var{Context} may be omitted (and usually is) when the
required context is unambiguously implied and is one of lowest
level contexts, i.e., @code{Voice}, @code{ChordNames} or
@code{Lyrics}, and we shall omit it in many of the following
examples. We shall see later when it must be specified.
Later sections deal comprehensively with properties and their
-values, see @ref{Types of properties}. But in this section we shall
+values, see @ref{Types of properties}. But in this section we shall
use just a few simple properties and values which are easily
understood in order to illustrate the format and use of these
commands.
-For now, don't worry about the @code{#'}, which must precede the
-layout property, and the@tie{}@code{#}, which must precede the value.
-These must always be present in exactly this form. This is the
-most common command used in tweaking, and most of the rest of
-this chapter will be directed to presenting examples of how it is
-used. Here is a simple example to change the color of the
-note head:
+LilyPond's primary expressions are musical items like notes,
+durations, and markups. More basic expressions like numbers,
+strings, and lists are processed in @q{Scheme mode}, which is
+invoked by prefixing the value with @samp{#}. Although the
+values may sometimes have a valid representation in LilyPond's
+musical mode, this manual will always use @samp{#} for their
+entry for the sake of consistency. For more information about
+Scheme mode, see @rextend{LilyPond Scheme syntax}.
+
+@code{\override} is the most common command used in tweaking, and
+most of the rest of this chapter will be directed to presenting
+examples of how it is used. Here is a simple example to change the
+color of the note head:
@cindex color property, example
@cindex NoteHead, example of overriding
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
g4 a b c |
@end lilypond
commands have been issued.
@example
-\revert @var{Context}.@var{LayoutObject} #'@var{layout-property}
+\revert @var{Context}.@var{LayoutObject}.@var{layout-property}
@end example
Again, just like @var{Context} in the @code{\override} command,
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
b4 c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
e4 f |
-\once \override NoteHead #'color = #green
+\once \override NoteHead.color = #green
g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
b c |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>4
-\once \override NoteHead #'font-size = #-3
+\once \override NoteHead.font-size = #-3
<c e g>4
<c e g>4
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
<c e g>4
-<c \tweak #'font-size #-3 e g>4
+<c \tweak font-size #-3 e g>4
@end lilypond
Note that the syntax of @code{\tweak} is different from that of the
of the @code{\tweak} command is
@example
-\tweak #'@var{layout-property} #@var{value}
+\tweak @var{layout-property} #@var{value}
@end example
A @code{\tweak} command can also be used to modify just one in
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
a4^"Black"
- -\tweak #'color #red ^"Red"
- -\tweak #'color #green _"Green"
+ -\tweak color #red ^"Red"
+ -\tweak color #green _"Green"
@end lilypond
@noindent
the original event:
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-<\tweak Accidental #'color #red cis4
- \tweak Accidental #'color #green es
- g>
+<\tweak Accidental.color #red cis4
+ \tweak Accidental.color #green es
+ g>
@end lilypond
This long form of the @code{\tweak} command can be described as
+
@example
-\tweak @var{layout-object} #'@var{layout-property} @var{value}
+\tweak @var{layout-object}.@var{layout-property} @var{value}
@end example
@cindex tuplets, nested
@cindex color property, example
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
+\tweak direction #up
\times 4/3 {
- \tweak #'color #red
+ \tweak color #red
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
@cindex transparent property, example
@cindex TupletNumber, example of overriding
-@c NOTE Tuplet brackets collide if notes are high on staff
-@c See issue 509
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
\times 2/3 { c8[ c c] }
-\once \override TupletNumber
- #'text = #tuplet-number::calc-fraction-text
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
\times 2/3 {
c8[ c]
c8[ c]
- \once \override TupletNumber #'transparent = ##t
+ \once \override TupletNumber.transparent = ##t
\times 2/3 { c8[ c c] }
\times 2/3 { c8[ c c] }
}
at first, so we can be sure the command is working. We get:
@example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
@end example
-Don't forget the @code{#'} preceding the
-property name and a@tie{}@code{#} preceding the new value!
+Don't forget the@tie{}@code{#} preceding the new value!
The final question is, @q{Where should this command be
placed?} While you are unsure and learning, the best
\time 6/8
{
% Increase thickness of all following slurs from 1.2 to 5.0
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
r4 bes8 bes[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
{
r4 bes8
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes8[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
{
r4 bes8
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes[( g]) g |
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
g8[( es]) es d[( f]) as |
as8 g
}
{
r4 bes8
% Increase thickness of all following slurs from 1.2 to 5.0
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
bes[( g]) g |
g8[( es]) es
% Revert thickness of all following slurs to default of 1.2
- \revert Slur #'thickness
+ \revert Slur.thickness
d8[( f]) as |
as8 g
}
the property is @code{font-shape} and the value is
@code{italic}. As before, we'll omit the context.
-As an aside, although it is an important one, note that because the
-values of @code{font-shape} are symbols they must be introduced with a
-single apostrophe, @code{'}. That is why apostrophes are needed
-before @code{thickness} in the earlier example and @code{font-shape}.
-These are both symbols too. Symbols are then read internally by
-LilyPond. Some of them are the names of properties, like
-@code{thickness} or @code{font-shape}, others are used as values that
-can be given to properties, like @code{italic}. Note the distinction
-from arbitrary text strings, which would appear as @code{"a text
-string"}; for more details about symbols and strings, see
-@rextend{Scheme tutorial}.
+As an aside, although it is an important one, note that some
+properties take values that are symbols, like @code{italic}, and
+must be preceded by an apostrophe, @code{'}. Symbols are then
+read internally by LilyPond. Note the distinction from arbitrary
+text strings, which would appear as @code{"a text string"}; for
+more details about symbols and strings, see @rextend{Scheme tutorial}.
So we see that the @code{\override} command needed to print the lyrics
in italics is:
@example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
@end example
@noindent
as8 g
}
\addlyrics {
- \override LyricText #'font-shape = #'italic
+ \override LyricText.font-shape = #'italic
The man who | feels love's sweet e -- | mo -- tion
}
}
@noindent
and the lyrics are all printed in italics.
-@subheading Specifying the context in lyric mode
-
-@cindex context, specifying in lyric mode
-@cindex lyric mode, specifying context
-
-In the case of lyrics, if you try specifying the context in the
-format given earlier the command will fail. A syllable
-entered in lyricmode is terminated by either a space,
-a newline or a digit. All other characters are included
-as part of the syllable. For this reason a space or newline
-must appear before the terminating @code{@}} to prevent it being
-included as part of the final syllable. Similarly,
-spaces must be inserted before and after the
-period or dot, @q{.}, separating the context name from the
-object name, as otherwise the two names are run together and
-the interpreter cannot recognize them. So the command should be:
-
-@example
-\override Lyrics . LyricText #'font-shape = #'italic
-@end example
-
@warning{In lyrics always leave whitespace between the final
syllable and the terminating brace.}
-@warning{In overrides in lyrics always place spaces around
-the dot between the context name and the object name.}
-
@seealso
Extending: @rextend{Scheme tutorial}.
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override BarLine #'stencil = ##f
+ \override BarLine.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'stencil = ##f
+ \override Staff.BarLine.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@end lilypond
-Now the bar lines have vanished.
+Now the bar lines have vanished. Setting the @code{stencil}
+property to @code{#f} is such a frequent operation that there is a
+shorthand for it called @code{\omit}:
+@funindex \omit
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \omit Staff.BarLine
+ c4 b8 c d16 c d8 |
+ g,8 a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
Note, though, that setting the @code{stencil} property to @code{#f}
will cause errors when the dimensions of the object are required for
@lilypond[quote,verbatim,relative=2]
{
c4 c
- \once \override NoteHead #'stencil = #point-stencil
+ \once \override NoteHead.stencil = #point-stencil
c4 c
}
@end lilypond
These control respectively whether bar lines are printed at the end of
a line, in the middle of lines, and at the beginning of lines. For
our example we want all bar lines to be suppressed, so the value we
-need is @code{'#(#f #f #f)}. Let's try that, remembering to include
+need is @code{#(#f #f #f)} (also available
+under the name @code{all-invisible}). Let's try that, remembering to include
the @code{Staff} context. Note also that in writing this value we
-have @code{#'#} before the opening bracket. The @code{'#} is required
-as part of the value to introduce a vector, and the first@tie{}@code{#} is
+have @code{##} before the opening parenthesis. One @code{#} is required
+as part of vector constant syntax, and the first@tie{}@code{#} is
required, as always, to precede the value itself in the
@code{\override} command.
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+ \override Staff.BarLine.break-visibility = ##(#f #f #f)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'transparent = ##t
+ \override Staff.TimeSignature.transparent = ##t
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@end lilypond
@noindent
-The time signature is gone, but this command leaves a gap where
+Again, setting the @code{transparent} property is a rather
+frequent operation, so we have a shorthand for it called
+@code{\hide}:
+@funindex \hide
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \hide Staff.TimeSignature
+ c4 b8 c d16 c d8 |
+ g,8 a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+@noindent
+In either case, the time signature is gone, but this command
+leaves a gap where
the time signature should be. Maybe this is what is wanted for
an exercise for the student to fill it in, but in other
circumstances a gap might be undesirable. To remove it, the
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'stencil = ##f
+ \omit Staff.TimeSignature
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@noindent
and the difference is obvious: setting the stencil to @code{#f}
+(possibly via @code{\omit})
removes the object entirely; making the object @code{transparent}
+(which can be done using @code{\hide})
leaves it where it is, but makes it invisible.
@subheading color
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #white
+ \override Staff.BarLine.color = #white
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@noindent
and again, we see the bar lines are not visible. Note that
@emph{white} is not preceded by an apostrophe -- it is not
-a symbol, but a @emph{function}. When called, it provides
+a symbol, but a @emph{variable}. When evaluated, it provides
the list of internal values required to set the color to
-white. The other colors in the normal list are functions
+white. The other colors in the normal list are variables
too. To convince yourself this is working you might like
-to change the color to one of the other functions in the
+to change the color to one of the other variables in the
list.
@cindex color, X11
The second way of changing the color is to use the list of
X11 color names in the second list in @ruser{List of colors}.
-However, these must be preceded by another function, which
-converts X11 color names into the list of internal values,
-@code{x11-color}, like this:
+However, these are mapped to the actual values by the function
+@code{x11-color} which
+converts X11 color symbols into the list of internal values like this:
@cindex BarLine, example of overriding
@cindex color property, example
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #(x11-color 'white)
+ \override Staff.BarLine.color = #(x11-color 'white)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@noindent
Note that in this case the function @code{x11-color} takes
a symbol as an argument, so the symbol must be preceded by
-an apostrophe and the two enclosed in brackets.
+an apostrophe to keep it from being evaluated as a variable, and
+the whole function call has to be enclosed in parentheses.
@cindex rgb colors
@cindex color, rgb
@funindex rgb-color
-There is yet a third function, one which converts RGB values into
+There is another function, one which converts RGB values into
internal colors -- the @code{rgb-color} function. This takes
three arguments giving the intensities of the red, green and
blue colors. These take values in the range 0 to 1. So to
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+ \override Staff.BarLine.color = #(rgb-color 1 1 1)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.StaffSymbol #'color = #(x11-color 'grey30)
- \override Staff.TimeSignature #'color = #(x11-color 'grey60)
- \override Staff.Clef #'color = #(x11-color 'grey60)
- \override Voice.NoteHead #'color = #(x11-color 'grey85)
- \override Voice.Stem #'color = #(x11-color 'grey85)
- \override Staff.BarLine #'color = #(x11-color 'grey10)
+ \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+ \override Staff.TimeSignature.color = #(x11-color 'grey60)
+ \override Staff.Clef.color = #(x11-color 'grey60)
+ \override Voice.NoteHead.color = #(x11-color 'grey85)
+ \override Voice.Stem.color = #(x11-color 'grey85)
+ \override Staff.BarLine.color = #(x11-color 'grey10)
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@cindex alignAboveContext property, example
@cindex @code{\with}, example
-@cindex stencil property, example
+@funindex \omit
@cindex Clef, example of overriding
@cindex TimeSignature, example of overriding
alignAboveContext = #"main"
}
{
- \override Staff.Clef #'stencil = ##f
- \override Staff.TimeSignature #'stencil = ##f
+ \omit Staff.Clef
+ \omit Staff.TimeSignature
{ f8 f c }
}
>>
But what is the difference between modifying the staff context by
using @code{\with} and modifying the stencils of the clef and the
-time signature with \override? The main difference is that
+time signature with @code{\override}, or in this case
+@code{\omit}?
+The main difference is that
changes made in a @code{\with} clause are made at the time the
context is created, and remain in force as the @strong{default}
values for the duration of that context, whereas
\new Staff \with {
alignAboveContext = #"main"
% Don't print clefs in this staff
- \override Clef #'stencil = ##f
+ \override Clef.stencil = ##f
+ % Don't print time signatures in this staff
+ \override TimeSignature.stencil = ##f
+ }
+ { f8 f c }
+ >>
+ r4 |
+ }
+}
+@end lilypond
+
+It turns out that we can also employ the shorthands @code{\hide}
+and @code{\omit} for setting the @code{transparent} property and
+clearing the @code{stencil} here, leading to the result
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+ \relative g' {
+ r4 g8 g c4 c8 d |
+ e4 r8
+ <<
+ { f8 c c }
+ \new Staff \with {
+ alignAboveContext = #"main"
+ % Don't print clefs in this staff
+ \omit Clef
% Don't print time signatures in this staff
- \override TimeSignature #'stencil = ##f
+ \omit TimeSignature
}
{ f8 f c }
>>
like
@example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
@end example
or we can change the size of all fonts by setting a special
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \omit Clef
+ \omit TimeSignature
% Reduce all font sizes by ~24%
fontSize = #-2
}
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \omit Clef
+ \omit TimeSignature
fontSize = #-2
% Reduce stem length and line spacing to match
- \override StaffSymbol #'staff-space = #(magstep -2)
+ \override StaffSymbol.staff-space = #(magstep -2)
}
{ f8 f c }
>>
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
a4 g c a |
-\override Stem #'direction = #DOWN
+\override Stem.direction = #DOWN
a4 g c a |
-\override Stem #'direction = #UP
+\override Stem.direction = #UP
a4 g c a |
-\revert Stem #'direction
+\revert Stem.direction
a4 g c a |
@end lilypond
@tab Tuplets are below/above notes
@end multitable
-Note that these predefined commands may @strong{not} be
+The neutral/normal variants of these commands are implemented
+using @code{\revert} and may @strong{not} be
preceded by @code{\once}. If you wish to limit the
-effect to a single note you must either use the equivalent
-@code{\once \override} command or use the predefined command
-followed after the affected note by the corresponding
-@code{\xxxNeutral} command.
+effect of the other commands (which are implemented using
+@code{\override}) to a single timestep, you can precede them with
+@code{\once} like you would do with explicit overrides.
@unnumberedsubsubsec Fingering
@lilypond[quote,verbatim,relative=2]
c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #DOWN
+\override Fingering.direction = #DOWN
c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #UP
+\override Fingering.direction = #UP
c4-5 a-3 f-1 c'-5 |
@end lilypond
try @w{@code{-7}}:
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
+\override Fingering.font-size = #-7
\set fingeringOrientations = #'(left)
<f-2>4
<c-1 e-2 g-3 b-5>4
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
% Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% Place dynamics above staff
\dynamicUp
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
% Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% Place dynamics above staff
\dynamicUp
% Place following Ottava Bracket below Text Spanners
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
% Start Ottava Bracket
\ottava #1
c'4 \startTextSpan
@lilypond[quote,verbatim,relative=2]
c4( c^\markup { \tiny \sharp } d4.) c8 |
c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
c4^\markup { \tiny \sharp } d4.) c8 |
-\once \override Slur #'outside-staff-priority = #500
+\once \override Slur.outside-staff-priority = #500
c4( c^\markup { \tiny \sharp } d4.) c8 |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
c2^"Text1"
c2^"Text2" |
-\once \override TextScript #'outside-staff-priority = #500
+\once \override TextScript.outside-staff-priority = #500
c2^"Text3"
c2^"Text4" |
@end lilypond
R1 |
% Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
c,,2^"Long Text " c'' |
R1 |
% Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
\textLengthOn % and turn on textLengthOn
c,,2^"Long Text " % Spaces at end are honored
c''2 |
the command to do this for dynamic text:
@example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
@end example
@noindent
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
a4\f b\mf c\mp b\p |
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
% Extend width by 1 staff space
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
c2\fermata
-\override Script #'padding = #3
+\override Script.padding = #3
b2\fermata
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
% This will not work, see below
-\override MetronomeMark #'padding = #3
+\override MetronomeMark.padding = #3
\tempo 4 = 120
c1 |
% This works
-\override Score.MetronomeMark #'padding = #3
+\override Score.MetronomeMark.padding = #3
\tempo 4 = 80
d1 |
@end lilypond
\relative c'' {
c4
% This prints a sesquisharp but the spacing is too small
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4 c
% This improves the spacing
- \once \override Score.AccidentalPlacement #'right-padding = #0.6
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Score.AccidentalPlacement.right-padding = #0.6
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4 |
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\dynamicUp
% Extend width by 1 unit
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
% Align dynamics to a base line 2 units above staff
-\override DynamicLineSpanner #'staff-padding = #2
+\override DynamicLineSpanner.staff-padding = #2
a4\f b\mf c\mp b\p
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=3]
\voiceOne
<a\2>
-\once \override StringNumber #'self-alignment-X = #RIGHT
+\once \override StringNumber.self-alignment-X = #RIGHT
<a\2>
@end lilypond
<<
{ c4 c c c }
\\
- \override MultiMeasureRest #'staff-position = #-8
+ \override MultiMeasureRest.staff-position = #-8
{ R1 }
>>
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
\stemUp
f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
f4-5
@end lilypond
@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
+\once \override PhrasingSlur.positions = #'(-4 . -3)
\acciaccatura e8\( d8 c~ c d c d\)
@end lilypond
{ c'1 ~ c'2. e'8 f' }
\\
{
- \override Beam #'positions = #'(-1 . -1)
+ \override Beam.positions = #'(-1 . -1)
e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g''
}
>>
\\
{
<ees, c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
\\
\\
{
- \override NoteColumn #'force-hshift = #0
+ \override NoteColumn.force-hshift = #0
aes'2 f4 fes
}
>> |
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\voiceTwo
c,8~
% Reposition the c2 to the right of the merged note
- \once \override NoteColumn #'force-hshift = #1.0
+ \once \override NoteColumn.force-hshift = #1.0
% Move the c2 out of the main note column
% so the merge will work
\shiftOnn
% Stem on the d2 must be down to permit merging
\stemDown
% Stem on the d2 should be invisible
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
d2
}
\new Voice {
override placed just before the first tied note would move the tie up
to 3.5 half staff spaces above the center line:
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
This completes bar two, giving:
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
rhMusic = \relative c'' {
\new Voice {
r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
+ \once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\voiceTwo
c,8~
% Reposition the c2 to the right of the merged note
- \once \override NoteColumn #'force-hshift = #1.0
+ \once \override NoteColumn.force-hshift = #1.0
% Move the c2 out of the main note column
% so the merge will work
\shiftOnn
% Stem on the d2 must be down to permit merging
\stemDown
% Stem on the d2 should be invisible
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
d2
}
\new Voice {
@lilypond[quote,fragment,relative=2,verbatim]
<<
{
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
b8~ b\noBeam
}
\\
@lilypond[quote,fragment,relative=2,verbatim]
<<
{
- \tweak Stem #'transparent ##t
- \tweak Flag #'transparent ##t
- \tweak Stem #'length #8
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
+ \tweak Stem.length #8
b8~ b\noBeam
}
\\
>>
@end lilypond
+@funindex \single
+@cindex tweak, generated from override
+Now for @emph{overriding} the transparency of a graphical object,
+we could have used the shorthand @code{\hide} as explained above.
+Tweaking is a different operation, affecting only properties
+generated from a single music expression. It turns out that we
+can convert overrides into tweaks using @code{\single}, making it
+possible to rewrite the above example as
+
+@lilypond[quote,fragment,relative=2,verbatim]
+<<
+ {
+ \single \hide Stem
+ \single \hide Flag
+ \tweak Stem.length #8
+ b8~ b\noBeam
+ }
+\\
+ { b8[ g] }
+>>
+@end lilypond
+
+In this particular case, the difference to @code{\once \hide} is
+not apparent. It is important when there are several objects at
+the same point in musical time (like noteheads in a chord). In
+that case, @code{\once} will affect all of those objects while
+@code{\single} will only affect a single one, the one generated by
+the immediately following music expression.
+
@subheading Simulating a fermata in MIDI
@cindex stencil property, use of
% Visible tempo marking
\tempo 4=120
a4 a a
- \once \override Score.MetronomeMark #'transparent = ##t
+ \once \hide Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
a4\fermata |
% Visible tempo marking
\tempo 4=120
a4 a a
- \once \override Score.MetronomeMark #'stencil = ##f
+ \once \omit Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
a4\fermata |
alternative can we use @code{\override} and @code{\revert} commands?
@example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
@end example
These would also be extremely tedious to enter if there were many
@lilypond[quote,verbatim]
emphasize = {
- \override Lyrics.LyricText #'font-shape = #'italic
- \override Lyrics.LyricText #'font-series = #'bold
+ \override Lyrics.LyricText.font-shape = #'italic
+ \override Lyrics.LyricText.font-series = #'bold
}
normal = {
- \revert Lyrics.LyricText #'font-shape
- \revert Lyrics.LyricText #'font-series
+ \revert Lyrics.LyricText.font-shape
+ \revert Lyrics.LyricText.font-series
}
global = { \key c \major \time 4/4 \partial 4 }
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
\layout{
\context {
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
}
\context {
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
}
\context {
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
\layout{
\context { \Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
}
\context { \Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
@example
tieDotted = @{
- \override Tie #'dash-period = #0.75
- \override Tie #'dash-fraction = #0.1
+ \override Tie.dash-period = #0.75
+ \override Tie.dash-fraction = #0.1
@}
@end example
\relative c' {
% Arrange to obtain color from color-notehead procedure
- \override NoteHead #'color = #color-notehead
+ \override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
}
@end lilypond
STEPMAKE_TEMPLATES=documentation
XPM_FILES=$(call src-wildcard,*.xpm)
-EXTRA_DIST_FILES= $(XPM_FILES)
lilypond-icon = $(outdir)/lilypond.ico
ly-icon = $(outdir)/ly.ico
-\version "2.16.0"
+\version "2.17.6"
\include "example-header.ily"
\paper {
%%%%%%%%%%% INCIPIT DEFS %%%%%%%%%%
incipitGlobal = {
- \override NoteHead #'style = #'mensural
- \override Accidental #'style = #'mensural
- \override KeySignature #'style = #'mensural
- \override Rest #'style = #'mensural
-% \override Staff.TimeSignature #'style = #'mensural
+ \override NoteHead.style = #'mensural
+ \override Accidental.style = #'mensural
+ \override KeySignature.style = #'mensural
+ \override Rest.style = #'mensural
+% \override Staff.TimeSignature.style = #'mensural
\cadenzaOn
- \override Score.Clef #'extra-offset = #'(-0.0 . 0.5)
- \override Score.Clef #'font-size = #3
+ \override Score.Clef.extra-offset = #'(-0.0 . 0.5)
+ \override Score.Clef.font-size = #3
\clef "vaticana-do1"
}
incipitBassus = \markup{
\score{ {
\set Staff.instrumentName = "Bassus "
- \override NoteHead #'style = #'neomensural
- \override Accidental #'style = #'neomensural
- \override Rest #'style = #'neomensural
- \override Staff.TimeSignature #'style = #'neomensural
+ \override NoteHead.style = #'neomensural
+ \override Accidental.style = #'neomensural
+ \override Rest.style = #'neomensural
+ \override Staff.TimeSignature.style = #'neomensural
\cadenzaOn
\clef "petrucci-f3"
\key f \major
#(ly:set-option 'point-and-click #f)
global = {
- \override Staff.TimeSignature #'stencil = #(lambda (grob)
+ \override Staff.TimeSignature.stencil = #(lambda (grob)
(bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1))
\time 3/4
- \override Staff.BarLine #'transparent = ##t
- \override HorizontalBracket #'direction = #UP
- \override HorizontalBracket #'bracket-flare = #'(0 . 0)
+ \override Staff.BarLine.transparent = ##t
+ \override HorizontalBracket.direction = #UP
+ \override HorizontalBracket.bracket-flare = #'(0 . 0)
}
%%%%%%%%% MACRO FOR MAKING SLASHES THROUGH STEMS %%%%%%%%%%
(number? number? number? number? number?
pair?)
#{
-\once \override Voice.Stem #'text = \markup {
+\once \override Voice.Stem.text = \markup {
\postscript #(let ((x-off (car offset))
(y-off (cdr offset)))
(string-append
270 90 arc "
" gsave fill grestore stroke")) }
-\once \override Voice.Stem #'stencil = #(lambda (grob)
+\once \override Voice.Stem.stencil = #(lambda (grob)
(let* ((sten1 (ly:stem::print grob))
(sten2 (ly:text-interface::print grob))
(extent1 (ly:stencil-extent sten1 Y))
\clef "treble_8"
%\set Staff.midiInstrument = "flute"
% \global
- \override StemTremolo #'beam-thickness = #.125
- \override StemTremolo #'slope = #1.0
+ \override StemTremolo.beam-thickness = #.125
+ \override StemTremolo.slope = #1.0
f8 f4 e8 d c f f f | % 1
% the \scaleDurations command below makes 5 notes last the
% duration of a dotted quarter
-\version "2.16.0"
+\version "2.17.6"
%\include "example-header.ily"
global = {
\key c \minor
\time 4/4
- \accidentalStyle "default"
+ \accidentalStyle default
}
halsup = {
% 'Add color...' sections are not the original author's, but added
% afterwards specifically for illustration in LilyPond's Documentation.
-I = \once \override NoteColumn #'ignore-collision = ##t
+I = \once \override NoteColumn.ignore-collision = ##t
-\version "2.16.0"
+\version "2.17.6"
staffPiano = \new PianoStaff {
\set Score.timing = ##f
\clef treble
\key g \major
\relative c'' {
- \override Staff.NoteCollision
- #'merge-differently-headed = ##t
+ \override Staff.NoteCollision.merge-differently-headed = ##t
<<
{
- \override Beam #'positions = #'(8 . 8)
- \override NoteHead #'transparent = ##t
- \override NoteHead #'duration-log = #1
+ \override Beam.positions = #'(8 . 8)
+ \override NoteHead.transparent = ##t
+ \override NoteHead.duration-log = #1
s1 b8[^\markup {
\override #'(baseline-skip . 0.5)
% Add color to markup in top staff
\column { \with-color #red \small { ^ 1 } }
}
s4.
- \revert Beam #'positions
- \revert NoteHead #'transparent
- \revert NoteHead #'duration-log
+ \revert Beam.positions
+ \revert NoteHead.transparent
+ \revert NoteHead.duration-log
}
\\
{
% Add color to both Dashed Slurs in top staff
- \override Slur #'color = #(x11-color "purple")
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override Slur.color = #(x11-color "purple")
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
s1
- \once \override Slur #'height-limit = #6
- \once \override Slur #'extra-offset = #'(1.25 . 0)
+ \once \override Slur.height-limit = #6
+ \once \override Slur.extra-offset = #'(1.25 . 0)
\slurDashed
\I b2_( s2
- \once \override NoteHead #'transparent = ##t
+ \once \override NoteHead.transparent = ##t
b4) s
- \once \override Slur #'height-limit = #3.25
- \once \override Slur #'extra-offset = #'(.75 . 0)
+ \once \override Slur.height-limit = #3.25
+ \once \override Slur.extra-offset = #'(.75 . 0)
a2_( s4
- \once \override NoteHead #'transparent = ##t
+ \once \override NoteHead.transparent = ##t
a4) g2
- \revert Stem #'transparent
- \revert Flag #'transparent
+ \revert Stem.transparent
+ \revert Flag.transparent
}
\\
- \override Staff.NoteCollision
- #'merge-differently-headed = ##t
+ \override Staff.NoteCollision.merge-differently-headed = ##t
{
- \override Beam #'positions = #'(4 . -3.25)
+ \override Beam.positions = #'(4 . -3.25)
\stemUp
g8[ s s4 s2
\stemDown
- \once \override NoteHead #'transparent = ##t
+ \once \override NoteHead.transparent = ##t
\I b8] s8
- \override Beam #'positions = #'(3 . -2.25)
+ \override Beam.positions = #'(3 . -2.25)
\stemUp
a8[ s s4
\stemDown
\\
{
% Add color to all remaining Slurs in top staff
- \override Slur #'color = #(x11-color "violet")
- \override PhrasingSlur #'color = #(x11-color "violet")
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'length = #0
+ \override Slur.color = #(x11-color "violet")
+ \override PhrasingSlur.color = #(x11-color "violet")
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.length = #0
% Add color to text markups in top staff
g4_\( fis^(_\markup { \with-color #blue \tiny N } g)\)
a^(^\markup { \with-color #blue \tiny P } b2)
b4^(^\markup { \with-color #blue \tiny P }
\stemUp
- \revert Stem #'transparent
- \revert Flag #'transparent
- \override Stem #'length = #10
+ \revert Stem.transparent
+ \revert Flag.transparent
+ \override Stem.length = #10
c8)^( s
- \override Stem #'length = #14
+ \override Stem.length = #14
b4) s s
- \override Stem #'length = #0
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \once \override Slur #'extra-offset = #'(0 . 0.35)
+ \override Stem.length = #0
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \once \override Slur.extra-offset = #'(0 . 0.35)
% Add color to remaining text markup in top staff
c4^\( b_(_\markup { \with-color #blue \tiny P } a)\) s2
- \revert Stem #'length
+ \revert Stem.length
}
\\
{
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override NoteHead #'transparent = ##t
- \override Stem #'length = #0
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override NoteHead.transparent = ##t
+ \override Stem.length = #0
s1 s4 e4 s
\change Staff = "LH"
fis,4 s2
- \revert Stem #'transparent
- \revert Flag #'transparent
- \revert NoteHead #'transparent
- \revert Stem #'length
+ \revert Stem.transparent
+ \revert Flag.transparent
+ \revert NoteHead.transparent
+ \revert Stem.length
}
\\
{
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override NoteHead #'transparent = ##t
- \override Stem #'length = #0
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override NoteHead.transparent = ##t
+ \override Stem.length = #0
s1 s s2
fis'4 s
\change Staff = "LH"
g,4 s s2
- \revert Stem #'transparent
- \revert Flag #'transparent
- \revert NoteHead #'transparent
- \revert Stem #'length
+ \revert Stem.transparent
+ \revert Flag.transparent
+ \revert NoteHead.transparent
+ \revert Stem.length
}
>>
\bar "|."
\clef bass
\key g \major
\relative c' {
- \override Staff.NoteCollision
- #'merge-differently-headed = ##t
+ \override Staff.NoteCollision.merge-differently-headed = ##t
<<
{
- \override Beam #'positions = #'(-8 . -8)
- \override NoteHead #'transparent = ##t
+ \override Beam.positions = #'(-8 . -8)
+ \override NoteHead.transparent = ##t
\stemDown
% Add color to long beam text markups in bottom staff
\I g8[_\markup { \with-color #(x11-color 'LawnGreen) \bold I }
s4.
\I g,8]_\markup { \with-color #(x11-color 'LawnGreen) \bold I }
s4.
- \revert Beam #'positions
- \revert NoteHead #'transparent
+ \revert Beam.positions
+ \revert NoteHead.transparent
}
\\
{
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
\stemDown
- \override TextScript #'extra-offset = #'(-11.75 . -12.25)
+ \override TextScript.extra-offset = #'(-11.75 . -12.25)
\I g'2 s1 s s2 \I d2 g,2
- \revert Stem #'transparent
- \revert Flag #'transparent
+ \revert Stem.transparent
+ \revert Flag.transparent
}
\\
{
% Add color to all single-note Slurs in bottom staff
- \override Slur #'color = #(x11-color "violet")
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \once \override NoteHead #'transparent = ##t
- \override Stem #'length = #0
+ \override Slur.color = #(x11-color "violet")
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \once \override NoteHead.transparent = ##t
+ \override Stem.length = #0
g'4
- \once \override TextScript #'padding = #0.25
+ \once \override TextScript.padding = #0.25
% Add color to text markups in bottom staff
a4_(^\markup { \with-color #blue \tiny P } b)
fis4^(^\markup { \with-color #blue \tiny P } e)
- \once \override NoteHead #'transparent = ##t
- \once \override Slur #'height-limit = #1.5
+ \once \override NoteHead.transparent = ##t
+ \once \override Slur.height-limit = #1.5
% Add color to remaining text markup in bottom staff
c4^( d)^\markup { \with-color #blue \tiny N }
- \once \override NoteHead #'transparent = ##t
- \once \override Slur #'extra-offset = #'(0 . 0.5)
+ \once \override NoteHead.transparent = ##t
+ \once \override Slur.extra-offset = #'(0 . 0.5)
\I fis,4_(
- \revert Stem #'transparent
- \revert Flag #'transparent
- \override Stem #'length = #10
+ \revert Stem.transparent
+ \revert Flag.transparent
+ \override Stem.length = #10
\stemDown
g4) s
- \once \override Slur #'extra-offset = #'(0 . 0.25)
+ \once \override Slur.extra-offset = #'(0 . 0.25)
\I c8_( s
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \revert Stem #'length
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \revert Stem.length
a4)
- \once \override NoteHead #'transparent = ##t
+ \once \override NoteHead.transparent = ##t
\I d4^( d,4) s2
}
\\
{
% Add color to all two-note Slurs in bottom staff
- \override Slur #'color = #(x11-color "violet")
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override NoteHead #'transparent = ##t
+ \override Slur.color = #(x11-color "violet")
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override NoteHead.transparent = ##t
\I g'4^( s b) s2
- \revert Stem #'transparent
- \revert Flag #'transparent
- \revert NoteHead #'transparent
- \override Beam #'positions = #'(-4 . 1)
+ \revert Stem.transparent
+ \revert Flag.transparent
+ \revert NoteHead.transparent
+ \override Beam.positions = #'(-4 . 1)
\stemDown
c,8[ s s4
\stemUp
fis,8] s
- \override Beam #'positions = #'(1 . -4)
+ \override Beam.positions = #'(1 . -4)
g8[ s
\stemDown
b8] s
- \revert Beam #'positions
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override NoteHead #'transparent = ##t
+ \revert Beam.positions
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override NoteHead.transparent = ##t
c4^( s d4) s s2
}
\\
{
% Add color to four-note Slur in bottom staff
- \override Slur #'color = #(x11-color "violet")
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override NoteHead #'transparent = ##t
- \override Stem #'length = #0
+ \override Slur.color = #(x11-color "violet")
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override NoteHead.transparent = ##t
+ \override Stem.length = #0
\stemDown
- \once \override Slur #'height-limit = #3
- \once \override Slur #'extra-offset = #'(0 . 0.25)
+ \once \override Slur.height-limit = #3
+ \once \override Slur.extra-offset = #'(0 . 0.25)
\I g4_( s2. e4) s2. s2 s1 s2
- \revert Stem #'transparent
- \revert Flag #'transparent
- \revert NoteHead #'transparent
+ \revert Stem.transparent
+ \revert Flag.transparent
+ \revert NoteHead.transparent
}
\\
{
% Add color to dashed Slur in bottom staff
- \override Slur #'color = #(x11-color "purple")
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override NoteHead #'transparent = ##t
+ \override Slur.color = #(x11-color "purple")
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override NoteHead.transparent = ##t
\slurDashed
- \once \override Slur #'height-limit = #6.0
- \once \override Slur #'extra-offset = #'(0.5 . -0.25)
- \override Stem #'length = #0
+ \once \override Slur.height-limit = #6.0
+ \once \override Slur.extra-offset = #'(0.5 . -0.25)
+ \override Stem.length = #0
g4_( s2. s1 g,4) s s1 s2
- \revert Stem #'transparent
- \revert Flag #'transparent
- \revert NoteHead #'transparent
+ \revert Stem.transparent
+ \revert Flag.transparent
+ \revert NoteHead.transparent
}
>>
\bar "|."
-\version "2.16.0"
+\version "2.17.6"
\layout {
indent = #0
\Score
proportionalNotationDuration = #(ly:make-moment 1 64)
- \override Beam #'breakable = ##t
+ \override Beam.breakable = ##t
autoBeaming = ##f
tupletFullLength = ##t
- \override BarNumber #'transparent = ##t
- \override BarLine #'transparent = ##t
- \override SpanBar #'transparent = ##t
- \override Beam #'break-overshoot = #'(-0.5 . 1.0)
- \override TextScript #'staff-padding = #6
- \override Glissando #'thickness = #3
- \override SpacingSpanner #'strict-grace-spacing = ##t
- \override TupletBracket #'bracket-visibility = ##t
- \override NoteColumn #'ignore-collision = ##t
+ \override BarNumber.transparent = ##t
+ \override BarLine.transparent = ##t
+ \override SpanBar.transparent = ##t
+ \override Beam.break-overshoot = #'(-0.5 . 1.0)
+ \override TextScript.staff-padding = #6
+ \override Glissando.thickness = #3
+ \override SpacingSpanner.strict-grace-spacing = ##t
+ \override TupletBracket.bracket-visibility = ##t
+ \override NoteColumn.ignore-collision = ##t
}
}
)
fraction = #(define-music-function (parser location music) (ly:music?)
- #{ \tweak #'text #tuplet-number::calc-fraction-text #music #})
+ #{ \tweak text #tuplet-number::calc-fraction-text #music #})
triangle = #(define-music-function (parser location music) (ly:music?)
#{ \once \set shapeNoteStyles = #'#(do do do do do do do) #music #})
#{ \once \set shapeNoteStyles = #'#(cross cross cross cross cross cross cross) #music #})
white = #(define-music-function (parser location music) (ly:music?)
- #{ \once \override NoteHead #'duration-log = #1 #music #})
+ #{ \once \override NoteHead.duration-log = #1 #music #})
-\version "2.16.0"
+\version "2.17.6"
% the example header file caused the head to be chopped off
%\include "example-header.ily"
\new StaffGroup <<
\new Staff \with {
- \override Stem #'direction = #down
- \override Beam #'positions = #'(-7 . -7)
- \override TupletBracket #'direction = #down
- \override TupletBracket #'staff-padding = #5
- \override TupletBracket #'padding = #2.25
+ \override Stem.direction = #down
+ \override Beam.positions = #'(-7 . -7)
+ \override TupletBracket.direction = #down
+ \override TupletBracket.staff-padding = #5
+ \override TupletBracket.padding = #2.25
} <<
\new Voice {
- \override Score.MetronomeMark #'extra-offset = #'(0 . 6)
- \override Score.MetronomeMark #'font-size = #3
+ \override Score.MetronomeMark.extra-offset = #'(0 . 6)
+ \override Score.MetronomeMark.font-size = #3
\tempo 8=42
\time 5/16 s4 ~ s16 \noBreak % measure 6
\time 4/8 s2 \noBreak % measure 7
>>
\new Staff \with {
- \override Clef #'transparent = ##t
- \override StaffSymbol #'line-positions = #'(-4 -2 2 4)
- \override Stem #'direction = #down
- \override TupletBracket #'staff-padding = #5
- \override TupletBracket #'padding = #2.25
+ \override Clef.transparent = ##t
+ \override StaffSymbol.line-positions = #'(-4 -2 2 4)
+ \override Stem.direction = #down
+ \override TupletBracket.staff-padding = #5
+ \override TupletBracket.padding = #2.25
} <<
\new Voice \with {
\remove "Forbid_line_break_engraver"
- \override Stem #'direction = #up
- \override Flag #'stroke-style = #"grace"
- \override Stem #'font-size = #-3
- \override Rest #'transparent = ##t
- \override NoteHead #'no-ledgers = ##t
- \override Dots #'transparent = ##t
- \override TupletBracket #'transparent = ##t
- \override TupletNumber #'transparent = ##t
+ \override Stem.direction = #up
+ \override Flag.stroke-style = #"grace"
+ \override Stem.font-size = #-3
+ \override Rest.transparent = ##t
+ \override NoteHead.no-ledgers = ##t
+ \override Dots.transparent = ##t
+ \override TupletBracket.transparent = ##t
+ \override TupletNumber.transparent = ##t
} {
% measure 6
\new Voice \with {
\remove "Forbid_line_break_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Rest #'transparent = ##t
- \override Rest #'staff-position = #-0.5
- \override Dots #'transparent = ##t
- \override Beam #'transparent = ##t
- \override TupletBracket #'transparent = ##t
- \override TupletNumber #'transparent = ##t
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Rest.transparent = ##t
+ \override Rest.staff-position = #-0.5
+ \override Dots.transparent = ##t
+ \override Beam.transparent = ##t
+ \override TupletBracket.transparent = ##t
+ \override TupletNumber.transparent = ##t
} {
% measure 6
\new Voice \with {
\remove "Forbid_line_break_engraver"
- \override Stem #'direction = #down
- \override Stem #'font-size = #-3
- \override Flag #'stroke-style = #"grace"
- \override Rest #'transparent = ##t
- \override NoteHead #'no-ledgers = ##t
- \override Dots #'transparent = ##t
- \override TupletBracket #'transparent = ##t
- \override TupletNumber #'transparent = ##t
+ \override Stem.direction = #down
+ \override Stem.font-size = #-3
+ \override Flag.stroke-style = #"grace"
+ \override Rest.transparent = ##t
+ \override NoteHead.no-ledgers = ##t
+ \override Dots.transparent = ##t
+ \override TupletBracket.transparent = ##t
+ \override TupletNumber.transparent = ##t
} {
% measure 6
\new Voice \with {
\remove "Forbid_line_break_engraver"
- \override Stem #'direction = #down
- \override NoteHead #'transparent = ##t
- \override NoteHead #'no-ledgers = ##t
- \override Rest #'staff-position = #-18
- \override Stem #'length = #10
- \override Beam #'positions = #'(-13 . -13)
- \override DynamicLineSpanner #'staff-padding = #18
- \override TextSpanner #'(bound-details left text) = #(markup (#:italic "covered"))
- \override TextSpanner #'dash-period = #1
- \override TextSpanner #'dash-fraction = #0.2
- \override TextSpanner #'(bound-details left padding) = #0.5
- \override TextSpanner #'(bound-details right padding) = #0.5
- \override TextSpanner #'staff-padding = #4
+ \override Stem.direction = #down
+ \override NoteHead.transparent = ##t
+ \override NoteHead.no-ledgers = ##t
+ \override Rest.staff-position = #-18
+ \override Stem.length = #10
+ \override Beam.positions = #'(-13 . -13)
+ \override DynamicLineSpanner.staff-padding = #18
+ \override TextSpanner.bound-details.left.text = #(markup (#:italic "covered"))
+ \override TextSpanner.dash-period = #1
+ \override TextSpanner.dash-fraction = #0.2
+ \override TextSpanner.bound-details.left.padding = #0.5
+ \override TextSpanner.bound-details.right.padding = #0.5
+ \override TextSpanner.staff-padding = #4
} {
% measure 6
-\version "2.16.0"
+\version "2.17.6"
\include "example-header.ily"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global = {
\time 3/4
\set fontSize = #1
- \override Beam #'thickness = #0.5
- \override NoteColumn #'ignore-collision = ##t
+ \override Beam.thickness = #0.5
+ \override NoteColumn.ignore-collision = ##t
}
upperVoiceOne = \relative c'' {
\voiceOne
- \override TupletBracket #'transparent = ##t
+ \override TupletBracket.transparent = ##t
<aes f'>8\([ \times 4/5{g'32( aes g f g]) }
<es aes>8[ \times 4/5{<d bes'>32( c' bes aes bes]) }
<es, aes es'>8 <d fis b d>\) | % end m. 1
\voiceTwo
s8 c8\< <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
- \override Flag #'style = #'no-flag
+ \override Stem.cross-staff = ##t
+ \override Stem.length = #28
+ \override Flag.style = #'no-flag
s8 \voiceTwo g,8 aes4 s4
}
middleVoiceOne = \relative c' {
- \override Stem #'cross-staff = ##t
- \override Stem #'length = #32
- \override Flag #'style = #'no-flag
+ \override Stem.cross-staff = ##t
+ \override Stem.length = #32
+ \override Flag.style = #'no-flag
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
+ \revert Stem.length
+ \revert Stem.cross-staff
\showStaffSwitch
\csh \stemUp f4 s2
%s2. % beginning m. 3
middleVoiceTwo = \relative c' {
s2. | % 1
- \override Stem #'cross-staff = ##t
- \override Stem #'length = #24
- \override Flag #'style = #'no-flag
+ \override Stem.cross-staff = ##t
+ \override Stem.length = #24
+ \override Flag.style = #'no-flag
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, {
- \override Staff.NoteCollision #'merge-differently-headed = ##t
- \override Staff.NoteCollision #'merge-differently-dotted = ##t
+ \override Staff.NoteCollision.merge-differently-headed = ##t
+ \override Staff.NoteCollision.merge-differently-dotted = ##t
bes8 \csm \stemDown <bes'' c es>8 s2
\csl \stemUp
\set subdivideBeams = ##t
\voiceTwo
bes2.
\csh
- \once \override Beam #'damping = #+inf.0
+ \once \override Beam.damping = #+inf.0
<bes'' es g>8 \csl \slurUp
- %\once\override Slur #'extra-offset = #'(0 . 4)
+ %\once\override Slur.extra-offset = #'(0 . 4)
es,,64 bes' es g s32.
c64
s4 <bes des>
\score {
\new PianoStaff <<
\set PianoStaff.connectArpeggios = ##t
-% \override PianoStaff.Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket
+% \override PianoStaff.Arpeggio.stencil = #ly:arpeggio::brew-chord-bracket
\new Staff = "high" <<
\global
\context Voice = "upperVoiceOne" { \upperVoiceOne }
\layout {
\context {
\Score
- \override TimeSignature #'stencil = ##f
+ \override TimeSignature.stencil = ##f
\remove "Bar_number_engraver"
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
tagline = ##f
moltocr = {
\set crescendoText = \markup { \italic "Molto cresc." }
\set crescendoSpanner = #'text
- \override DynamicTextSpanner #'style = #'dotted-line
+ \override DynamicTextSpanner.style = #'dotted-line
}
offCr = {
\unset crescendoText
\unset crescendoSpanner
- \revert DynamicTextSpanner #'style
+ \revert DynamicTextSpanner.style
}
%% Layout for piano dynamics
\layout {
\context {
\Voice
- \override Glissando #'breakable = ##t
- \override TextSpanner #'breakable = ##t
- \override DynamicLineSpanner #'breakable = ##t
- \override DynamicTextSpanner #'breakable = ##t
- \override TrillSpanner #'breakable = ##t
+ \override Glissando.breakable = ##t
+ \override TextSpanner.breakable = ##t
+ \override DynamicLineSpanner.breakable = ##t
+ \override DynamicTextSpanner.breakable = ##t
+ \override TrillSpanner.breakable = ##t
}
}
\consists "Text_engraver"
\consists "Text_spanner_engraver"
\consists "Font_size_engraver"
- \override VerticalAxisGroup #'staff-affinity = #DOWN
- \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing #'padding = #2
- \override VerticalAxisGroup #'nonstaff-unrelatedstaff-spacing #'padding = #5
- \override TextSpanner #'breakable = ##t
+ \override VerticalAxisGroup.staff-affinity = #DOWN
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2
+ \override VerticalAxisGroup.nonstaff-unrelatedstaff-spacing.padding = #5
+ \override TextSpanner.breakable = ##t
}
\context {
\Score
\context {
\MarkLine
\name "SmallMarkLine"
- \override MetronomeMark #'outside-staff-priority = #800
- \override RehearsalMark #'outside-staff-priority = #1200
+ \override MetronomeMark.outside-staff-priority = #800
+ \override RehearsalMark.outside-staff-priority = #1200
}
\context {
\Score
-\version "2.16.0"
+\version "2.17.6"
#(set-global-staff-size 22.45)
\new Staff = "guitar" <<
\context Voice = "upper guitar" {
\clef "G_8" \voiceOne
- \override Glissando #'gap = #0.5
- \override Glissando #'extra-offset = #'(-0.5 . 0)
- \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
- \override Glissando #'minimum-length = #4
- \override Glissando #'extra-dy = #glissando::calc-extra-dy
+ \override Glissando.gap = #0.5
+ \override Glissando.extra-offset = #'(-0.5 . 0)
+ \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
+ \override Glissando.minimum-length = #4
+ \override Glissando.extra-dy = #glissando::calc-extra-dy
\upper
}
\context Voice = "lower guitar" {
\clef "G_8" \voiceTwo
- \override Glissando #'bound-details #'right #'padding = #1
- \override Glissando #'bound-details #'left #'padding = #0.2
+ \override Glissando.bound-details.right.padding = #1
+ \override Glissando.bound-details.left.padding = #0.2
\lower
}
>>
\layout {
\context {
\Staff
- \override StringNumber #'transparent = ##t
+ \override StringNumber.transparent = ##t
}
\context {
\TabStaff
- \revert Arpeggio #'stencil
+ \revert Arpeggio.stencil
}
}
}
STEPMAKE_TEMPLATES = documentation texinfo
-TEXTS = $(call src-wildcard,ANNOUNCE-*[0-9]) $(call src-wildcard,CHANGES-*[0-9]) $(call src-wildcard,ChangeLog*[0-9]) $(call src-wildcard,NEWS-*[0-9])
-EXTRA_DIST_FILES = $(TEXTS)
-EXTRA_DIST_FILES += $(call src-wildcard,*.html)
+TEXTS = $(call src-wildcard,ANNOUNCE-*[0-9]) \
+ $(call src-wildcard,CHANGES-*[0-9]) \
+ $(call src-wildcard,ChangeLog*[0-9]) \
+ $(call src-wildcard,NEWS-*[0-9]) \
+ $(call src-wildcard,THANKS-*[0-9])
include $(depth)/make/stepmake.make
cp $< $@
txt-to-html:
- $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
+ $(buildscript-dir)/text2html $(OUT_TXT_FILES)
$(footify) $(addprefix $(outdir)/, $(addsuffix .html, $(TEXTS)))
--- /dev/null
+Release 1.8
+***********
+
+HEAD HACKERS
+
+Han-Wen Nienhuys
+Jan Nieuwenhuizen
+
+CONTRIBUTORS
+
+Graham Percival
+Heikki Junes
+Jügen Reuter
+Kim Shrier
+Rune Zedeler
+Werner Lemberg
+
+
+BUG HUNTERS
+
+Amelie Zapf
+Andrew Schaaf
+Atte Andre Jensen
+Bob Harrington
+Chris Jackson
+Chris Sawer
+David Bobroff
+Erik Sandberg
+Fernando Pablo Lopez-Lezcano
+Hans Kieserman
+Jeremie Lumbroso
+John Potelle
+John Williams
+Karl Berry
+Karl-Johan Karlsson
+Klaus Zimmermann
+Koblinger Egmont
+Paul Scott
+Pedro Kroger
+Richard Shann
+Roland Stigge
+Ryan O'Neil
+Simon Bailey
+Simon Weatherill
+Stanislav Brabec
+Thomas Rijniers
+Werner Lemberg
+Yotam Medini
+
+
+#Local variables:
+#coding: utf-8
+#End:
--- /dev/null
+Release 2.0
+***********
+
+HEAD HACKERS
+
+Han-Wen Nienhuys
+Jan Nieuwenhuizen
+
+CONTRIBUTORS
+
+Mats Bengtsson
+Heikki Junes
+Jürgen Reuter
+
+BUG HUNTERS/SUGGESTIONS
+
+Antonio Palama
+Benjamin Milde
+Daniel Berjon Diez
+David Bobroff
+David Rayleigh Arnold
+Erik Ronstroem
+Fabio dos Santos
+Fodor Bertalan
+Frederic Bron
+Graham Percival
+Ian Bailey-Mortimer
+John Williams
+Josza Marton
+Marco Caliari
+Matthieu Amiguet
+Michael Welsh Duggan
+Patrick Atamaniuk
+Paul Scott
+Pedro Kroeger
+Peter Lutek
+Richard Schoeller
+Thorkil Wolvendans
+Werner Trobin
+
+
+#Local variables:
+#coding: utf-8
+#End:
--- /dev/null
+Release 2.10
+************
+
+
+DEVELOPMENT TEAM
+
+Han-Wen Nienhuys - Core development
+Jan Nieuwenhuizen - Core development
+Graham Percival - Documentation Editor and Bug Meister
+John Mandereau - Translation Meister
+Mats Bengtsson - Support Guru
+
+
+CONTRIBUTORS
+
+Angelo Contardi
+David Feuer
+Erik Sandberg
+Erlend Aasland
+Guido Amoruso
+Heikki Junes
+Joe Neeman
+John Mandereau
+
+
+TRANSLATORS
+
+Frédéric Chiasson
+Gauvain Pocentek
+Jean-Charles Malahieude
+John Mandereau
+Ludovic Sardain
+Nicolas Grandclaude
+Valentin Villenave
+
+
+SPONSORS
+
+Andrew Sidwell
+Anthony Youngman
+Chris Sawer
+David Griffel
+Jamie Bullock
+Kieren MacMillan
+Michael Meixner
+Paul Scott
+Rick Hansen
+Steve Doonan
+Trent Johnston
+Trevor Bača
+Vivian Barty-Taylor
+William Wilson
+
+DOCUMENTATION HELPERS
+
+Cameron Horsburgh
+Dave Luttinen
+Eduardo Vieira
+Erlend Aasland
+Geoff Horton
+Juergen Reuter
+
+
+BUG HUNTERS/SUGGESTIONS
+
+Albert Frantz
+Arvid Grøtting
+Anthony Youngman
+Aurèle Duda
+Ben Hoefer
+Bernie Arai
+Cameron Horsburgh
+Charles Cave
+Christian Hitz
+Christopher Ellis
+Claude Routhier
+Colin Wilding
+Daniel Tonda Castillo
+David Rogers
+Francisco Vila
+Harald Wellmann
+Henrik Frisk
+Hernán J. González
+Johannes Schindelin
+John Williams
+J. Leung
+Karim Haddad
+Karl Hammar
+Keith Packard
+Kieren MacMillan
+Lee T. Wilkirson
+Lieke van der Meer
+Luc Wehli
+Manuzhai
+Mark Dewey
+Marcus Macauley
+Markus Schneider
+Matti Aaltonen
+Michael Meixner
+Michael Welsh Duggan
+Milan Zamazal
+Orm Finnendahl
+Paul Scott
+Phillip Kirlin
+Quentin Spencer
+Rainer Typke
+Rick Hansen
+Rutger Helmers
+Ruud van Silfhout
+Sietse Brouwer
+Stephen Carter
+Stephen Kress
+Thies Albrecht
+Toine Schreurs
+Trent Johnston
+Trevor Bača
+Trevor Daniels
+Vaclav Smilauer
+Vicente Solsona Dellá
+Victor Eijkhout
+Villum Sejersen
+Werner Lemberg
+Will Oram
+Zoltan V. Laszlo
+
+
+#Local variables:
+#coding: utf-8
+#End:
--- /dev/null
+Release 2.12
+************
+
+
+DEVELOPMENT TEAM
+
+Han-Wen Nienhuys - Core development
+Jan Nieuwenhuizen - Core development
+Joe Neeman - Core development
+Graham Percival - Documentation Editor and Bug Meister
+Valentin Villenave - LSR Editor and Bug Meister
+Mats Bengtsson - Support Guru
+John Mandereau - Translation Meister
+
+
+CONTRIBUTORS
+
+Rune Zedeler
+Maximilian Albert
+Milan Zamazal
+Reinhold Kainhofer - musicxml2ly development
+Erlend Aasland
+Stan Sanderson - Regression Checker
+Neil Puttock
+
+
+GRAND DOCUMENTATION PROJECT
+
+Trevor Daniels - Assistant Documentation Editor
+Andrew Hawryluk - NR work
+Carl Sorensen - NR work
+Eyolf Østrem - NR work
+Francisco Vila - NR work
+Jay Hamilton - NR work
+Jonathan Kulp - NR work
+Joseph Harfouch - NR work
+Patrick McCarty - NR work
+Ralph Palmer - NR work
+Till Rettig - NR work
+Kurt Kroon - Glossary Updates, NR work
+Alard de Boer - Formatting
+Michael Rasmussen - Formatting
+Trevor Bača - Inspirational Headwords
+Reinhold Kainhofer - Technical Aid
+Neil Puttock - Snippet Editor, Technical Aid
+
+
+TRANSLATORS
+
+Clytie Siddall
+Damien Heurtebise
+Francisco Vila
+Heikki Junes
+Jean-Charles Malahieude
+John Mandereau
+Matthieu Jacquot
+Nicolas Klutchnikoff
+Till Rettig
+Valentin Villenave
+
+
+SPONSORS
+
+Mike Amundsen
+Trevor Bača
+
+
+BUG HUNTERS/SUGGESTIONS
+
+Adam James Wilson
+Alard de Boer
+Alex Rolex
+Andy Haupt
+Arvid Grøtting
+Bertalan Fodor
+Benjamin Drung
+Cameron Horsburgh
+Carl Sorensen
+Christian Hitz
+Christian Herzberg
+David Bobroff
+David Griffel
+Daniel Hulme
+Daniel Johnson
+Dominic Neumann
+Eduardo Vieira
+Frédéric Chiasson
+Georg Dummer
+Georg Romstorfer
+Gilles Thibault
+Hernán J. González
+Hu Haipeng
+Jay Anderson
+James Kilfinger
+Jean-Marie Mouchel
+Jean-Yves Baudais
+Jesús Guillermo Andrade
+Jonathan Henkelman
+Kazuhiro Suzuki
+Kevin Dalley
+Laura Conrad
+Luc Wehli
+Maarten Hijzelendoorn
+Marc Lanoiselée
+Mark Polesky
+Matthieu Jacquot
+Matthijs Frankeno
+Martijn Vromans
+Marnen Laibow-Koser
+Maximilian Albert
+Mirosław Doroszewski
+Mike Coleman
+Neil Puttock
+Nicolas Mayencourt
+Nicolas Sceaux
+Orm Finnendahl
+Peter Budny
+Phillip Kirlin
+Pierre-Emmanuel Brame
+Ralph Palmer
+Renaud Flavigny
+Rick Hansen
+Risto Vääräniemi
+Robin Bannister
+Roland Goretzki
+Rune Zedeler
+Ruud van Silfhout
+Sean Reed
+Steven Weber
+Tomas Sauer
+Thomas Scharkowski
+Trevor Bača
+Vivian Barty-Taylor
+Werner Lemberg
+Wilbert Berendsen
+William Oram
+Yota Moteuchi
+Zack Charter
+Zoltan Selyem
+
+
+#Local variables:
+#coding: utf-8
+#End:
--- /dev/null
+Release 2.14
+************
+
+DEVELOPMENT TEAM
+
+Han-Wen Nienhuys - Core development
+Jan Nieuwenhuizen - Core development
+Graham Percival - Release Meister
+Valentin Villenave - LSR Editor and Bug Meister
+Mats Bengtsson - Support Guru
+John Mandereau - Translation Meister
+Trevor Daniels - Documentation Editor
+
+CONTRIBUTORS
+
+Carl Sorensen - Fret diagrams
+Jonathan Kulp - Documentation Patches
+Ralph Palmer - Documentation Indexing
+
+TRANSLATORS
+
+Francisco Vila
+Jean-Charles Malahieude
+Till Rettig
+Yoshiki Sawada
+
+FROGS
+
+Carl Sorensen - Frog meister
+Andrew Hawryluk
+Andrew Wilson
+Marek Klein
+Ian Hulin
+Frédéric Bron
+Hajo Dezelski
+Kieren MacMillan
+
+
+BUG HUNTERS/SUGGESTIONS
+
+Chris Liddell
+Chris Snyder
+David Kastrup
+Karim Haddad
+Mark Polesky
+Martin Tarenskeen
+Michael Käppler
+Nick Payne
+
+
+#Local variables:
+#coding: utf-8
+#End:
--- /dev/null
+Release 2.16
+************
+
+For information about the various official or semi-official positions,
+check out <URL:http://lilypond.org/authors.html>
+
+The following are registered as having authored changes to the
+repository of LilyPond since 2.14.2:
+
+Adam Spiers
+Alberto Simoes
+Aleksandr Andreev
+Anthony Fok
+Arnold Theresius
+Benkő Pál
+Bertrand Bordage
+Carl D. Sorensen
+Choan Gálvez
+Colin Campbell
+Daisuke Yamashita
+David Kastrup
+David Nalesnik
+Dénes Harmath
+Federico Bruni
+Francisco Vila
+Frédéric Bron
+Graham Breed
+Graham Percival
+Han-Wen Nienhuys
+Heikki Tauriainen
+Ian Hulin
+James Lowe
+Jan Nieuwenhuizen
+Jan-Peter Voigt
+Janek Warchoł
+Jean-Charles Malahieude
+Joe Neeman
+John Mandereau
+Joseph Wakeling
+Julien Rioux
+Karin Hoethker
+Keith OHara
+Marc Hohl
+Markus Oehme
+Matthias Kilian
+Michael Welsh Duggan
+Mike Solomon
+Neil Puttock
+Nicolas Sceaux
+Patrick McCarty
+Patrick Schmidt
+Pavel Roskin
+Peter Chubb
+Phil Holmes
+Piers Titus van der Torren
+Reinhold Kainhofer
+Rodolfo Zitellini
+Seafire
+Stefan Weil
+Sven Axelsson
+Thomas Morley
+Till Rettig
+Trevor Daniels
+Valentin Villenave
+Werner Lemberg
+Wol
+Yoshiki Sawada
+Łukasz Czerwiński
+
+
+#Local variables:
+#coding: utf-8
+#End:
--- /dev/null
+Release 2.2
+***********
+
+HEAD HACKERS
+
+Han-Wen Nienhuys
+Jan Nieuwenhuizen
+
+CONTRIBUTORS
+
+David Bobroff
+Edward Sanford Sutton
+Heikki Junes
+Nicolas Sceaux
+
+BUG HUNTERS/SUGGESTIONS
+
+Alexandre Beneteau
+Andrew McNabb
+Atte Andre Jensen
+Bertalan Fodor
+Bruce McIntyre
+Dave Symonds
+David Bobroff
+Darius
+Delma Avers
+Doug Linhardt
+Eric Wurbel
+Erik Sandberg
+Ferenc Wagner
+Hans Forbrich
+John Williams
+José Luis Cruz
+Jürgen Reuter
+Kieren Richard MacMillan
+Laurent Martelli
+Mats Bengtsson
+Matthias Kilian
+Nancho Alvarez
+Nick Busigin
+Nicolas Sceaux
+Olivier Guéry
+Patrick Atamaniuk
+Paul Scott
+Pawel D
+Pedro Kroger
+Ray McKinney
+Reuben Thomas
+Robert Vlasaty
+Stef Epardaud
+Thomas Willhalm
+Thomas Scharkowski
+Tom Bäckström
+Werner Lemberg
+Will Oram
+
+
+#Local variables:
+#coding: utf-8
+#End:
--- /dev/null
+Release 2.4
+***********
+
+DEVELOPMENT TEAM
+
+Han-Wen Nienhuys - Core development
+Jan Nieuwenhuizen - Core development
+Erik Sandberg - Bug Meister
+Pedro Kroger - Build Meister
+Graham Percival - Documentation Editor
+
+
+CONTRIBUTORS
+
+Carl Sorensen
+David Svoboda
+Guy Gascoigne-Piggford
+Heikki Junes
+Hendrik Maryns
+Kristof Bastiaensen
+Lisa Opus Goldstein
+Mats Bengtsson
+Michael Welsh Duggan
+Peter Lutek
+Werner Lemberg
+
+BUG HUNTERS/SUGGESTIONS
+
+
+Antti Kaihola
+Bertalan Fodor
+Brian Clements
+Christian Hitz
+Christoph Ludwig
+Christophe Papazian
+Daniel Berjón Díez
+Dave Phillips
+David Bobroff
+David Brandon
+Doug Asherman
+Ed Jackson
+Fernando Pablo Lopez-Lezcano
+Heinz Stolba
+Jack O'Quin
+Jefferson dos Santos Felix
+Karl Hammar
+Marco Gusy
+Martin Norbäck
+Matthias Neeracher
+Maurizio Tomasi
+Michael Kiermaier
+Pascal Legris
+Peter Rosenbeck
+Russ Ross
+Stephen Pollei
+Thomas Scharlowski
+Will Oram
+Yuval Harel
+
+
+#Local variables:
+#coding: utf-8
+#End:
--- /dev/null
+Release 2.6
+***********
+
+DEVELOPMENT TEAM
+
+Han-Wen Nienhuys - Core development
+Jan Nieuwenhuizen - Core development
+Erik Sandberg - Bug Meister
+Pedro Kroger - Build Meister
+Graham Percival - Documentation Editor
+
+CONTRIBUTORS
+
+Andreas Scherer
+Arno Waschk
+Bertalan Fodor
+Carl Sorensen
+Christian Hitz
+David Jedlinsky
+Erlend Aasland
+Heikki Junes
+John Williams
+Jonatan Liljedahl
+Jürgen Reuter
+Mats Bengtsson
+Matthias Neeracher
+Mathieu Giraud
+Nicolas Sceaux
+Pal Benko
+Sebastiano Vigna
+Tatsuya Ono
+Vicente Solsona Della
+Werner Lemberg
+Yuval Harel
+
+TRANSLATORS
+
+Abel Cheung
+John Mandereau
+Olcay Yıldırım
+Roland Stigge
+Steven Michael Murphy
+
+
+WEBSITE TRANSLATORS
+
+Gauvain Pocentek
+Jean-Charles Malahieude
+John Mandereau
+Tineke de Munnik
+
+
+SPONSORS
+
+Bertalan Fodor
+Chris Sawer
+Gunther Strube
+Hans Forbrich
+Jonathan Walther
+Marcus Macauley
+Steve Doonan
+
+BUG HUNTERS/SUGGESTIONS
+
+Alexandre Beneteau
+Andreas Scherer
+Anthony W. Youngman
+Antti Kaihola
+Arjan Bos
+David Bobroff
+Bernard Hurley
+Bruce Fairchild
+Bruce McIntyre
+Daniel Johnson
+David Rogers
+Dylan Nicholson
+Ed Jackson
+Erik Ronström
+Fernando Pablo Lopez-Lezcano
+Gilles Sadowski
+Pothárn Imre
+Jack O'Quin
+Jeff Smith
+Johannes Schindelin
+John Mandereau
+Jose Miguel Pasini
+Josiah Boothby
+Juergen Reuter
+Karl Hammar
+Laura Conrad
+Olivier Guéry
+Paul Scott
+Richard Schoeller
+Rob Platt
+Roman Stöckl-Schmidt
+Russ Jorgensen
+Simon Bailey
+Stephen McCarthy
+Sven Axelsson
+Tapio Tuovila
+Tom Cato Amundsen
+Tyler Eaves
+Will Oram
+Wolfgang Hoffmann
+
+
+#Local variables:
+#coding: utf-8
+#End:
--- /dev/null
+Release 2.8
+***********
+
+DEVELOPMENT TEAM
+
+Han-Wen Nienhuys - Core development
+Jan Nieuwenhuizen - Core development
+Erik Sandberg - Bug Meister
+Pedro Kroger - Build Meister
+Graham Percival - Documentation Editor
+Mats Bengtsson - Support Guru
+
+CONTRIBUTORS
+
+Erlend Aasland
+Heikki Junes
+Joe Neeman
+Johannes Schindelin
+Nicolas Sceaux
+Werner Lemberg
+Yoshinobu Ishizaki
+
+
+SPONSORS
+
+Aaron Mehl
+Basil Crow
+Bertalan Fodor
+Christian Ebert
+Henrik Frisk
+Jay Hamilton
+Jamie Bullock
+John Mandereau
+D. Josiah Boothby
+Kieren MacMillan
+Kris Shaffer
+Mark van den Borre
+Mike Rolish
+Muziekacademie Lede
+Nancho Alvarez
+Nicolas Sceaux
+Sean Reed
+Steve Doonan
+Sven Axelsson
+Trent Johnston
+Trevor Bača
+Vicente Solsona Dellá
+Yoshinobu Ishizaki
+
+
+BUG HUNTERS/SUGGESTIONS
+
+Alan Stern
+Andrea Valle
+Bertalan Fodor
+Bob Broadus
+Bruce Fairchild
+Cameron Horsburgh
+Chris Sawer
+Christian Ebert
+Christian Hitz
+Darius Blasband
+David Bobroff
+David Raleigh Arnold
+Donald Axel
+Don Blaheta
+Dunstan Vavasour
+Edward Neeman
+Eduardo Vieira
+Ernesto Gancedo
+François Vion
+Frédéric Bron
+Geoff Horton
+Gianluca D.
+Hans Forbrich
+Hoang Nguyen
+Joe Neeman
+Jordi Nadal
+Jukka Akkanen
+Kieren Richard MacMillan
+Lambros Lambrou
+Laura Conrad
+Libero Mureddu
+Marcus Macauley
+Mark Steinheuser
+Matevž Jekovec
+Michael Kiermaier
+Michael Welsh Duggan
+Milan Zamazal
+Nicolas Mayencourt
+Orm Finnendahl
+Patrick K Welton
+Paul Scott
+Ralph Little
+Richard Schoeller
+Robert Vlasaty
+Roman Kurakin
+Russell Lang
+Scott Russell
+Sean Reed
+Seng Liang
+Steve Doonan
+Steven Weber
+Sven Axelsson
+Thomas Scharkowski
+Thomas Bushnell BSG
+Toine Schreurs
+Trent Johnston
+Trevor Bača
+Vicente Solsona Dellá
+Vincenzo Colonnella
+Werner Lemberg
+Will Oram
+Wolfgang Hoffmann
+
+
+#Local variables:
+#coding: utf-8
+#End:
ISOLANG = nl
depth = ../..
-SUBDIRS = included web learning texidocs
STEPMAKE_TEMPLATES = documentation texinfo
LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
# NO_PDF_FILES = 1
+++ /dev/null
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
@c Translation checker:
@c Translation checker committish:
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Fundamentele concepten
@translationof Fundamental concepts
\\ % Voice four
{
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'force-hshift = #0
+ \once \override NoteColumn.force-hshift = #0
<ees c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
>> |
\\ % Voice four
{ \voiceThreeStyle
% Ignore these for now - they are explained in Ch 4
- \once \override NoteColumn #'force-hshift = #0
+ \once \override NoteColumn.force-hshift = #0
<ees c>2
- \once \override NoteColumn #'force-hshift = #0.5
+ \once \override NoteColumn.force-hshift = #0.5
des2
}
>> |
@}
>> % end ManualOne Staff context
\new Staff = "ManualTwo" \with @{
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
@} <<
\keyTime
\clef "bass"
}
>> % end ManualOne Staff context
\new Staff = "ManualTwo" \with {
- \override VerticalAxisGroup
- #'staff-staff-spacing #'stretchability = 5
+ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
} <<
\keyTime
\clef "bass"
@lilypond[quote,verbatim,ragged-right]
dolce = \markup { \italic \bold dolce }
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
fthenp =_\markup {
\dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}
violin = \relative c'' @{
\repeat volta 2 @{
c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
- \once \override TextScript #'padding = #5.0
+ \once \override TextScript.padding = #5.0
c4.^"hi there!" d8 e' f g d |
c,4.\markup @{
\dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = $padding
+ \once \override TextScript.padding = $padding
#})
\relative c''' {
--- /dev/null
+@c -*- coding: utf-8; mode: texinfo; -*-
+
+@ignore
+ Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+ When revising a translation, copy the HEAD committish of the
+ version that you are working on. For details, see the Contributors'
+ Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.16.0"
+
+@node Preface
+@unnumbered Preface
+
+
+It must have been during a rehearsal of the EJE (Eindhoven Youth
+Orchestra), somewhere in 1995 that Jan, one of the cranked violists,
+told Han-Wen, one of the distorted French horn players, about the
+grand new project he was working on. It was an automated system for
+printing music (to be precise, it was MPP, a preprocessor for
+MusiXTeX). As it happened, Han-Wen accidentally wanted to print out
+some parts from a score, so he started looking at the software, and he
+quickly got hooked. It was decided that MPP was a dead end. After
+lots of philosophizing and heated email exchanges, Han-Wen started
+LilyPond in 1996. This time, Jan got sucked into Han-Wen's new
+project.
+
+In some ways, developing a computer program is like learning to play
+an instrument. In the beginning, discovering how it works is fun, and
+the things you cannot do are challenging. After the initial excitement,
+you have to practice and practice. Scales and studies can be dull, and
+if you are not motivated by others -- teachers, conductors or
+audience -- it is very tempting to give up. You continue, and gradually
+playing becomes a part of your life. Some days it comes naturally, and
+it is wonderful, and on some days it just does not work, but you keep
+playing, day after day.
+
+Like making music, working on LilyPond can be dull work, and on
+some days it feels like plodding through a morass of bugs.
+Nevertheless, it has become a part of our life, and we keep doing it.
+Probably the most important motivation is that our program actually
+does something useful for people. When we browse around the net we
+find many people who use LilyPond, and produce impressive pieces of
+sheet music. Seeing that feels unreal, but in a very pleasant way.
+
+Our users not only give us good vibes by using our program, many of
+them also help us by giving suggestions and sending bug reports, so we
+would like to thank all users that sent us bug reports, gave
+suggestions or contributed in any other way to LilyPond.
+
+Playing and printing music is more than a nice analogy. Programming
+together is a lot of fun, and helping people is deeply satisfying, but
+ultimately, working on LilyPond is a way to express our deep love for
+music. May it help you create lots of beautiful music!
+
+Han-Wen and Jan
+
+Utrecht/Eindhoven, The Netherlands, July 2002.
+
--- /dev/null
+@c -*- coding: utf-8; mode: texinfo; -*-
+
+@ignore
+ Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+ When revising a translation, copy the HEAD committish of the
+ version that you are working on. For details, see the Contributors'
+ Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.16.0"
+
+@node Templates
+@appendix Templates
+
+This section of the manual contains templates with the LilyPond score
+already set up for you. Just add notes, run LilyPond, and enjoy
+beautiful printed scores!
+
+@c bad node name for ancient notation to avoid conflict
+@menu
+* Single staff::
+* Piano templates::
+* String quartet::
+* Vocal ensembles::
+* Orchestral templates::
+* Ancient notation templates::
+* Other templates::
+@end menu
+
+
+@node Single staff
+@appendixsec Single staff
+
+@appendixsubsec Notes only
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
+{single-staff-template-with-only-notes.ly}
+
+
+@appendixsubsec Notes and lyrics
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
+{single-staff-template-with-notes-and-lyrics.ly}
+
+@appendixsubsec Notes and chords
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{single-staff-template-with-notes-and-chords.ly}
+
+@appendixsubsec Notes, lyrics, and chords.
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{single-staff-template-with-notes,-lyrics,-and-chords.ly}
+
+
+@node Piano templates
+@appendixsec Piano templates
+
+@appendixsubsec Solo piano
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{piano-template-simple.ly}
+
+@appendixsubsec Piano and melody with lyrics
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{piano-template-with-melody-and-lyrics.ly}
+
+@appendixsubsec Piano centered lyrics
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{piano-template-with-centered-lyrics.ly}
+
+
+@node String quartet
+@appendixsec String quartet
+
+@appendixsubsec String quartet
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{string-quartet-template-simple.ly}
+
+@appendixsubsec String quartet parts
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{string-quartet-template-with-separate-parts.ly}
+
+
+@node Vocal ensembles
+@appendixsec Vocal ensembles
+
+@appendixsubsec SATB vocal score
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{vocal-ensemble-template.ly}
+
+@appendixsubsec SATB vocal score and automatic piano reduction
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{vocal-ensemble-template-with-automatic-piano-reduction.ly}
+
+@appendixsubsec SATB with aligned contexts
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly}
+
+@appendixsubsec SATB on four staves
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{satb-choir-template---four-staves.ly}
+
+@appendixsubsec Solo verse and two-part refrain
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{vocal-ensemble-template-with-verse-and-refrain.ly}
+
+@appendixsubsec Hymn tunes
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{hymn-template.ly}
+
+@appendixsubsec Psalms
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{anglican-psalm-template.ly}
+
+
+@node Orchestral templates
+@appendixsec Orchestral templates
+
+@appendixsubsec Orchestra, choir and piano
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{orchestra,-choir-and-piano-template.ly}
+
+
+@c bad node name to avoid node name conflict
+@node Ancient notation templates
+@appendixsec Ancient notation templates
+
+@appendixsubsec Transcription of mensural music
+
+@c Line-width below is because of Issue 766. If that's fixed, it can be removed.
+@lilypondfile[verbatim,quote,ragged-right,texidoc,line-width=140]
+{ancient-notation-template----modern-transcription-of-mensural-music.ly}
+
+@appendixsubsec Gregorian transcription template
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{ancient-notation-template----modern-transcription-of-gregorian-music.ly}
+
+
+@node Other templates
+@appendixsec Other templates
+
+@appendixsubsec Jazz combo
+
+@c Line-width below is because of Issue 766. If that's fixed, it can be removed.
+@lilypondfile[verbatim,quote,ragged-right,texidoc,line-width=140]
+{jazz-combo-template.ly}
+
+
+
+
+@ignore
+This isn't very useful, and only duplicates material in
+"global issues". And if this info changes, this section often
+gets forgotten.
+
+@no de Other templates
+@se ction Other templates
+@su bsection All headers
+
+This template displays all available headers. Some of them are only
+used in the Mutopia project; they don't affect the printed output at
+all. They are used if you want the piece to be listed with different
+information in the Mutopia database than you wish to have printed on the
+music. For example, Mutopia lists the composer of the famous D major
+violin concerto as TchaikovskyPI, whereas perhaps you wish to print
+"Petr Tchaikowski" on your music.
+
+@ The `line-width' is for \header.
+@li lypond[quote,verbatim,ragged-right,line-width]
+\version "2.16.0"
+\header {
+ dedication = "dedication"
+ title = "Title"
+ subtitle = "Subtitle"
+ subsubtitle = "Subsubtitle"
+ composer = "Composer (xxxx-yyyy)"
+ opus = "Opus 0"
+ piece = "Piece I"
+ meter = "meter"
+ instrument = "Instrument"
+ arranger = "Arranger"
+ poet = "Poet"
+ texttranslator = "Translator"
+ copyright = "public domain"
+
+ % These are headers used by the Mutopia Project
+ % http://www.mutopiaproject.org/
+ mutopiatitle = ""
+ mutopiacomposer = ""
+ mutopiapoet = ""
+ mutopiainstrument = ""
+ date = "composer's dates"
+ source = "urtext "
+ maintainer = "your name here"
+ maintainerEmail = "your email here"
+ maintainerWeb = "your home page"
+ lastupdated = "2004/Aug/26"
+}
+
+\score {
+ { c'4 }
+ \header {
+ piece = "piece1"
+ opus = "opus1"
+ }
+}
+
+\score {
+ { c'4 }
+ \header {
+ piece = "piece2"
+ opus = "opus2"
+ }
+}
+@end lilypond
+@end ignore
+
+
+
--- /dev/null
+@c -*- coding: utf-8; mode: texinfo; -*-
+
+@ignore
+ Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+ When revising a translation, copy the HEAD committish of the
+ version that you are working on. For details, see the Contributors'
+ Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.17.6"
+
+@node Tweaking output
+@chapter Tweaking output
+
+This chapter discusses how to modify output. LilyPond is extremely
+configurable; virtually every fragment of output may be changed.
+
+
+@menu
+* Tweaking basics::
+* The Internals Reference manual::
+* Appearance of objects::
+* Placement of objects::
+* Collisions of objects::
+* Further tweaking::
+@end menu
+
+@node Tweaking basics
+@section Tweaking basics
+
+@menu
+* Introduction to tweaks::
+* Objects and interfaces::
+* Naming conventions of objects and properties::
+* Tweaking methods::
+@end menu
+
+@node Introduction to tweaks
+@subsection Introduction to tweaks
+
+@q{Tweaking} is a LilyPond term for the various methods available
+to the user for modifying the actions taken during interpretation
+of the input file and modifying the appearance of the printed
+output. Some tweaks are very easy to use; others are more
+complex. But taken together the methods available for tweaking
+permit almost any desired appearance of the printed music to be
+achieved.
+
+In this section we cover the basic concepts required to understand
+tweaking. Later we give a variety of ready-made commands which can
+simply be copied to obtain the same effect in your own scores, and
+at the same time we show how these commands may be constructed so
+that you may learn how to develop your own tweaks.
+
+Before starting on this Chapter you may wish to review the section
+@ref{Contexts and engravers}, as Contexts, Engravers, and the
+Properties contained within them are fundamental to understanding
+and constructing Tweaks.
+
+@node Objects and interfaces
+@subsection Objects and interfaces
+
+@cindex object
+@cindex grob
+@cindex spanner
+@cindex interface
+@cindex properties, object
+@cindex object properties
+@cindex layout object
+@cindex object, layout
+@cindex interface
+
+Tweaking involves modifying the internal operation and structures
+of the LilyPond program, so we must first introduce some terms
+which are used to describe those internal operations and
+structures.
+
+The term @q{Object} is a generic term used to refer to the
+multitude of internal structures built by LilyPond during the
+processing of an input file. So when a command like @code{\new
+Staff} is encountered a new object of type @code{Staff} is
+constructed. That @code{Staff} object then holds all the
+properties associated with that particular staff, for example, its
+name and its key signature, together with details of the engravers
+which have been assigned to operate within that staff's context.
+Similarly, there are objects to hold the properties of all other
+contexts, such as @code{Voice} objects, @code{Score} objects,
+@code{Lyrics} objects, as well as objects to represent all
+notational elements such as bar lines,
+note heads, ties, dynamics, etc. Every object has its own set of
+property values.
+
+Some types of object are given special names. Objects which represent
+items of notation on the printed output such as note heads, stems,
+slurs, ties, fingering, clefs, etc are called @q{Layout objects},
+often known as @q{Graphical Objects}, or @q{Grobs} for short. These
+are still objects in the generic sense above, and so they too all have
+properties associated with them, such as their position, size, color,
+etc.
+
+Some layout objects are still more specialized. Phrasing slurs,
+crescendo hairpins, ottava marks, and many other grobs are not
+localized in a single place -- they have a starting point, an
+ending point, and maybe other properties concerned with their
+shape. Objects with an extended shape like these are called
+@q{Spanners}.
+
+It remains to explain what @q{Interfaces} are. Many objects, even
+though they are quite different, share common features which need to
+be processed in the same way. For example, all grobs have a color, a
+size, a position, etc, and all these properties are processed in the
+same way during LilyPond's interpretation of the input file. To
+simplify these internal operations these common actions and properties
+are grouped together in an object called a @code{grob-interface}.
+There are many other groupings of common properties like this, each
+one given a name ending in @code{interface}. In total there are over
+100 such interfaces. We shall see later why this is of interest and
+use to the user.
+
+These, then, are the main terms relating to objects which we
+shall use in this chapter.
+
+@node Naming conventions of objects and properties
+@subsection Naming conventions of objects and properties
+
+@cindex naming conventions for objects
+@cindex naming conventions for properties
+@cindex objects, naming conventions
+@cindex properties, naming conventions
+
+We met some object naming conventions previously, in
+@ref{Contexts and engravers}. Here for reference is a list
+of the most common object and property types together with
+the conventions for naming them and a couple of examples of
+some real names. We have used @q{A} to stand for any capitalized
+alphabetic character and @q{aaa} to stand for any number of
+lower-case alphabetic characters. Other characters are used
+verbatim.
+
+@multitable @columnfractions .33 .33 .33
+@headitem Object/property type
+ @tab Naming convention
+ @tab Examples
+@item Contexts
+ @tab Aaaa or AaaaAaaaAaaa
+ @tab Staff, GrandStaff
+@item Layout Objects
+ @tab Aaaa or AaaaAaaaAaaa
+ @tab Slur, NoteHead
+@item Engravers
+ @tab Aaaa_aaa_engraver
+ @tab Clef_engraver, Note_heads_engraver
+@item Interfaces
+ @tab aaa-aaa-interface
+ @tab grob-interface, break-aligned-interface
+@item Context Properties
+ @tab aaa or aaaAaaaAaaa
+ @tab alignAboveContext, skipBars
+@item Layout Object Properties
+ @tab aaa or aaa-aaa-aaa
+ @tab direction, beam-thickness
+@end multitable
+
+As we shall see shortly, the properties of different types of object are
+modified by different commands, so it is useful to be able to recognize
+the types of objects and properties from their names.
+
+
+@node Tweaking methods
+@subsection Tweaking methods
+
+@cindex tweaking methods
+
+@strong{\override command}
+
+@cindex override command
+@cindex override syntax
+
+@funindex \override
+@funindex override
+
+We have already met the commands @code{\set} and @code{\with}, used to
+change the properties of @strong{contexts} and to remove and add
+@strong{engravers}, in @ref{Modifying context properties}, and
+@ref{Adding and removing engravers}. We must now introduce some more
+important commands.
+
+The command to change the properties of @strong{layout objects} is
+@code{\override}. Because this command has to modify
+internal properties deep within LilyPond its syntax is not
+as simple as the commands you have used so far. It needs to
+know precisely which property of which object in which context
+has to be modified, and what its new value is to be. Let's see
+how this is done.
+
+The general syntax of this command is:
+
+@example
+\override @var{Context}.@var{LayoutObject} #'@var{layout-property} =
+#@var{value}
+@end example
+
+@noindent
+This will set the property with the name @var{layout-property} of the
+layout object with the name @var{LayoutObject}, which is a member of
+the @var{Context} context, to the value @var{value}.
+
+The @var{Context} can be omitted (and usually is) when the
+required context is unambiguously implied and is one of lowest
+level contexts, i.e., @code{Voice}, @code{ChordNames} or
+@code{Lyrics}, and we shall omit it in many of the following
+examples. We shall see later when it must be specified.
+
+Later sections deal comprehensively with properties and their
+values, see @ref{Types of properties}. But in this section we shall
+use just a few simple properties and values which are easily
+understood in order to illustrate the format and use of these
+commands.
+
+For now, don't worry about the @code{#'}, which must precede the
+layout property, and the@tie{}@code{#}, which must precede the value.
+These must always be present in exactly this form. This is the
+most common command used in tweaking, and most of the rest of
+this chapter will be directed to presenting examples of how it is
+used. Here is a simple example to change the color of the
+note head:
+
+@cindex color property, example
+@cindex NoteHead, example of overriding
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+c4 d
+\override NoteHead.color = #red
+e4 f |
+\override NoteHead.color = #green
+g4 a b c |
+@end lilypond
+
+@strong{\revert command}
+
+@cindex revert command
+
+@funindex \revert
+@funindex revert
+
+Once overridden, the property retains its new value until it is
+overridden again or a @code{\revert} command is encountered.
+The @code{\revert} command has the following syntax and causes
+the value of the property to revert to its original default
+value; note, not its previous value if several @code{\override}
+commands have been issued.
+
+@example
+\revert @var{Context}.@var{LayoutObject} #'@var{layout-property}
+@end example
+
+Again, just like @var{Context} in the @code{\override} command,
+@var{Context} is often not needed. It will be omitted
+in many of the following examples. Here we revert the color
+of the note head to the default value for the final two notes:
+
+@cindex color property, example
+@cindex NoteHead, example of overriding
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+c4 d
+\override NoteHead.color = #red
+e4 f |
+\override NoteHead.color = #green
+g4 a
+\revert NoteHead.color
+b4 c |
+@end lilypond
+
+@strong{\once prefix}
+
+@funindex \once
+@funindex once
+
+Both the @code{\override} and the @code{\set} commands may be prefixed
+by @code{\once}. This causes the following @code{\override} or
+@code{\set} command to be effective only during the current musical
+moment before the property reverts back to its previous value (this can
+be different from the default if another @code{\override} is still in
+effect). Using the same example, we can change the color of a single
+note like this:
+
+@cindex color property, example
+@cindex NoteHead, example of overriding
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+c4 d
+\override NoteHead.color = #red
+e4 f |
+\once \override NoteHead.color = #green
+g4 a
+\revert NoteHead.color
+b c |
+@end lilypond
+
+@strong{\overrideProperty command}
+
+@cindex overrideProperty command
+
+@funindex \overrideProperty
+@funindex overrideProperty
+
+There is another form of the override command,
+@code{\overrideProperty}, which is occasionally required.
+We mention it here for completeness, but for details see
+@rextend{Difficult tweaks}.
+@c Maybe explain in a later iteration -td
+
+@strong{\tweak command}
+
+@cindex tweak command
+
+@funindex \tweak
+@funindex tweak
+
+The final tweaking command which is available is @code{\tweak}. This
+should be used when several objects occur at the same musical moment,
+but you only want to change the properties of selected ones, such as a
+single note within a chord. Using @code{\override} would affect all the
+notes within a chord, whereas @code{\tweak} affects just the following
+item in the input stream.
+
+Here's an example. Suppose we wish to change the size of the
+middle note head (the E) in a C major chord. Let's first see what
+@code{\once \override} would do:
+
+@cindex font-size property, example
+@cindex NoteHead, example of overriding
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+<c e g>4
+\once \override NoteHead.font-size = #-3
+<c e g>4
+<c e g>4
+@end lilypond
+
+We see the override affects @emph{all} the note heads in the chord.
+This is because all the notes of a chord occur at the same
+@emph{musical moment}, and the action of @code{\once} is to
+apply the override to all layout objects of the type specified
+which occur at the same musical moment as the @code{\override}
+command itself.
+
+The @code{\tweak} command operates in a different way. It acts on
+the immediately following item in the input stream. In its simplest
+form, it is effective only on objects which are created directly
+from the following item, essentially note heads and articulations.
+
+So to return to our example, the size of the middle note of
+a chord would be changed in this way:
+
+@cindex font-size property, example
+@cindex @code{\tweak}, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+<c e g>4
+<c \tweak font-size #-3 e g>4
+@end lilypond
+
+Note that the syntax of @code{\tweak} is different from that of the
+@code{\override} command. The context should not be specified; in
+fact, it would generate an error to do so. Both context and layout
+object are implied by the following item in the input stream. Note
+also that an equals sign should not be present. So the simple form
+of the @code{\tweak} command is
+
+@example
+\tweak #'@var{layout-property} #@var{value}
+@end example
+
+A @code{\tweak} command can also be used to modify just one in
+a series of articulations, as shown here:
+
+@cindex color property, example
+@cindex @code{\tweak}, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+a4^"Black"
+ -\tweak color #red ^"Red"
+ -\tweak color #green _"Green"
+@end lilypond
+
+@noindent
+Note that the @code{\tweak} command must be preceded by an articulation
+mark since the tweaked expression needs to be applied as an articulation
+itself. In case of multiple direction overrides (@code{^} or @code{_}),
+the leftmost override wins since it is applied last.
+
+@cindex @code{\tweak}, Accidental
+@cindex @code{\tweak}, specific layout object
+
+Objects such as stems and accidentals are created later, and not
+directly from the following event. It is still possible to use
+@code{\tweak} on such indirectly created objects by explicitly naming
+the layout object, provided that LilyPond can trace its origin back to
+the original event:
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+<\tweak Accidental.color #red cis4
+ \tweak Accidental.color #green es
+ g>
+@end lilypond
+
+This long form of the @code{\tweak} command can be described as
+@example
+\tweak @var{layout-object} #'@var{layout-property} @var{value}
+@end example
+
+@cindex tuplets, nested
+@cindex triplets, nested
+@cindex bracket, tuplet
+@cindex bracket, triplet
+@cindex tuplet bracket
+@cindex triplet bracket
+
+@funindex TupletBracket
+
+The @code{\tweak} command must also be used to change the
+appearance of one of a set of nested tuplets which begin at the
+same musical moment. In the following example, the long tuplet
+bracket and the first of the three short brackets begin at the
+same musical moment, so any @code{\override} command would apply
+to both of them. In the example, @code{\tweak} is used to
+distinguish between them. The first @code{\tweak} command
+specifies that the long tuplet bracket is to be placed above the
+notes and the second one specifies that the tuplet number is to be
+printed in red on the first short tuplet bracket.
+
+@cindex @code{\tweak}, example
+@cindex direction property, example
+@cindex color property, example
+
+@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
+\tweak direction #up
+\times 4/3 {
+ \tweak color #red
+ \times 2/3 { c8[ c c] }
+ \times 2/3 { c8[ c c] }
+ \times 2/3 { c8[ c c] }
+}
+@end lilypond
+
+If nested tuplets do not begin at the same moment, their
+appearance may be modified in the usual way with
+@code{\override} commands:
+
+@cindex text property, example
+@cindex tuplet-number function, example
+@cindex transparent property, example
+@cindex TupletNumber, example of overriding
+
+@c NOTE Tuplet brackets collide if notes are high on staff
+@c See issue 509
+@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
+\times 2/3 { c8[ c c] }
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
+\times 2/3 {
+ c8[ c]
+ c8[ c]
+ \once \override TupletNumber.transparent = ##t
+ \times 2/3 { c8[ c c] }
+ \times 2/3 { c8[ c c] }
+}
+@end lilypond
+
+
+@seealso
+Notation Reference:
+@ruser{The tweak command}.
+
+
+@node The Internals Reference manual
+@section The Internals Reference manual
+
+@cindex Internals Reference
+
+@menu
+* Properties of layout objects::
+* Properties found in interfaces::
+* Types of properties::
+@end menu
+
+@node Properties of layout objects
+@subsection Properties of layout objects
+
+@cindex properties of layout objects
+@cindex properties of grobs
+@cindex grobs, properties of
+@cindex layout objects, properties of
+@cindex Internals Reference manual
+
+Suppose you have a slur in a score which, to your mind,
+appears too thin and you'd like to draw it a little heavier.
+How do you go about doing this? You know from the statements
+earlier about the flexibility of LilyPond that such a thing
+should be possible, and you would probably guess that an
+@code{\override} command would be needed. But is there a
+heaviness property for a slur, and if there is, how might it
+be modified? This is where the Internals Reference manual
+comes in. It contains all the information you might need to
+construct this and all other @code{\override} commands.
+
+Before we look at the Internals Reference a word of warning.
+This is a @strong{reference} document, which means there is
+little or no explanation contained within it: its purpose is
+to present information precisely and concisely. This
+means it might look daunting at first sight. Don't worry!
+The guidance and explanation presented here will enable you
+to extract the information from the Internals Reference for
+yourself with just a little practice.
+
+@cindex override example
+@cindex Internals Reference, example of using
+@cindex @code{\addlyrics} example
+
+Let's use a concrete example with a simple fragment of real
+music:
+
+@c Mozart, Die Zauberflöte Nr.7 Duett
+
+@lilypond[quote,verbatim,relative=2]
+{
+ \key es \major
+ \time 6/8
+ {
+ r4 bes8 bes[( g]) g |
+ g8[( es]) es d[( f]) as |
+ as8 g
+ }
+ \addlyrics {
+ The man who | feels love's sweet e -- | mo -- tion
+ }
+}
+@end lilypond
+
+Suppose now that we decide we would like the slurs to be a
+little heavier. Is this possible? The slur is certainly a
+layout object, so the question is, @q{Is there a property
+belonging to a slur which controls the heaviness?} To answer
+this we must look in the Internals Reference, or IR for short.
+
+The IR for the version of LilyPond you are using may be found
+on the LilyPond website at @uref{http://lilypond.org}. Go to the
+documentation page and click on the Internals Reference link.
+For learning purposes you should use the standard HTML version,
+not the @q{one big page} or the PDF. For the next few
+paragraphs to make sense you will need to actually do this
+as you read.
+
+Under the heading @strong{Top} you will see five links. Select
+the link to the @emph{Backend}, which is where information about
+layout objects is to be found. There, under the heading
+@strong{Backend}, select the link to @emph{All layout objects}.
+The page that appears lists all the layout objects used in your
+version of LilyPond, in alphabetic order. Select the link to
+Slur, and the properties of Slurs are listed.
+
+An alternative way of finding this page is from the Notation
+Reference. On one of the pages that deals with slurs you may find a
+link to the Internals Reference. This link will take you directly to
+this page, but if you have an idea about the name of the layout object
+to be tweaked, it is easier to go straight to the IR and search there.
+
+This Slur page in the IR tells us first that Slur objects are created
+by the Slur_engraver. Then it lists the standard settings. Browse
+through them looking for a property that might control the heaviness of
+slurs, and you should find
+
+@example
+@code{thickness} (number)
+ @code{1.2}
+ Line thickness, generally measured in @code{line-thickness}
+@end example
+
+This looks a good bet to change the heaviness. It tells us that
+the value of @code{thickness} is a simple @emph{number},
+that the default value is 1.2, and that the units are
+in another property called @code{line-thickness}.
+
+As we said earlier, there are few to no explanations in the IR,
+but we already have enough information to try changing the
+slur thickness. We see that the name of the layout object
+is @code{Slur}, that the name of the property to change is
+@code{thickness} and that the new value should be a number
+somewhat larger than 1.2 if we are to make slurs thicker.
+
+We can now construct the @code{\override} command by simply
+substituting the values we have found for the names, omitting
+the context. Let's use a very large value for the thickness
+at first, so we can be sure the command is working. We get:
+
+@example
+\override Slur.thickness = #5.0
+@end example
+
+Don't forget the @code{#'} preceding the
+property name and a@tie{}@code{#} preceding the new value!
+
+The final question is, @q{Where should this command be
+placed?} While you are unsure and learning, the best
+answer is, @q{Within the music, before the first slur and
+close to it.} Let's do that:
+
+@cindex Slur example of overriding
+@cindex thickness property, example
+
+@lilypond[quote,verbatim,relative=2]
+{
+ \key es \major
+ \time 6/8
+ {
+ % Increase thickness of all following slurs from 1.2 to 5.0
+ \override Slur.thickness = #5.0
+ r4 bes8 bes[( g]) g |
+ g8[( es]) es d[( f]) as |
+ as8 g
+ }
+ \addlyrics {
+ The man who | feels love's sweet e -- | mo -- tion
+ }
+}
+@end lilypond
+
+@noindent
+and we see that the slur is indeed heavier.
+
+So this is the basic way of constructing @code{\override}
+commands. There are a few more complications that we
+shall meet in later sections, but you now know all the
+essentials required to make up your own -- but you will
+still need some practice. This is provided in the examples
+which follow.
+
+@subheading Finding the context
+
+@cindex context, finding
+@cindex context, identifying correct
+
+But first, what if we had needed to specify the Context?
+What should it be? We could guess that slurs are in
+the Voice context, as they are clearly closely associated
+with individual lines of music, but can we be sure? To
+find out, go back to the top of the IR page describing the
+Slur, where it says @q{Slur objects are created by: Slur
+engraver}. So slurs will be created in whichever context
+the @code{Slur_engraver} is in. Follow the link to the
+@code{Slur_engraver} page. At the very bottom it tells
+us that @code{Slur_engraver} is part of seven Voice contexts,
+including the standard voice context, @code{Voice}, so our
+guess was correct. And because @code{Voice} is one of the
+lowest level contexts which is implied unambiguously by
+the fact that we are entering notes, we can omit it in this
+location.
+
+@subheading Overriding once only
+
+@cindex overriding once only
+@cindex once override
+
+@funindex \once
+@funindex once
+
+As you can see, @emph{all} the slurs are thicker in the final example
+above. But what if we wanted just the first slur to be thicker? This
+is achieved with the @code{\once} command. Placed immediately before
+the @code{\override} command it causes it to change only the slur
+which begins on the @strong{immediately following} note. If the
+immediately following note does not begin a slur the command has no
+effect at all -- it is not remembered until a slur is encountered, it
+is simply discarded. So the command with @code{\once} must be
+repositioned as follows:
+
+@cindex Slur, example of overriding
+@cindex thickness property, example
+
+@lilypond[quote,verbatim,relative=2]
+{
+ \key es \major
+ \time 6/8
+ {
+ r4 bes8
+ % Increase thickness of immediately following slur only
+ \once \override Slur.thickness = #5.0
+ bes8[( g]) g |
+ g8[( es]) es d[( f]) as |
+ as8 g
+ }
+ \addlyrics {
+ The man who | feels love's sweet e -- | mo -- tion
+ }
+}
+@end lilypond
+
+@noindent
+Now only the first slur is made heavier.
+
+The @code{\once} command can also be used before the @code{\set}
+command.
+
+@subheading Reverting
+
+@cindex revert
+@cindex default properties, reverting to
+
+@funindex \revert
+@funindex revert
+
+Finally, what if we wanted just the first two slurs to be
+heavier? Well, we could use two commands, each preceded by
+@code{\once} placed immediately before each of the notes where
+the slurs begin:
+
+@cindex Slur, example of overriding
+@cindex thickness property, example
+
+@lilypond[quote,verbatim,relative=2]
+{
+ \key es \major
+ \time 6/8
+ {
+ r4 bes8
+ % Increase thickness of immediately following slur only
+ \once \override Slur.thickness = #5.0
+ bes[( g]) g |
+ % Increase thickness of immediately following slur only
+ \once \override Slur.thickness = #5.0
+ g8[( es]) es d[( f]) as |
+ as8 g
+ }
+ \addlyrics {
+ The man who | feels love's sweet e -- | mo -- tion
+ }
+}
+@end lilypond
+
+@noindent
+or we could omit the @code{\once} command and use the @code{\revert}
+command to return the @code{thickness} property to its default value
+after the second slur:
+
+@cindex Slur, example of overriding
+@cindex thickness property, example
+
+@lilypond[quote,verbatim,relative=2]
+{
+ \key es \major
+ \time 6/8
+ {
+ r4 bes8
+ % Increase thickness of all following slurs from 1.2 to 5.0
+ \override Slur.thickness = #5.0
+ bes[( g]) g |
+ g8[( es]) es
+ % Revert thickness of all following slurs to default of 1.2
+ \revert Slur.thickness
+ d8[( f]) as |
+ as8 g
+ }
+ \addlyrics {
+ The man who | feels love's sweet e -- | mo -- tion
+ }
+}
+@end lilypond
+
+@noindent
+The @code{\revert} command can be used to return any property
+changed with @code{\override} back to its default value.
+You may use whichever method best suits what you want to do.
+
+That concludes our introduction to the IR, and the basic
+method of tweaking. Several examples follow in the later
+sections of this Chapter, partly to introduce you to some of the
+additional features of the IR, and partly to give you more
+practice in extracting information from it. These examples will
+contain progressively fewer words of guidance and explanation.
+
+
+@node Properties found in interfaces
+@subsection Properties found in interfaces
+
+@cindex interface
+@cindex interface properties
+@cindex properties in interfaces
+
+Suppose now that we wish to print the lyrics in italics. What form of
+@code{\override} command do we need to do this? We first look in the
+IR page listing @q{All layout objects}, as before, and look for an
+object that might control lyrics. We find @code{LyricText}, which
+looks right. Clicking on this shows the settable properties for lyric
+text. These include the @code{font-series} and @code{font-size}, but
+nothing that might give an italic shape. This is because the shape
+property is one that is common to all font objects, so, rather than
+including it in every layout object, it is grouped together with other
+similar common properties and placed in an @strong{Interface}, the
+@code{font-interface}.
+
+So now we need to learn how to find the properties of interfaces,
+and to discover what objects use these interface properties.
+
+Look again at the IR page which describes LyricText. At the bottom of
+the page is a list of clickable interfaces which LyricText supports.
+The list has several items, including @code{font-interface}. Clicking
+on this brings up the properties associated with this interface, which
+are also properties of all the objects which support it, including
+LyricText.
+
+Now we see all the user-settable properties which control fonts,
+including @code{font-shape(symbol)}, where @code{symbol} can be
+set to @code{upright}, @code{italics} or @code{caps}.
+
+You will notice that @code{font-series} and @code{font-size} are also
+listed there. This immediately raises the question: Why are the
+common font properties @code{font-series} and @code{font-size} listed
+under @code{LyricText} as well as under the interface
+@code{font-interface} but @code{font-shape} is not? The answer is
+that @code{font-series} and @code{font-size} are changed from their
+global default values when a @code{LyricText} object is created, but
+@code{font-shape} is not. The entries in @code{LyricText} then tell
+you the values for those two properties which apply to
+@code{LyricText}. Other objects which support @code{font-interface}
+will set these properties differently when they are created.
+
+Let's see if we can now construct the @code{\override} command
+to change the lyrics to italics. The object is @code{LyricText},
+the property is @code{font-shape} and the value is
+@code{italic}. As before, we'll omit the context.
+
+As an aside, although it is an important one, note that because the
+values of @code{font-shape} are symbols they must be introduced with a
+single apostrophe, @code{'}. That is why apostrophes are needed
+before @code{thickness} in the earlier example and @code{font-shape}.
+These are both symbols too. Symbols are then read internally by
+LilyPond. Some of them are the names of properties, like
+@code{thickness} or @code{font-shape}, others are used as values that
+can be given to properties, like @code{italic}. Note the distinction
+from arbitrary text strings, which would appear as @code{"a text
+string"}; for more details about symbols and strings, see
+@rextend{Scheme tutorial}.
+
+So we see that the @code{\override} command needed to print the lyrics
+in italics is:
+
+@example
+\override LyricText.font-shape = #'italic
+@end example
+
+@noindent
+This should be placed just in front of the lyrics we wish to affect,
+like so:
+
+@cindex font-shape property, example
+@cindex italic, example
+@cindex LyricText, example of overriding
+@cindex @code{\addlyrics}, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \key es \major
+ \time 6/8
+ {
+ r4 bes8 bes[( g]) g |
+ g8[( es]) es d[( f]) as |
+ as8 g
+ }
+ \addlyrics {
+ \override LyricText.font-shape = #'italic
+ The man who | feels love's sweet e -- | mo -- tion
+ }
+}
+@end lilypond
+
+@noindent
+and the lyrics are all printed in italics.
+
+@subheading Specifying the context in lyric mode
+
+@cindex context, specifying in lyric mode
+@cindex lyric mode, specifying context
+
+In the case of lyrics, if you try specifying the context in the
+format given earlier the command will fail. A syllable
+entered in lyricmode is terminated by either a space,
+a newline or a digit. All other characters are included
+as part of the syllable. For this reason a space or newline
+must appear before the terminating @code{@}} to prevent it being
+included as part of the final syllable. Similarly,
+spaces must be inserted before and after the
+period or dot, @q{.}, separating the context name from the
+object name, as otherwise the two names are run together and
+the interpreter cannot recognize them. So the command should be:
+
+@example
+\override Lyrics.LyricText.font-shape = #'italic
+@end example
+
+@warning{In lyrics always leave whitespace between the final
+syllable and the terminating brace.}
+
+@warning{In overrides in lyrics always place spaces around
+the dot between the context name and the object name.}
+
+
+@seealso
+Extending: @rextend{Scheme tutorial}.
+
+
+@node Types of properties
+@subsection Types of properties
+
+@cindex property types
+
+So far we have seen two types of property: @code{number} and
+@code{symbol}. To be valid, the value given to a property
+must be of the correct type and obey the rules for that type.
+The type of property is always shown in brackets after the
+property name in the IR. Here is a list of the types you may
+need, together with the rules for that type, and some examples.
+You must always add a hash symbol, @code{#}, of course,
+to the front of these values when they are entered in the
+@code{\override} command.
+
+@multitable @columnfractions .2 .45 .35
+@headitem Property type
+ @tab Rules
+ @tab Examples
+@item Boolean
+ @tab Either True or False, represented by #t or #f
+ @tab @code{#t}, @code{#f}
+@item Dimension (in staff space)
+ @tab A positive decimal number (in units of staff space)
+ @tab @code{2.5}, @code{0.34}
+@item Direction
+ @tab A valid direction constant or its numerical equivalent (decimal
+values between -1 and 1 are allowed)
+ @tab @code{LEFT}, @code{CENTER}, @code{UP},
+ @code{1}, @w{@code{-1}}
+@item Integer
+ @tab A positive whole number
+ @tab @code{3}, @code{1}
+@item List
+ @tab A set of values separated by spaces, enclosed in parentheses
+and preceded by an apostrophe
+ @tab @code{'(left-edge staff-bar)}, @code{'(1)},
+ @code{'(1.0 0.25 0.5)}
+@item Markup
+ @tab Any valid markup
+ @tab @code{\markup @{ \italic "cresc." @}}
+@item Moment
+ @tab A fraction of a whole note constructed with the
+make-moment function
+ @tab @code{(ly:make-moment 1 4)},
+ @code{(ly:make-moment 3 8)}
+@item Number
+ @tab Any positive or negative decimal value
+ @tab @code{3.5}, @w{@code{-2.45}}
+@item Pair (of numbers)
+ @tab Two numbers separated by a @q{space . space} and enclosed
+in brackets preceded by an apostrophe
+ @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)}
+@item Symbol
+ @tab Any of the set of permitted symbols for that property,
+preceded by an apostrophe
+ @tab @code{'italic}, @code{'inside}
+@item Unknown
+ @tab A procedure, or @code{#f} to cause no action
+ @tab @code{bend::print}, @code{ly:text-interface::print},
+ @code{#f}
+@item Vector
+ @tab A list of three items enclosed in parentheses and preceded
+by apostrophe-hash, @code{'#}.
+ @tab @code{'#(#t #t #f)}
+@end multitable
+
+
+@seealso
+Extending: @rextend{Scheme tutorial}.
+
+
+@node Appearance of objects
+@section Appearance of objects
+
+Let us now put what we have learned into practice with a few
+examples which show how tweaks may be used to change the
+appearance of the printed music.
+
+@menu
+* Visibility and color of objects::
+* Size of objects::
+* Length and thickness of objects::
+@end menu
+
+@node Visibility and color of objects
+@subsection Visibility and color of objects
+
+In the educational use of music we might wish to print a score
+with certain elements omitted as an exercise for the student,
+who is required to supply them. As a simple example,
+let us suppose the exercise is to supply the missing bar lines
+in a piece of music. But the bar lines are normally inserted
+automatically. How do we prevent them printing?
+
+Before we tackle this, let us remember that object properties are
+grouped in what are called @emph{interfaces} -- see @ref{Properties
+found in interfaces}. This is simply to group together those
+properties that may be used together to tweak a graphical object -- if
+one of them is allowed for an object, so are the others. Some objects
+then use the properties in some interfaces, others use them from other
+interfaces. The interfaces which contain the properties used by a
+particular grob are listed in the IR at the bottom of the page
+describing that grob, and those properties may be viewed by looking at
+those interfaces.
+
+We explained how to find information about grobs in @ref{Properties of
+layout objects}. Using the same approach, we go to the IR to find the
+layout object which prints bar lines. Going via @emph{Backend} and
+@emph{All layout objects} we find there is a layout object called
+@code{BarLine}. Its properties include two that control its
+visibility: @code{break-visibility} and @code{stencil}. Barline also
+supports a number of interfaces, including the @code{grob-interface},
+where we find the @code{transparent} and the @code{color} properties.
+All of these can affect the visibility of bar lines (and, of course,
+by extension, many other layout objects too.) Let's consider each of
+these in turn.
+
+@subheading stencil
+
+@cindex stencil property
+
+This property controls the appearance of the bar lines by specifying
+the symbol (glyph) which should be printed. In common
+with many other properties, it can be set to print nothing by
+setting its value to @code{#f}. Let's try it, as before, omitting
+the implied Context, @code{Voice}:
+
+@cindex BarLine, example of overriding
+@cindex stencil property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override BarLine.stencil = ##f
+ c4 b8 c d16 c d8 |
+ g,8 a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+The bar lines are still printed. What is wrong? Go back to the IR
+and look again at the page giving the properties of BarLine. At the
+top of the page it says @qq{Barline objects are created by:
+Bar_engraver}. Go to the @code{Bar_engraver} page. At the bottom it
+gives a list of Contexts in which the bar engraver operates. All of
+them are of the type @code{Staff}, so the reason the @code{\override}
+command failed to work as expected is because @code{Barline} is not in
+the default @code{Voice} context. If the context is specified
+incorrectly, the command simply does not work. No error message is
+produced, and nothing is logged in the log file. Let's try correcting
+it by adding the correct context:
+
+@cindex BarLine, example of overriding
+@cindex stencil property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.BarLine.stencil = ##f
+ c4 b8 c d16 c d8 |
+ g,8 a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+Now the bar lines have vanished.
+
+Note, though, that setting the @code{stencil} property to @code{#f}
+will cause errors when the dimensions of the object are required for
+correct processing. For example, errors will be generated if the
+@code{stencil} property of the @code{NoteHead} object is set to
+@code{#f}. If this is the case, you can instead use the
+@code{point-stencil} function, which sets the stencil to a object
+with zero size:
+
+@lilypond[quote,verbatim,relative=2]
+{
+ c4 c
+ \once \override NoteHead.stencil = #point-stencil
+ c4 c
+}
+@end lilypond
+
+@subheading break-visibility
+
+@cindex break-visibility property
+
+We see from the @code{BarLine} properties in the IR that the
+@code{break-visibility} property requires a vector of three booleans.
+These control respectively whether bar lines are printed at the end of
+a line, in the middle of lines, and at the beginning of lines. For
+our example we want all bar lines to be suppressed, so the value we
+need is @code{'#(#f #f #f)}. Let's try that, remembering to include
+the @code{Staff} context. Note also that in writing this value we
+have @code{#'#} before the opening bracket. The @code{'#} is required
+as part of the value to introduce a vector, and the first@tie{}@code{#} is
+required, as always, to precede the value itself in the
+@code{\override} command.
+
+@cindex BarLine, example of overriding
+@cindex break-visibility property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.BarLine.break-visibility = #'#(#f #f #f)
+ c4 b8 c d16 c d8 |
+ g,8 a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+And we see this too removes all the bar lines.
+
+@subheading transparent
+
+@cindex transparent property
+@cindex transparency
+
+We see from the properties specified in the @code{grob-interface} page
+in the IR that the @code{transparent} property is a boolean. This
+should be set to @code{#t} to make the grob transparent. In this next
+example let us make the time signature invisible rather than the bar
+lines. To do this we need to find the grob name for the time
+signature. Back to the @q{All layout objects} page in the IR to find
+the properties of the @code{TimeSignature} layout object. This is
+produced by the @code{Time_signature_engraver} which you can check
+also lives in the @code{Staff} context and also supports the
+@code{grob-interface}. So the command to make the time signature
+transparent is:
+
+@cindex TimeSignature, example of overriding
+@cindex transparent property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.TimeSignature.transparent = ##t
+ c4 b8 c d16 c d8 |
+ g,8 a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+@noindent
+The time signature is gone, but this command leaves a gap where
+the time signature should be. Maybe this is what is wanted for
+an exercise for the student to fill it in, but in other
+circumstances a gap might be undesirable. To remove it, the
+stencil for the time signature should be set to @code{#f}
+instead:
+
+@cindex TimeSignature, example of overriding
+@cindex stencil property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.TimeSignature.stencil = ##f
+ c4 b8 c d16 c d8 |
+ g,8 a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+@noindent
+and the difference is obvious: setting the stencil to @code{#f}
+removes the object entirely; making the object @code{transparent}
+leaves it where it is, but makes it invisible.
+
+@subheading color
+
+@cindex color property
+
+Finally let us try making the bar lines invisible by coloring
+them white. (There is a difficulty with this in that the
+white bar line may or may not blank out the staff lines where
+they cross. You may see in some of the examples below that this
+happens unpredictably. The details of why this is so and how to
+control it are covered in @ruser{Painting objects white}. But at
+the moment we are learning about color, so please just accept this
+limitation for now.)
+
+The @code{grob-interface} specifies that the
+color property value is a list, but there is no
+explanation of what that list should be. The list it
+requires is actually a list of values in internal units,
+but, to avoid having to know what these are, several ways
+are provided to specify colors. The first way is to use one
+of the @q{normal} colors listed in the first table in
+@ruser{List of colors}. To set the bar lines to white
+we write:
+
+@cindex BarLine, example of overriding
+@cindex color property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.BarLine.color = #white
+ c4 b8 c d16 c d8 |
+ g,8 a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+@noindent
+and again, we see the bar lines are not visible. Note that
+@emph{white} is not preceded by an apostrophe -- it is not
+a symbol, but a @emph{function}. When called, it provides
+the list of internal values required to set the color to
+white. The other colors in the normal list are functions
+too. To convince yourself this is working you might like
+to change the color to one of the other functions in the
+list.
+
+@cindex color, X11
+@cindex X11 colors
+
+@funindex x11-color
+
+The second way of changing the color is to use the list of
+X11 color names in the second list in @ruser{List of colors}.
+However, these must be preceded by another function, which
+converts X11 color names into the list of internal values,
+@code{x11-color}, like this:
+
+@cindex BarLine, example of overriding
+@cindex color property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.BarLine.color = #(x11-color 'white)
+ c4 b8 c d16 c d8 |
+ g,8 a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+@noindent
+Note that in this case the function @code{x11-color} takes
+a symbol as an argument, so the symbol must be preceded by
+an apostrophe and the two enclosed in brackets.
+
+@cindex rgb colors
+@cindex color, rgb
+
+@funindex rgb-color
+
+There is yet a third function, one which converts RGB values into
+internal colors -- the @code{rgb-color} function. This takes
+three arguments giving the intensities of the red, green and
+blue colors. These take values in the range 0 to 1. So to
+set the color to red the value should be @code{(rgb-color 1 0 0)}
+and to white it should be @code{(rgb-color 1 1 1)}:
+
+@cindex BarLine, example of overriding
+@cindex color property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.BarLine.color = #(rgb-color 1 1 1)
+ c4 b8 c d16 c d8 |
+ g,8 a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+Finally, there is also a grey scale available as part of the
+X11 set of colors. These range from black, @code{'grey0},
+to white, @code{'grey100}, in steps of 1. Let's illustrate
+this by setting all the layout objects in our example to
+various shades of grey:
+
+@cindex StaffSymbol, example of overriding
+@cindex TimeSignature, example of overriding
+@cindex Clef, example of overriding
+@cindex NoteHead, example of overriding
+@cindex Stem, example of overriding
+@cindex BarLine, example of overriding
+@cindex color property, example
+@cindex x11-color, example of using
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+ \time 12/16
+ \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+ \override Staff.TimeSignature.color = #(x11-color 'grey60)
+ \override Staff.Clef.color = #(x11-color 'grey60)
+ \override Voice.NoteHead.color = #(x11-color 'grey85)
+ \override Voice.Stem.color = #(x11-color 'grey85)
+ \override Staff.BarLine.color = #(x11-color 'grey10)
+ c4 b8 c d16 c d8 |
+ g,8 a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+@noindent
+Note the contexts associated with each of the layout objects.
+It is important to get these right, or the commands will not
+work! Remember, the context is the one in which the appropriate
+engraver is placed. The default context for engravers can be
+found by starting from the layout object, going from there to
+the engraver which produces it, and on the engraver page in the
+IR it tells you in which context the engraver will normally be
+found.
+
+
+@node Size of objects
+@subsection Size of objects
+
+@cindex changing size of objects
+@cindex size of objects
+@cindex objects, size of
+@cindex objects, changing size of
+
+Let us begin by looking again at the earlier example
+(see @ref{Nesting music expressions}) which showed
+how to introduce a new temporary staff, as in an @rglos{ossia}.
+
+@cindex alignAboveContext property, example
+@cindex @code{\with}, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+ \relative g' {
+ r4 g8 g c4 c8 d |
+ e4 r8
+ <<
+ { f8 c c }
+ \new Staff \with {
+ alignAboveContext = #"main" }
+ { f8 f c }
+ >>
+ r4 |
+ }
+}
+@end lilypond
+
+Ossia are normally written without clef and time signature, and
+are usually printed slightly smaller than the main staff. We
+already know now how to remove the clef and time signature --
+we simply set the stencil of each to @code{#f}, as follows:
+
+@cindex alignAboveContext property, example
+@cindex @code{\with}, example
+@cindex stencil property, example
+@cindex Clef, example of overriding
+@cindex TimeSignature, example of overriding
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+ \relative g' {
+ r4 g8 g c4 c8 d |
+ e4 r8
+ <<
+ { f8 c c }
+ \new Staff \with {
+ alignAboveContext = #"main"
+ }
+ {
+ \override Staff.Clef.stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
+ { f8 f c }
+ }
+ >>
+ r4 |
+ }
+}
+@end lilypond
+
+@noindent
+where the extra pair of braces after the @code{\with} clause are
+required to ensure the enclosed overrides and music are applied
+to the ossia staff.
+
+But what is the difference between modifying the staff context by
+using @code{\with} and modifying the stencils of the clef and the
+time signature with \override? The main difference is that
+changes made in a @code{\with} clause are made at the time the
+context is created, and remain in force as the @strong{default}
+values for the duration of that context, whereas
+@code{\set} or @code{\override} commands embedded in the
+music are dynamic -- they make changes synchronized with
+a particular point in the music. If changes are unset or
+reverted using @code{\unset} or @code{\revert} they return to
+their default values, which will be the ones set in the
+@code{\with} clause, or if none have been set there, the normal
+default values.
+
+Some context properties can be modified only in @code{\with} clauses.
+These are those properties which cannot sensibly be changed after the
+context has been created. @code{alignAboveContext} and its partner,
+@code{alignBelowContext}, are two such properties -- once the staff
+has been created its alignment is decided and it would make no sense
+to try to change it later.
+
+The default values of layout object properties can also be set
+in @code{\with} clauses. Simply use the normal @code{\override}
+command leaving out the context name, since this is unambiguously
+defined as the context which the @code{\with} clause is modifying.
+If fact, an error will be generated if a context is specified
+in this location.
+
+So we could replace the example above with
+
+@cindex alignAboveContext property, example
+@cindex @code{\with}, example
+@cindex Clef, example of overriding
+@cindex TimeSignature, example of overriding
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+ \relative g' {
+ r4 g8 g c4 c8 d |
+ e4 r8
+ <<
+ { f8 c c }
+ \new Staff \with {
+ alignAboveContext = #"main"
+ % Don't print clefs in this staff
+ \override Clef.stencil = ##f
+ % Don't print time signatures in this staff
+ \override TimeSignature.stencil = ##f
+ }
+ { f8 f c }
+ >>
+ r4 |
+ }
+}
+@end lilypond
+
+Finally we come to changing the size of layout objects.
+
+Some layout objects are created as glyphs selected from a typeface
+font. These include note heads, accidentals, markup, clefs, time
+signatures, dynamics and lyrics. Their size is changed by modifying
+the @code{font-size} property, as we shall shortly see. Other layout
+objects such as slurs and ties -- in general, spanner objects -- are
+drawn individually, so there is no @code{font-size} associated with
+them. These objects generally derive their size from the objects to
+which they are attached, so usually there is no need to change their
+size manually. Still other properties such as the length of stems and
+bar lines, thickness of beams and other lines, and the separation of
+staff lines all need to be modified in special ways.
+
+Returning to the ossia example, let us first change the font-size.
+We can do this in two ways. We can either change the size of the
+fonts of each object type, like @code{NoteHead}s with commands
+like
+
+@example
+\override NoteHead.font-size = #-2
+@end example
+
+or we can change the size of all fonts by setting a special
+property, @code{fontSize}, using @code{\set}, or by including
+it in a @code{\with} clause (but without the @code{\set}).
+
+@example
+\set fontSize = #-2
+@end example
+
+Both of these statements would cause the font size to be reduced
+by 2 steps from its previous value, where each
+step reduces or increases the size by approximately 12%.
+
+Let's try it in our ossia example:
+
+@cindex alignAboveContext property, example
+@cindex @code{\with}, example
+@cindex Clef, example of overriding
+@cindex TimeSignature, example of overriding
+@cindex fontSize property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+ \relative g' {
+ r4 g8 g c4 c8 d |
+ e4 r8
+ <<
+ { f8 c c }
+ \new Staff \with {
+ alignAboveContext = #"main"
+ \override Clef.stencil = ##f
+ \override TimeSignature.stencil = ##f
+ % Reduce all font sizes by ~24%
+ fontSize = #-2
+ }
+ { f8 f c }
+ >>
+ r4 |
+ }
+}
+@end lilypond
+
+This is still not quite right. The note heads and flags are
+smaller, but the stems are too long in proportion and the
+staff lines are spaced too widely apart. These need to be
+scaled down in proportion to the font reduction. The next
+sub-section discusses how this is done.
+
+@node Length and thickness of objects
+@subsection Length and thickness of objects
+
+@cindex distances
+@cindex thickness
+@cindex length
+@cindex magstep
+@cindex size, changing
+@cindex stem length, changing
+@cindex staff line spacing, changing
+
+Distances and lengths in LilyPond are generally measured in
+staff-spaces, the distance between adjacent lines in the staff,
+(or occasionally half staff spaces) while most @code{thickness}
+properties are measured in units of an internal property called
+@code{line-thickness.} For example, by default, the lines of
+hairpins are given a thickness of 1 unit of @code{line-thickness},
+while the @code{thickness} of a note stem is 1.3. Note, though,
+that some thickness properties are different; for example, the
+thickness of beams is controlled by the value of the
+@code{beam-thickness} property, which is measured in staff-spaces.
+
+So how are lengths to be scaled in proportion to the font size?
+This can be done with the help of a special function called
+@code{magstep} provided for exactly this purpose. It takes
+one argument, the change in font size (#-2 in the example above)
+and returns a scaling factor suitable for reducing other
+objects in proportion. It is used like this:
+
+@cindex alignAboveContext property, example
+@cindex @code{\with}, example
+@cindex Clef, example of overriding
+@cindex TimeSignature, example of overriding
+@cindex fontSize property, example
+@cindex StaffSymbol, example of overriding
+@cindex magstep function, example of using
+@cindex staff-space property, example
+@cindex stencil property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+ \relative g' {
+ r4 g8 g c4 c8 d |
+ e4 r8
+ <<
+ { f8 c c }
+ \new Staff \with {
+ alignAboveContext = #"main"
+ \override Clef.stencil = ##f
+ \override TimeSignature.stencil = ##f
+ fontSize = #-2
+ % Reduce stem length and line spacing to match
+ \override StaffSymbol.staff-space = #(magstep -2)
+ }
+ { f8 f c }
+ >>
+ r4 |
+ }
+}
+@end lilypond
+
+@noindent
+Since the length of stems and many other length-related properties are
+always calculated relative to the value of the @code{staff-space}
+property these are automatically scaled down in length too. Note that
+this affects only the vertical scale of the ossia -- the horizontal
+scale is determined by the layout of the main music in order to remain
+synchronized with it, so it is not affected by any of these changes in
+size. Of course, if the scale of all the main music were changed in
+this way then the horizontal spacing would be affected. This is
+discussed later in the layout section.
+
+This, then, completes the creation of an ossia. The sizes and
+lengths of all other objects may be modified in analogous ways.
+
+For small changes in scale, as in the example above, the
+thickness of the various drawn lines such as bar lines,
+beams, hairpins, slurs, etc does not usually require global
+adjustment. If the thickness of any particular layout object
+needs to be adjusted this can be best achieved by overriding its
+@code{thickness} property. An example of changing the thickness
+of slurs was shown above in @ref{Properties of layout objects}.
+The thickness of all drawn objects (i.e., those not produced
+from a font) may be changed in the same way.
+
+
+@node Placement of objects
+@section Placement of objects
+
+@menu
+* Automatic behavior::
+* Within-staff objects::
+* Outside-staff objects::
+@end menu
+
+
+@node Automatic behavior
+@subsection Automatic behavior
+
+@cindex within-staff objects
+@cindex outside-staff objects
+@cindex objects, within-staff
+@cindex objects, outside-staff
+
+There are some objects in musical notation that belong to
+the staff and there are other objects that should be
+placed outside the staff. These are called within-staff
+objects and outside-staff objects respectively.
+
+Within-staff objects are those that are located on the staff
+-- note heads, stems, accidentals, etc. The positions of
+these are usually fixed by the music itself -- they are
+vertically positioned on specific lines of the staff or are
+tied to other objects that are so positioned. Collisions of
+note heads, stems and accidentals in closely set chords are
+normally avoided automatically. There are commands and
+overrides which can modify this automatic behavior, as we
+shall shortly see.
+
+Objects belonging outside the staff include things such as
+rehearsal marks, text and dynamic markings. LilyPond's rule for
+the vertical placement of outside-staff objects is to place them
+as close to the staff as possible but not so close that they
+collide with any other object. LilyPond uses the
+@code{outside-staff-priority} property to determine the order in
+which the objects should be placed, as follows.
+
+First, LilyPond places all the within-staff objects.
+Then it sorts the outside-staff objects according to their
+@code{outside-staff-priority}. The outside-staff objects are
+taken one by one, beginning with the object with the lowest
+@code{outside-staff-priority}, and placed so that they do not
+collide with any objects that have already been placed. That is,
+if two outside-staff grobs are competing for the same space, the
+one with the lower @code{outside-staff-priority} will be placed
+closer to the staff. If two objects have the same
+@code{outside-staff-priority} the one encountered first will be
+placed closer to the staff.
+
+In the following example all the markup texts have the same
+priority (since it is not explicitly set). Note that @q{Text3}
+is automatically positioned close to the staff again, nestling
+under @q{Text2}.
+
+@cindex markup example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+c2^"Text1"
+c2^"Text2" |
+c2^"Text3"
+c2^"Text4" |
+@end lilypond
+
+Staves are also positioned, by default, as closely together as
+possible (subject to a minimum separation). If notes project
+a long way towards an adjacent staff they will force the
+staves further apart only if an overlap of the notation
+would otherwise occur. The following example demonstrates
+this @q{nestling} of the notes on adjacent staves:
+
+@lilypond[quote,ragged-right,verbatim]
+<<
+ \new Staff {
+ \relative c' { c4 a, }
+ }
+ \new Staff {
+ \relative c'''' { c4 a, }
+ }
+>>
+@end lilypond
+
+
+@node Within-staff objects
+@subsection Within-staff objects
+
+We have already seen how the commands @code{\voiceXXX} affect the
+direction of slurs, ties, fingering and everything else which depends on
+the direction of the stems -- see @ref{Explicitly instantiating voices}.
+These commands are essential when writing polyphonic music to permit
+interweaving melodic lines to be distinguished. But occasionally it may
+be necessary to override this automatic behavior. This can be done for
+whole sections of music or even for an individual note. The property
+which controls this behavior is the @code{direction} property of each
+layout object. We first explain what this does, and then introduce a
+number of ready-made commands which avoid your having to code explicit
+overrides for the more common modifications.
+
+Some layout objects like slurs and ties curve, bend or point
+either up or down; others like stems and flags also move to
+right or left when they point up or down. This is controlled
+automatically when @code{direction} is set.
+
+@cindex down
+@cindex up
+@cindex center
+@cindex neutral
+
+The following example shows in bar 1 the default behavior of stems,
+with those on high notes pointing down and those on low notes pointing
+up, followed by four notes with all stems forced down, four notes with
+all stems forced up, and finally four notes reverted back to the
+default behavior.
+
+@cindex Stem, example of overriding
+@cindex direction property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+a4 g c a |
+\override Stem.direction = #DOWN
+a4 g c a |
+\override Stem.direction = #UP
+a4 g c a |
+\revert Stem.direction
+a4 g c a |
+@end lilypond
+
+Here we use the constants @code{DOWN} and @code{UP}.
+These have the values @w{@code{-1}} and @code{+1} respectively, and
+these numerical values may be used instead. The value @code{0}
+may also be used in some cases. It is simply treated as meaning
+@code{UP} for stems, but for some objects it means @q{center}.
+There is a constant, @code{CENTER} which has the value @code{0}.
+
+However, these explicit overrides are not usually used, as there are
+simpler equivalent predefined commands available. Here is a table of
+the commonest. The meaning of each is stated where it is not obvious.
+
+@multitable @columnfractions .2 .2 .25 .35
+@headitem Down/Left
+ @tab Up/Right
+ @tab Revert
+ @tab Effect
+@item @code{\arpeggioArrowDown}
+ @tab @code{\arpeggioArrowUp}
+ @tab @code{\arpeggioNormal}
+ @tab Arrow is at bottom, at top, or no arrow
+@item @code{\dotsDown}
+ @tab @code{\dotsUp}
+ @tab @code{\dotsNeutral}
+ @tab Direction of movement to avoid staff lines
+@item @code{\dynamicDown}
+ @tab @code{\dynamicUp}
+ @tab @code{\dynamicNeutral}
+ @tab
+@item @code{\phrasingSlurDown}
+ @tab @code{\phrasingSlurUp}
+ @tab @code{\phrasingSlurNeutral}
+ @tab Note: distinct from slur commands
+@item @code{\slurDown}
+ @tab @code{\slurUp}
+ @tab @code{\slurNeutral}
+ @tab
+@item @code{\stemDown}
+ @tab @code{\stemUp}
+ @tab @code{\stemNeutral}
+ @tab
+@item @code{\textSpannerDown}
+ @tab @code{\textSpannerUp}
+ @tab @code{\textSpannerNeutral}
+ @tab Text entered as spanner is below/above staff
+@item @code{\tieDown}
+ @tab @code{\tieUp}
+ @tab @code{\tieNeutral}
+ @tab
+@item @code{\tupletDown}
+ @tab @code{\tupletUp}
+ @tab @code{\tupletNeutral}
+ @tab Tuplets are below/above notes
+@end multitable
+
+Note that these predefined commands may @strong{not} be
+preceded by @code{\once}. If you wish to limit the
+effect to a single note you must either use the equivalent
+@code{\once \override} command or use the predefined command
+followed after the affected note by the corresponding
+@code{\xxxNeutral} command.
+
+@unnumberedsubsubsec Fingering
+
+@cindex fingering, placement
+@cindex fingering, chords
+
+The placement of fingering on single notes can also be controlled
+by the @code{direction} property, but changing @code{direction}
+has no effect on chords. As we shall see, there are special
+commands which allow the fingering of individual notes
+of chords to be controlled, with the fingering being placed
+above, below, to the left or to the right of each note.
+
+First, here's the effect of @code{direction} on the fingering
+attached to single notes. The first bar shows the default
+behaviour, and the following two bars shows the effect of
+specifying @code{DOWN} and @code{UP}:
+
+@cindex Fingering, example of overriding
+@cindex direction property, example
+
+@lilypond[quote,verbatim,relative=2]
+c4-5 a-3 f-1 c'-5 |
+\override Fingering.direction = #DOWN
+c4-5 a-3 f-1 c'-5 |
+\override Fingering.direction = #UP
+c4-5 a-3 f-1 c'-5 |
+@end lilypond
+
+However, overriding the @code{direction} property is not the
+easiest way of manually setting the fingering above or below
+the notes; using @code{_} or @code{^} instead of @code{-} before
+the fingering number is usually preferable. Here is the previous
+example using this method:
+
+@cindex fingering example
+
+@lilypond[quote,verbatim,relative=2]
+c4-5 a-3 f-1 c'-5 |
+c4_5 a_3 f_1 c'_5 |
+c4^5 a^3 f^1 c'^5 |
+@end lilypond
+
+The @code{direction} property is ignored for chords, but the
+directional prefixes, @code{_} and @code{^} do work. By default,
+the fingering is automatically placed both above and below the
+notes of a chord, as shown:
+
+@cindex fingering example
+
+@lilypond[quote,verbatim,relative=2]
+<c-5 g-3>4
+<c-5 g-3 e-2>4
+<c-5 g-3 e-2 c-1>4
+@end lilypond
+
+@noindent
+but this may be overridden to manually force all or any of the
+individual fingering numbers above or below:
+
+@cindex fingering example
+
+@lilypond[quote,verbatim,relative=2]
+<c-5 g-3 e-2 c-1>4
+<c^5 g_3 e_2 c_1>4
+<c^5 g^3 e^2 c_1>4
+@end lilypond
+
+Even greater control over the placement of fingering of the
+individual notes in a chord is possible by using the
+@code{\set fingeringOrientations} command. The format of this
+command is:
+
+@example
+@code{\set fingeringOrientations = #'([up] [left/right] [down])}
+@end example
+
+@noindent
+@code{\set} is used because @code{fingeringOrientations} is a
+property of the @code{Voice} context, created and used by the
+@code{New_fingering_engraver}.
+
+The property may be set to a list of one to three values.
+It controls whether fingerings may be placed above (if
+@code{up} appears in the list), below (if @code{down} appears),
+to the left (if @code{left} appears, or to the right
+(if @code{right} appears). Conversely, if a location is not
+listed, no fingering is placed there. LilyPond takes these
+constraints and works out the best placement for the fingering
+of the notes of the following chords. Note that @code{left} and
+@code{right} are mutually exclusive -- fingering may be placed
+only on one side or the other, not both.
+
+@warning{To control the placement of the fingering of a single
+note using this command it is necessary to write it as a single
+note chord by placing angle brackets round it.}
+
+Here are a few examples:
+
+@cindex fingering example
+@cindex @code{\set}, example of using
+@cindex fingeringOrientations property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+\set fingeringOrientations = #'(left)
+<f-2>4
+<c-1 e-2 g-3 b-5>4
+\set fingeringOrientations = #'(left)
+<f-2>4
+<c-1 e-2 g-3 b-5>4 |
+\set fingeringOrientations = #'(up left down)
+<f-2>4
+<c-1 e-2 g-3 b-5>4
+\set fingeringOrientations = #'(up left)
+<f-2>4
+<c-1 e-2 g-3 b-5>4 |
+\set fingeringOrientations = #'(right)
+<f-2>4
+<c-1 e-2 g-3 b-5>4
+@end lilypond
+
+@noindent
+If the fingering seems a little crowded the @code{font-size}
+could be reduced. The default value can be seen from the
+@code{Fingering} object in the IR to be @w{@code{-5}}, so let's
+try @w{@code{-7}}:
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+\override Fingering.font-size = #-7
+\set fingeringOrientations = #'(left)
+<f-2>4
+<c-1 e-2 g-3 b-5>4
+\set fingeringOrientations = #'(left)
+<f-2>4
+<c-1 e-2 g-3 b-5>4 |
+\set fingeringOrientations = #'(up left down)
+<f-2>4
+<c-1 e-2 g-3 b-5>4
+\set fingeringOrientations = #'(up left)
+<f-2>4
+<c-1 e-2 g-3 b-5>4 |
+\set fingeringOrientations = #'(right)
+<f-2>4
+<c-1 e-2 g-3 b-5>4
+@end lilypond
+
+@node Outside-staff objects
+@subsection Outside-staff objects
+
+Outside-staff objects are automatically placed to avoid collisions.
+Objects with the lower value of the @code{outside-staff-priority}
+property are placed nearer to the staff, and other outside-staff
+objects are then raised as far as necessary to avoid collisions.
+The @code{outside-staff-priority} is defined in the
+@code{grob-interface} and so is a property of all layout objects.
+By default it is set to @code{#f} for all within-staff objects,
+and to a numerical value appropriate to each outside-staff object
+when the object is created. The following table shows the default
+numerical values for some of the commonest outside-staff objects.
+
+@cindex spanners
+
+Note the unusual names for some of the objects: spanner objects
+are automatically created to control the vertical positioning of
+grobs which (might) start and end at different musical moments, so
+changing the @code{outside-staff-priority} of the underlying grob
+will have no effect. For example, changing
+@code{outside-staff-priority} of the @code{Hairpin} object will
+have no effect on the vertical positioning of hairpins -- you must
+change @code{outside-staff-priority} of the associated
+@code{DynamicLineSpanner} object instead. This override must be
+placed at the start of the spanner, which might include several
+linked hairpins and dynamics.
+
+@multitable @columnfractions .3 .3 .3
+@headitem Layout Object
+ @tab Priority
+ @tab Controls position of:
+@item @code{RehearsalMark}
+ @tab @code{1500}
+ @tab Rehearsal marks
+@item @code{MetronomeMark}
+ @tab @code{1000}
+ @tab Metronome marks
+@item @code{VoltaBracketSpanner}
+ @tab @code{600}
+ @tab Volta brackets
+@item @code{TextScript}
+ @tab @code{450}
+ @tab Markup text
+@item @code{MultiMeasureRestText}
+ @tab @code{450}
+ @tab Markup text over full-bar rests
+@item @code{OttavaBracket}
+ @tab @code{400}
+ @tab Ottava brackets
+@item @code{TextSpanner}
+ @tab @code{350}
+ @tab Text spanners
+@item @code{DynamicLineSpanner}
+ @tab @code{250}
+ @tab All dynamic markings
+@item @code{BarNumber}
+ @tab @code{ 100}
+ @tab Bar numbers
+@item @code{TrillSpanner}
+ @tab @code{50}
+ @tab Spanning trills
+@end multitable
+
+Here is an example showing the default placement of some of
+these.
+
+@cindex text spanner
+@cindex ottava bracket
+
+@funindex \startTextSpan
+@funindex startTextSpan
+@funindex \stopTextSpan
+@funindex stopTextSpan
+
+@cindex TextSpanner, example of overriding
+@cindex bound-details property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+% Set details for later Text Spanner
+\override TextSpanner.bound-details.left.text
+ = \markup { \small \bold Slower }
+% Place dynamics above staff
+\dynamicUp
+% Start Ottava Bracket
+\ottava #1
+c'4 \startTextSpan
+% Add Dynamic Text and hairpin
+c4\pp\<
+c4
+% Add Text Script
+c4^Text |
+c4 c
+% Add Dynamic Text and terminate hairpin
+c4\ff c \stopTextSpan |
+% Stop Ottava Bracket
+\ottava #0
+c,4 c c c |
+@end lilypond
+
+This example also shows how to create Text Spanners --
+text with extender lines above a section of music. The
+spanner extends from the @code{\startTextSpan} command to
+the @code{\stopTextSpan} command, and the format of the
+text is defined by the @code{\override TextSpanner} command.
+For more details see @ruser{Text spanners}.
+
+It also shows how ottava brackets are created.
+
+@cindex tweaking bar number placement
+@cindex bar numbers, tweaking placement
+@cindex tweaking metronome mark placement
+@cindex metronome mark, tweaking placement
+@cindex tweaking rehearsal mark placement
+@cindex rehearsal marks, tweaking placement
+
+If the default values of @code{outside-staff-priority} do not give you
+the placing you want, the priority of any of the objects may be
+overridden. Suppose we would like the ottava bracket to be placed
+below the text spanner in the example above. All we need to do is to
+look up the priority of @code{OttavaBracket} in the IR or in the
+tables above, and reduce it to a value lower than that of a
+@code{TextSpanner}, remembering that @code{OttavaBracket} is created
+in the @code{Staff} context:
+
+@cindex TextSpanner, example of overriding
+@cindex bound-details property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+% Set details for later Text Spanner
+\override TextSpanner.bound-details.left.text
+ = \markup { \small \bold Slower }
+% Place dynamics above staff
+\dynamicUp
+% Place following Ottava Bracket below Text Spanners
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
+% Start Ottava Bracket
+\ottava #1
+c'4 \startTextSpan
+% Add Dynamic Text
+c4\pp
+% Add Dynamic Line Spanner
+c4\<
+% Add Text Script
+c4^Text |
+c4 c
+% Add Dynamic Text
+c4\ff c \stopTextSpan |
+% Stop Ottava Bracket
+\ottava #0
+c,4 c c c |
+@end lilypond
+
+Note that some of these objects, in particular bar numbers,
+metronome marks and rehearsal marks, live by default in the
+@code{Score} context, so be sure to use the correct context
+when these are being overriden.
+
+@cindex slurs and outside-staff-priority
+@cindex slurs and articulations
+@cindex articulations and slurs
+
+Slurs by default are classed as within-staff objects, but
+they often appear above the staff if the notes to
+which they are attached are high on the staff. This can push
+outside-staff objects such as articulations too high, as the slur
+will be placed first. The @code{avoid-slur} property of the
+articulation can be set to @code{'inside} to bring the articulation
+inside the slur, but the @code{avoid-slur} property is effective
+only if the @code{outside-staff-priority} is also set to @code{#f}.
+Alternatively, the @code{outside-staff-priority} of the slur
+can be set to a numerical value to cause it to be placed along with
+other outside-staff objects according to that value. Here's an
+example showing the effect of the two methods:
+
+@lilypond[quote,verbatim,relative=2]
+c4( c^\markup { \tiny \sharp } d4.) c8 |
+c4(
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
+c4^\markup { \tiny \sharp } d4.) c8 |
+\once \override Slur.outside-staff-priority = #500
+c4( c^\markup { \tiny \sharp } d4.) c8 |
+@end lilypond
+
+Changing the @code{outside-staff-priority} can also be used to
+control the vertical placement of individual objects, although
+the results may not always be desirable. Suppose we would
+like @qq{Text3} to be placed above @qq{Text4} in the example
+under Automatic behavior, above (see @ref{Automatic behavior}).
+All we need to do is to look up the priority of @code{TextScript}
+in the IR or in the tables above, and increase the priority of
+@qq{Text3} to a higher value:
+
+@cindex TextScript, example of overriding
+@cindex outside-staff-priority property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+c2^"Text1"
+c2^"Text2" |
+\once \override TextScript.outside-staff-priority = #500
+c2^"Text3"
+c2^"Text4" |
+@end lilypond
+
+This certainly lifts @qq{Text3} above @qq{Text4} but it also lifts it
+above @qq{Text2}, and @qq{Text4} now drops down. Perhaps this is not
+so good. What we would really like to do is to position all the
+annotation at the same distance above the staff. To do this, we
+clearly will need to space the notes out horizontally to make more
+room for the text. This is done using the @code{textLengthOn}
+command.
+
+@subheading \textLengthOn
+
+@cindex notes, spreading out with text
+
+@funindex \textLengthOn
+@funindex textLengthOn
+@funindex \textLengthOff
+@funindex textLengthOff
+
+By default, text produced by markup takes up no horizontal space
+as far as laying out the music is concerned. The @code{\textLengthOn}
+command reverses this behavior, causing the notes to be spaced
+out as far as is necessary to accommodate the text:
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\textLengthOn % Cause notes to space out to accommodate text
+c2^"Text1"
+c2^"Text2" |
+c2^"Text3"
+c2^"Text4" |
+@end lilypond
+
+The command to revert to the default behavior is
+@code{\textLengthOff}. Remember @code{\once} only works with
+@code{\override}, @code{\set}, @code{\revert} or @code{\unset},
+so cannot be used with @code{\textLengthOn}.
+
+@cindex markup text, allowing collisions
+
+Markup text will also avoid notes which project above the staff.
+If this is not desired, the automatic displacement upwards may
+be turned off by setting the priority to @code{#f}. Here's an
+example to show how markup text interacts with such notes.
+
+@cindex TextScript, example of overriding
+@cindex outside-staff-priority property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+% This markup is short enough to fit without collision
+c2^"Tex" c'' |
+R1 |
+
+% This is too long to fit, so it is displaced upwards
+c,,2^"Text" c'' |
+R1 |
+
+% Turn off collision avoidance
+\once \override TextScript.outside-staff-priority = ##f
+c,,2^"Long Text " c'' |
+R1 |
+
+% Turn off collision avoidance
+\once \override TextScript.outside-staff-priority = ##f
+\textLengthOn % and turn on textLengthOn
+c,,2^"Long Text " % Spaces at end are honored
+c''2 |
+@end lilypond
+
+
+@subheading Dynamics
+
+@cindex tweaking dynamics placement
+@cindex dynamics, tweaking placement
+
+Dynamic markings will normally be positioned beneath the
+staff, but may be positioned above with the @code{\dynamicUp}
+command. They will be positioned vertically relative to the
+note to which they are attached, and will float below (or above)
+all within-staff objects such as phrasing slurs and bar numbers.
+This can give quite acceptable results, as this example
+shows:
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+\clef "bass"
+\key aes \major
+\time 9/8
+\dynamicUp
+bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
+ees,2.~\)\mf ees4 r8 |
+@end lilypond
+
+However, if the notes and attached dynamics are close
+together the automatic placement will avoid collisions
+by displacing later dynamic markings further away, but this may
+not be the optimum placement, as this rather artificial example
+shows:
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\dynamicUp
+a4\f b\mf c\mp b\p
+@end lilypond
+
+@noindent
+Should a similar situation arise in @q{real} music, it may be
+preferable to space out the notes a little further, so the dynamic
+markings can all fit at the same vertical distance from the staff. We
+were able to do this for markup text by using the @code{\textLengthOn}
+command, but there is no equivalent command for dynamic marks. So we
+shall have to work out how to do this using @code{\override} commands.
+
+@subheading Grob sizing
+
+@cindex grob sizing
+@cindex sizing grobs
+
+First we must learn how grobs are sized. All grobs have a
+reference point defined within them which is used to position
+them relative to their parent object. This point in the grob
+is then positioned at a horizontal distance, @code{X-offset},
+and at a vertical distance, @code{Y-offset}, from its parent.
+The horizontal extent of the object is given by a pair of
+numbers, @code{X-extent}, which say where the left and right
+edges are relative to the reference point. The vertical extent
+is similarly defined by a pair of numbers, @code{Y-extent}.
+These are properties of all grobs which support the
+@code{grob-interface}.
+
+@cindex @code{extra-spacing-width}
+
+By default, outside-staff objects are given a width of zero so
+that they may overlap in the horizontal direction. This is done
+by the trick of adding infinity to the leftmost extent and
+minus infinity to the rightmost extent by setting the
+@code{extra-spacing-width} to @code{'(+inf.0 . -inf.0)}. So
+to ensure they do not overlap in the horizontal direction we
+must override this value of @code{extra-spacing-width} to
+@code{'(0 . 0)} so the true width shines through. This is
+the command to do this for dynamic text:
+
+@example
+\override DynamicText.extra-spacing-width = #'(0 . 0)
+@end example
+
+@noindent
+Let's see if this works in our previous example:
+
+@cindex DynamicText, example of overriding
+@cindex extra-spacing-width property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\dynamicUp
+\override DynamicText.extra-spacing-width = #'(0 . 0)
+a4\f b\mf c\mp b\p |
+@end lilypond
+
+@noindent
+Well, it has certainly stopped the dynamic marks being
+displaced, but two problems remain. The marks should be
+spaced a little further apart and it would be better
+if they were all the same distance from the staff.
+We can solve the first problem easily. Instead of making
+the @code{extra-spacing-width} zero we could add a little
+more to it. The units are the space between two staff
+lines, so moving the left edge half a unit to the left and the
+right edge half a unit to the right should do it:
+
+@cindex DynamicText, example of overriding
+@cindex extra-spacing-width property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\dynamicUp
+% Extend width by 1 staff space
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
+a4\f b\mf c\mp b\p
+@end lilypond
+
+@noindent
+This looks better, but maybe we would prefer the dynamic marks
+to be aligned along the same baseline rather than going up and
+down with the notes. The property to do this is
+@code{staff-padding} which is covered in the following section.
+
+
+@node Collisions of objects
+@section Collisions of objects
+
+@menu
+* Moving objects::
+* Fixing overlapping notation::
+* Real music example::
+@end menu
+
+@node Moving objects
+@subsection Moving objects
+
+@cindex moving overlapping objects
+@cindex moving colliding objects
+@cindex moving colliding grobs
+@cindex objects, moving colliding
+@cindex grobs, moving colliding
+
+This may come as a surprise, but LilyPond is not perfect. Some
+notation elements can overlap. This is unfortunate, but in fact
+rather rare. Usually the need to move objects is for clarity or
+aesthetic reasons -- they would look better with a little more
+or a little less space around them.
+
+There are three main approaches to resolving overlapping
+notation. They should be considered in the following order:
+
+@enumerate
+@item
+The @strong{direction} of one of the overlapping objects may
+be changed using the predefined commands listed above for
+within-staff objects (see @ref{Within-staff objects}).
+Stems, slurs, beams, ties, dynamics, text and tuplets may be
+repositioned easily in this way. The limitation is that you
+have a choice of only two positions, and neither may be
+suitable.
+
+@item
+The @strong{object properties}, which LilyPond uses when positioning
+layout objects, may be modified using @code{\override}. The
+advantages of making changes to this type of property are (a) that
+some other objects will be moved automatically if necessary to make
+room and (b) the single override can apply to all instances of the
+same type of object. Such properties include:
+
+@itemize
+
+@item
+@code{direction}
+
+This has already been covered in some detail -- see
+@ref{Within-staff objects}.
+
+@item
+@code{padding}, @code{right-padding}, @code{staff-padding}
+
+@cindex padding
+@cindex padding property
+@cindex right-padding property
+@cindex staff-padding property
+
+As an object is being positioned the value of its @code{padding}
+property specifies the gap that must be left between itself and the
+nearest edge of the object against which it is being positioned. Note
+that it is the @code{padding} value of the object @strong{being
+placed} that is used; the @code{padding} value of the object which is
+already placed is ignored. Gaps specified by @code{padding} can be
+applied to all objects which support the
+@code{side-position-interface}.
+
+Instead of @code{padding}, the placement of groups of accidentals
+is controlled by @code{right-padding}. This property is to be found
+in the @code{AccidentalPlacement} object which, note, lives in the
+@strong{Staff} context. In the typesetting process the note heads
+are typeset first and then the accidentals, if any, are added to the
+left of the note heads using the @code{right-padding} property to determine
+the separation from the note heads and between individual accidentals.
+So only the @code{right-padding} property of the @code{AccidentalPlacement}
+object has any effect on the placement of the accidentals.
+
+The @code{staff-padding} property is closely related to the
+@code{padding} property: @code{padding} controls the minimum amount of
+space between any object which supports the
+@code{side-position-interface} and the nearest other object (generally
+the note or the staff lines); @code{staff-padding} applies only to
+those objects which are always set outside the staff -- it controls
+the minimum amount of space that should be inserted between that
+object and the staff. Note that @code{staff-padding} has no effect on
+objects which are positioned relative to the note rather than the
+staff, even though it may be overridden without error for such objects
+-- it is simply ignored.
+
+To discover which padding property is required for the object you wish
+to reposition, you need to return to the IR and look up the object's
+properties. Be aware that the padding properties might not be located
+in the obvious object, so look in objects that appear to be related.
+
+All padding values are measured in staff spaces. For most
+objects, this value is set by default to be around 1.0 or less
+(it varies with each object). It may be overridden if a larger
+(or smaller) gap is required.
+
+@item
+@code{self-alignment-X}
+
+@cindex self-alignment-X property
+
+This property can be used to align the object to the left, to
+the right, or to center it with respect to the parent object's
+reference point. It may be used with all objects which support
+the @code{self-alignment-interface}. In general these are objects
+that contain text. The values are @code{LEFT}, @code{RIGHT}
+or @code{CENTER}. Alternatively, a numerical value between
+@w{@code{-1}} and @code{+1} may be specified, where @w{@code{-1}} is
+left-aligned, @code{+1} is right-aligned, and numbers in between
+move the text progressively from left-aligned to right-aligned.
+Numerical values greater than @code{1} may be specified to move
+the text even further to the left, or less than @w{@code{-1}} to
+move the text even further to the right. A change of @code{1}
+in the value corresponds to a movement of half the text's length.
+
+@item
+@code{extra-spacing-width}
+
+@cindex extra-spacing-width property
+
+This property is available for all objects which support the
+@code{item-interface}. It takes two numbers, the first is added
+to the leftmost extent and the second is added to the rightmost
+extent. Negative numbers move the edge to the left, positive to
+the right, so to widen an object the first number must be negative,
+the second positive. Note that not all objects honor both
+numbers. For example, the @code{Accidental} object only takes
+notice of the first (left edge) number.
+
+@item
+@code{staff-position}
+
+@cindex staff-position property
+
+@code{staff-position} is a property of the
+@code{staff-symbol-referencer-interface}, which is supported by
+objects which are positioned relative to the staff. It specifies
+the vertical position of the object relative to the center line
+of the staff in half staff-spaces. It is useful in resolving
+collisions between layout objects like multi-measure rests, ties
+and notes in different voices.
+
+@item
+@code{force-hshift}
+
+@cindex force-hshift property
+
+Closely spaced notes in a chord, or notes occurring at the same
+time in different voices, are arranged in two, occasionally more,
+columns to prevent the note heads overlapping. These are called
+note columns, and an object called @code{NoteColumn} is created
+to lay out the notes in that column.
+
+The @code{force-hshift} property is a property of a @code{NoteColumn}
+(actually of the @code{note-column-interface}). Changing it permits a
+note column to be moved in units appropriate to a note column,
+viz. the note head width of the first voice note. It should be used
+in complex situations where the normal @code{\shiftOn} commands (see
+@ref{Explicitly instantiating voices}) do not resolve the note
+conflict. It is preferable to the @code{extra-offset} property for
+this purpose as there is no need to work out the distance in
+staff-spaces, and moving the notes into or out of a @code{NoteColumn}
+affects other actions such as merging note heads.
+
+@end itemize
+
+@item
+Finally, when all else fails, objects may be manually repositioned
+relative to the staff center line vertically, or by displacing them by
+any distance to a new position. The disadvantages are that the
+correct values for the repositioning have to be worked out, often by
+trial and error, for every object individually, and, because the
+movement is done after LilyPond has placed all other objects, the user
+is responsible for avoiding any collisions that might ensue. But the
+main difficulty with this approach is that the repositioning values
+may need to be reworked if the music is later modified. The
+properties that can be used for this type of manual repositioning are:
+
+@table @code
+@item extra-offset
+
+@cindex extra-offset property
+
+This property applies to any layout object supporting the
+@code{grob-interface}. It takes a pair of numbers which specify the
+extra displacement in the horizontal and vertical directions.
+Negative numbers move the object to the left or down. The units are
+staff-spaces. The extra displacement is made after the typesetting of
+objects is finished, so an object may be repositioned anywhere without
+affecting anything else.
+
+@item positions
+
+@cindex positions property
+
+This is most useful for manually adjusting the slope and height
+of beams, slurs, and tuplets. It takes a pair of numbers
+giving the position of the left and right ends of the beam, slur,
+etc. relative to the center line of the staff. Units are
+staff-spaces. Note, though, that slurs and phrasing slurs cannot
+be repositioned by arbitrarily large amounts. LilyPond first
+generates a list of possible positions for the slur and by default
+finds the slur that @qq{looks best}. If the @code{positions}
+property has been overridden the slur that is closest to the
+requested positions is selected from the list.
+@end table
+
+@end enumerate
+
+A particular object may not have all of these properties.
+It is necessary to go to the IR to look up which properties
+are available for the object in question.
+
+Here is a list of the objects which are most likely to be
+involved in collisions, together with the name of the object which
+should be looked up in the IR in order to discover which properties
+should be used to move them.
+
+@multitable @columnfractions .5 .5
+@headitem Object type @tab Object name
+@item Articulations @tab @code{Script}
+@item Beams @tab @code{Beam}
+@item Dynamics (vertically) @tab @code{DynamicLineSpanner}
+@item Dynamics (horizontally) @tab @code{DynamicText}
+@item Fingerings @tab @code{Fingering}
+@item Rehearsal / Text marks @tab @code{RehearsalMark}
+@item Slurs @tab @code{Slur}
+@item Text e.g. @code{^"text"} @tab @code{TextScript}
+@item Ties @tab @code{Tie}
+@item Tuplets @tab @code{TupletBracket}
+@end multitable
+
+
+@node Fixing overlapping notation
+@subsection Fixing overlapping notation
+
+Let's now see how the properties in the previous section can
+help to resolve overlapping notation.
+
+@subheading padding property
+
+@cindex padding
+@cindex fixing overlapping notation
+@cindex overlapping notation
+
+The @code{padding} property can be set to increase
+(or decrease) the distance between symbols that are printed
+above or below notes.
+
+@cindex Script, example of overriding
+@cindex padding property, example
+
+@lilypond[quote,fragment,relative=1,verbatim]
+c2\fermata
+\override Script.padding = #3
+b2\fermata
+@end lilypond
+
+@cindex MetronomeMark, example of overriding
+@cindex padding property, example
+
+@lilypond[quote,fragment,relative=1,verbatim]
+% This will not work, see below
+\override MetronomeMark.padding = #3
+\tempo 4 = 120
+c1 |
+% This works
+\override Score.MetronomeMark.padding = #3
+\tempo 4 = 80
+d1 |
+@end lilypond
+
+Note in the second example how important it is to figure out what
+context handles a certain object. Since the @code{MetronomeMark}
+object is handled in the @code{Score} context, property changes in the
+@code{Voice} context will not be noticed. For more details, see
+@ruser{Modifying properties}.
+
+If the @code{padding} property of an object is increased when that
+object is in a stack of objects being positioned according to
+their @code{outside-staff-priority}, then that object and all
+objects outside it are moved.
+
+
+@subheading right-padding
+
+@cindex right-padding property
+
+The @code{right-padding} property affects the spacing between the
+accidental and the note to which it applies. It is not often
+required, but the default spacing may be wrong for certain special
+accidental glyphs or combination of glyphs used in some microtonal
+music. These have to be entered by overriding the accidental
+stencil with a markup containing the desired symbol(s), like this:
+
+@cindex Accidental, example of overriding
+@cindex text property, example
+@cindex stencil property, example
+@cindex AccidentalPlacement, example of overriding
+@cindex right-padding property, example
+
+@lilypond[quote,ragged-right,verbatim]
+sesquisharp = \markup { \sesquisharp }
+\relative c'' {
+ c4
+ % This prints a sesquisharp but the spacing is too small
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
+ cis4 c
+ % This improves the spacing
+ \once \override Score.AccidentalPlacement.right-padding = #0.6
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
+ cis4 |
+}
+@end lilypond
+
+@noindent
+This necessarily uses an override for the accidental stencil which
+will not be covered until later. The stencil type must be a
+procedure, here changed to print the contents of the @code{text}
+property of @code{Accidental}, which itself is set to be a
+sesquisharp sign. This sign is then moved further away from the
+note head by overriding @code{right-padding}.
+
+@noindent
+
+@subheading staff-padding property
+
+@cindex aligning objects on a baseline
+@cindex objects, aligning on a baseline
+
+@code{staff-padding} can be used to align objects such as dynamics
+along a baseline at a fixed height above the staff, rather than at a
+height dependent on the position of the note to which they are
+attached. It is not a property of @code{DynamicText} but of
+@code{DynamicLineSpanner}. This is because the baseline should apply
+equally to @strong{all} dynamics, including those created as extended
+spanners. So this is the way to align the dynamic marks in the
+example taken from the previous section:
+
+@cindex DynamicText, example of overriding
+@cindex extra-spacing-width property, example
+@cindex DynamicLineSpanner, example of overriding
+@cindex staff-padding property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\dynamicUp
+% Extend width by 1 unit
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
+% Align dynamics to a base line 2 units above staff
+\override DynamicLineSpanner.staff-padding = #2
+a4\f b\mf c\mp b\p
+@end lilypond
+
+
+@subheading self-alignment-X property
+
+The following example shows how this can resolve the collision
+of a string fingering object with a note's stem by aligning the
+right edge with the reference point of the parent note:
+
+@cindex StringNumber, example of overriding
+@cindex self-alignment-X property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=3]
+\voiceOne
+<a\2>
+\once \override StringNumber.self-alignment-X = #RIGHT
+<a\2>
+@end lilypond
+
+@subheading staff-position property
+
+@cindex object collision within a staff
+
+Multimeasure rests in one voice can collide with notes in another.
+Since these rests are typeset centered between the bar lines, it
+would require significant effort for LilyPond to figure out which
+other notes might collide with it, since all the current collision
+handling between notes and between notes and rests is done only
+for notes and rests that occur at the same time. Here's an
+example of a collision of this type:
+
+@lilypond[quote,verbatim,fragment,ragged-right, relative=1]
+<< { c4 c c c } \\ { R1 } >>
+@end lilypond
+
+The best solution here is to move the multimeasure rest down, since
+the rest is in voice two. The default in @code{\voiceTwo} (i.e. in
+the second voice of a @code{<<@{...@} \\ @{...@}>>} construct) is that
+@code{staff-position} is set to -4 for MultiMeasureRest, so we need to
+move it, say, four half-staff spaces down to @w{@code{-8}}.
+
+@cindex MultiMeasureRest, example of overriding
+@cindex staff-position property, example
+
+@lilypond[quote,verbatim,fragment,ragged-right, relative=1]
+<<
+ { c4 c c c }
+ \\
+ \override MultiMeasureRest.staff-position = #-8
+ { R1 }
+>>
+@end lilypond
+
+This is better than using, for example, @code{extra-offset},
+because the ledger line above the rest is inserted automatically.
+
+@subheading extra-offset property
+
+@cindex positioning objects
+@cindex positioning grobs
+@cindex objects, positioning
+@cindex grobs, positioning
+
+The @code{extra-offset} property provides complete control over the
+positioning of an object both horizontally and vertically.
+
+In the following example, the second fingering is moved a little to
+the left, and 1.8 staff space downwards:
+
+@cindex Fingering, example of overriding
+@cindex extra-offset property, example
+
+@lilypond[quote,fragment,relative=1,verbatim]
+\stemUp
+f4-5
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
+f4-5
+@end lilypond
+
+
+@subheading positions property
+
+@cindex controlling tuplets, slurs, phrasing slurs, and beams manually
+@cindex manually controlling tuplets, slurs, phrasing slurs, and beams
+@cindex tuplet beams, controlling manually
+@cindex slurs, controlling manually
+@cindex phrasing slurs, controlling manually
+@cindex beams, controlling manually
+
+The @code{positions} property allows the position and slope of
+tuplets, slurs, phrasing slurs and beams to be controlled manually.
+Here's an example which has an ugly phrasing slur due to its trying to
+avoid the slur on the acciaccatura.
+
+@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
+r4 \acciaccatura e8\( d8 c~ c d c d\)
+@end lilypond
+
+@noindent
+We could simply move the phrasing slur above the notes, and this
+would be the preferred solution:
+
+@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
+r4
+\phrasingSlurUp
+\acciaccatura e8\( d8 c~ c d c d\)
+@end lilypond
+
+@noindent
+But if there were some reason why this could not be done the
+other alternative would be to move the left end of the phrasing
+slur down a little using the @code{positions} property. This
+also resolves the rather nasty shape.
+
+@cindex PhrasingSlur, example of overriding
+@cindex positions property, example
+
+@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
+r4
+\once \override PhrasingSlur.positions = #'(-4 . -3)
+\acciaccatura e8\( d8 c~ c d c d\)
+@end lilypond
+
+Here's a further example. We see that the beams
+collide with the ties:
+
+@lilypond[quote,verbatim,fragment,ragged-right]
+{
+ \time 4/2
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
+ >>
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
+ >>
+}
+@end lilypond
+
+@noindent
+This can be resolved by manually moving both ends of the beam
+up from their position at 1.81 staff-spaces below the center line to,
+say, 1:
+
+@cindex Beam, example of overriding
+@cindex positions property, example
+
+@lilypond[quote,verbatim,fragment,ragged-right]
+{
+ \time 4/2
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ {
+ \override Beam.positions = #'(-1 . -1)
+ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g''
+ }
+ >>
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
+ >>
+}
+@end lilypond
+
+@noindent
+Note that the override continues to apply in the first voice of
+the second measure of eighth notes, but not to any of the beams in the
+second voice.
+
+@subheading force-hshift property
+
+We can now see how to apply the final corrections to the Chopin
+example introduced at the end of @ref{I'm hearing Voices}, which
+was left looking like this:
+
+@lilypond[quote,verbatim,fragment,ragged-right]
+\new Staff \relative c'' {
+ \key aes \major
+ <<
+ { c2 aes4. bes8 }
+ \\
+ { <ees, c>2 des }
+ \\
+ \\
+ { aes'2 f4 fes }
+ >> |
+ <c ees aes c>1 |
+}
+@end lilypond
+
+@noindent
+The inner note of the first chord (i.e. the A-flat in the fourth
+Voice) need not be shifted away from the note column of the higher
+note. To correct this we set @code{force-hshift}, which is a property
+of @code{NoteColumn}, of this note to zero.
+
+In the second chord we prefer the F to line up with the A-flat and the
+lowest note to be positioned slightly right to avoid a collision of
+stems. We achieve this by setting @code{force-hshift} in the
+@code{NoteColumn} of the low D-flat to move it to the right by half
+a staff-space.
+
+Here's the final result:
+
+@cindex NoteColumn, example of overriding
+@cindex force-hshift property, example
+
+@lilypond[quote,verbatim,fragment,ragged-right]
+\new Staff \relative c'' {
+ \key aes \major
+ <<
+ { c2 aes4. bes8 }
+ \\
+ {
+ <ees, c>2
+ \once \override NoteColumn.force-hshift = #0.5
+ des2
+ }
+ \\
+ \\
+ {
+ \override NoteColumn.force-hshift = #0
+ aes'2 f4 fes
+ }
+ >> |
+ <c ees aes c>1 |
+}
+@end lilypond
+
+
+@node Real music example
+@subsection Real music example
+
+We end this section on Tweaks by showing the steps to be taken to
+deal with a tricky example which needs several tweaks to produce
+the desired output. The example has been deliberately chosen to
+illustrate the use of the Notation Reference to resolve unusual
+problems with notation. It is not representative of the more usual
+engraving process, so please do not let these difficulties put
+you off! Fortunately, difficulties like these are not very common!
+
+The example is from Chopin's Première Ballade, Op. 23, bars 6 to
+9, the transition from the opening Lento to Moderato.
+Here, first, is what we want the output to look like, but to avoid
+over-complicating the example too much we have left out the
+dynamics, fingering and pedalling.
+
+@c The following should appear as music without code
+@c This example should not be indexed
+@c line-width ensures no break
+@lilypond[quote,ragged-right,line-width=6\in]
+rhMusic = \relative c'' {
+ \new Voice {
+ r2 c4.\( g8 |
+ \once \override Tie.staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ \mergeDifferentlyHeadedOn
+ \mergeDifferentlyDottedOn
+ bes2.^\markup { \bold "Moderato" } r8
+ <<
+ { c,8 d fis bes a }
+ \new Voice {
+ \voiceTwo
+ c,8~
+ % Reposition the c2 to the right of the merged note
+ \once \override NoteColumn.force-hshift = #1.0
+ % Move the c2 out of the main note column
+ % so the merge will work
+ \shiftOnn
+ c2
+ }
+ \new Voice {
+ \voiceThree
+ s8
+ % Stem on the d2 must be down to permit merging
+ \stemDown
+ % Stem on the d2 should be invisible
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
+ d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ \mergeDifferentlyHeadedOff
+ \mergeDifferentlyDottedOff
+ g2.\)
+ }
+}
+
+lhMusic = \relative c' {
+ r2 <c g ees>2( |
+ <d g, d>1)\arpeggio |
+ r2. d,,4 r4 r |
+ r4
+}
+
+\score {
+ \new PianoStaff <<
+ \new Staff = "RH" <<
+ \key g \minor
+ \rhMusic
+ >>
+ \new Staff = "LH" <<
+ \key g \minor
+ \clef "bass"
+ \lhMusic
+ >>
+ >>
+}
+@end lilypond
+
+We note first that the right hand part in the third bar
+requires four voices. These are the five beamed eighth notes,
+the tied C, the half-note D which is merged with the eighth note
+D, and the dotted quarter note F-sharp, which is also merged with
+the eighth note at the same pitch. Everything else is in a single
+voice, so the easiest way is to introduce these extra three voices
+temporarily at the time they are needed. If you have forgotten
+how to do this, look at @ref{I'm hearing Voices} and @ref{Explicitly
+instantiating voices}. Here we choose to use explicitly instantiated
+voices for the polyphonic passage, as LilyPond is better able to
+avoid collisions if all voices are instantiated explicitly in this
+way.
+
+So let us begin by entering the notes as two variables, setting up
+the staff structure in a score block, and seeing what LilyPond
+produces by default:
+
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative c'' {
+ \new Voice {
+ r2 c4. g8 |
+ bes1~ |
+ \time 6/4
+ bes2. r8
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~ c2
+ }
+ \new Voice {
+ \voiceThree
+ s8 d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ g2. % continuation of main voice
+ }
+}
+
+lhMusic = \relative c' {
+ r2 <c g ees>2 |
+ <d g, d>1 |
+ r2. d,,4 r4 r |
+ r4
+}
+
+\score {
+ \new PianoStaff <<
+ \new Staff = "RH" <<
+ \key g \minor
+ \rhMusic
+ >>
+ \new Staff = "LH" <<
+ \key g \minor
+ \clef "bass"
+ \lhMusic
+ >>
+ >>
+}
+@end lilypond
+
+All the notes are right, but the appearance is far from
+satisfactory. The tie collides with the change in time signature,
+some notes are not merged together, and several notation elements
+are missing. Let's first deal with the easier things. We can
+easily add the left hand slur and the right hand phrasing slur,
+since these were all covered in the Tutorial. Doing this gives:
+
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative c'' {
+ \new Voice {
+ r2 c4.\( g8 |
+ bes1~ |
+ \time 6/4
+ bes2. r8
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~ c2
+ }
+ \new Voice {
+ \voiceThree
+ s8 d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ g2.\) % continuation of main voice
+ }
+}
+
+lhMusic = \relative c' {
+ r2 <c g ees>2( |
+ <d g, d>1) |
+ r2. d,,4 r4 r |
+ r4
+}
+
+\score {
+ \new PianoStaff <<
+ \new Staff = "RH" <<
+ \key g \minor
+ \rhMusic
+ >>
+ \new Staff = "LH" <<
+ \key g \minor
+ \clef "bass"
+ \lhMusic
+ >>
+ >>
+}
+@end lilypond
+
+The first bar is now correct. The second bar contains an arpeggio and
+is terminated by a double bar line. How do we do these, as they have
+not been mentioned in this Learning Manual? This is where we need to
+turn to the Notation Reference. Looking up @q{arpeggio} and @q{bar
+line} in the index quickly shows us that an arpeggio is produced by
+appending @code{\arpeggio} to a chord, and a double bar line is
+produced by the @code{\bar "||"} command. That's easily done. We
+next need to correct the collision of the tie with the time signature.
+This is best done by moving the tie upwards. Moving objects was
+covered earlier in @ref{Moving objects}, which says that objects
+positioned relative to the staff can be moved vertically by overriding
+their @code{staff-position} property, which is specified in half staff
+spaces relative to the center line of the staff. So the following
+override placed just before the first tied note would move the tie up
+to 3.5 half staff spaces above the center line:
+
+@code{\once \override Tie.staff-position = #3.5}
+
+This completes bar two, giving:
+
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative c'' {
+ \new Voice {
+ r2 c4.\( g8 |
+ \once \override Tie.staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ bes2. r8
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~ c2
+ }
+ \new Voice {
+ \voiceThree
+ s8 d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ g2.\) % continuation of main voice
+ }
+}
+
+lhMusic = \relative c' {
+ r2 <c g ees>2( |
+ <d g, d>1)\arpeggio |
+ r2. d,,4 r4 r |
+ r4
+}
+
+\score {
+ \new PianoStaff <<
+ \new Staff = "RH" <<
+ \key g \minor
+ \rhMusic
+ >>
+ \new Staff = "LH" <<
+ \key g \minor
+ \clef "bass"
+ \lhMusic
+ >>
+ >>
+}
+@end lilypond
+
+On to bar three and the start of the Moderato section. The tutorial
+showed how to add bold text with the @code{\markup} command, so
+adding @qq{Moderato} in bold is easy. But how do we merge notes in
+different voices together? This is where we need to turn again to
+the Notation Reference for help. A search for @qq{merge} in the
+Notation Reference index quickly leads us to the commands for merging
+differently headed and differently dotted notes in
+@ruser{Collision resolution}. In our example we need to merge both
+types of note for the duration of the polyphonic section in bar 3,
+so using the information we find in the Notation Reference we add
+
+@example
+\mergeDifferentlyHeadedOn
+\mergeDifferentlyDottedOn
+@end example
+
+@noindent
+to the start of that section and
+
+@example
+\mergeDifferentlyHeadedOff
+\mergeDifferentlyDottedOff
+@end example
+
+@noindent
+to the end, giving:
+
+@c line-width ensures no break
+@lilypond[quote,ragged-right,line-width=6\in]
+rhMusic = \relative c'' {
+ \new Voice {
+ r2 c4.\( g8 |
+ \once \override Tie.staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ bes2.^\markup { \bold "Moderato" } r8
+ \mergeDifferentlyHeadedOn
+ \mergeDifferentlyDottedOn
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~ c2
+ }
+ \new Voice {
+ \voiceThree
+ s8 d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ \mergeDifferentlyHeadedOff
+ \mergeDifferentlyDottedOff
+ g2.\) % continuation of main voice
+ }
+}
+
+lhMusic = \relative c' {
+ r2 <c g ees>2( |
+ <d g, d>1)\arpeggio |
+ r2. d,,4 r4 r |
+ r4
+}
+
+\score {
+ \new PianoStaff <<
+ \new Staff = "RH" <<
+ \key g \minor
+ \rhMusic
+ >>
+ \new Staff = "LH" <<
+ \key g \minor
+ \clef "bass"
+ \lhMusic
+ >>
+ >>
+}
+@end lilypond
+
+These overrides have merged the two F-sharp notes, but not the two
+on D. Why not? The answer is there in the same section in the
+Notation Reference -- notes being merged must have stems in
+opposite directions and two notes cannot be merged successfully if
+there is a third note in the same note column. Here the two D's
+both have upward stems and there is a third note -- the C. We know
+how to change the stem direction using @code{\stemDown}, and
+the Notation Reference also says how to move the C -- apply a shift
+using one of the @code{\shift} commands. But which one?
+The C is in voice two which has shift off, and the two D's are in
+voices one and three, which have shift off and shift on,
+respectively. So we have to shift the C a further level still
+using @code{\shiftOnn} to avoid it interfering with the two D's.
+Applying these changes gives:
+
+@cindex Tie, example of overriding
+@cindex staff-position property, example
+
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative c'' {
+ \new Voice {
+ r2 c4.\( g8 |
+ \once \override Tie.staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ bes2.^\markup { \bold "Moderato" } r8
+ \mergeDifferentlyHeadedOn
+ \mergeDifferentlyDottedOn
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ % Move the c2 out of the main note column
+ % so the merge will work
+ c,8~ \shiftOnn c2
+ }
+ \new Voice {
+ \voiceThree
+ % Stem on the d2 must be down to permit merging
+ s8 \stemDown d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ \mergeDifferentlyHeadedOff
+ \mergeDifferentlyDottedOff
+ g2.\) % continuation of main voice
+ }
+}
+
+lhMusic = \relative c' {
+ r2 <c g ees>2( |
+ <d g, d>1)\arpeggio |
+ r2. d,,4 r4 r |
+ r4
+}
+
+\score {
+ \new PianoStaff <<
+ \new Staff = "RH" <<
+ \key g \minor
+ \rhMusic
+ >>
+ \new Staff = "LH" <<
+ \key g \minor
+ \clef "bass"
+ \lhMusic
+ >>
+ >>
+}
+@end lilypond
+
+Nearly there. Only two problems remain: The downward stem on the
+merged D should not be there, and the C would be better positioned
+to the right of the D's. We know how to do both of these from the
+earlier tweaks: we make the stem transparent, and move the C with
+the @code{force-hshift} property. Here's the final result:
+
+@cindex NoteColumn, example of overriding
+@cindex force-hshift property, example
+@cindex Stem, example of overriding
+@cindex transparent property, example
+
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative c'' {
+ \new Voice {
+ r2 c4.\( g8 |
+ \once \override Tie.staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ bes2.^\markup { \bold "Moderato" } r8
+ \mergeDifferentlyHeadedOn
+ \mergeDifferentlyDottedOn
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~
+ % Reposition the c2 to the right of the merged note
+ \once \override NoteColumn.force-hshift = #1.0
+ % Move the c2 out of the main note column
+ % so the merge will work
+ \shiftOnn
+ c2
+ }
+ \new Voice {
+ \voiceThree
+ s8
+ % Stem on the d2 must be down to permit merging
+ \stemDown
+ % Stem on the d2 should be invisible
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
+ d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ \mergeDifferentlyHeadedOff
+ \mergeDifferentlyDottedOff
+ g2.\) % continuation of main voice
+ }
+}
+
+lhMusic = \relative c' {
+ r2 <c g ees>2( |
+ <d g, d>1)\arpeggio |
+ r2. d,,4 r4 r |
+ r4
+}
+
+\score {
+ \new PianoStaff <<
+ \new Staff = "RH" <<
+ \key g \minor
+ \rhMusic
+ >>
+ \new Staff = "LH" <<
+ \key g \minor
+ \clef "bass"
+ \lhMusic
+ >>
+ >>
+}
+@end lilypond
+
+
+@node Further tweaking
+@section Further tweaking
+
+@menu
+* Other uses for tweaks::
+* Using variables for tweaks::
+* Style sheets::
+* Other sources of information::
+* Advanced tweaks with Scheme::
+@end menu
+
+@node Other uses for tweaks
+@subsection Other uses for tweaks
+
+@cindex transparent property, use of
+@cindex objects, making invisible
+@cindex removing objects
+@cindex objects, removing
+@cindex hiding objects
+@cindex objects, hiding
+@cindex invisible objects
+@cindex objects, invisible
+@cindex tying notes across voices
+
+@subheading Tying notes across voices
+
+The following example demonstrates how to connect notes in
+different voices using ties. Normally, only two notes in the
+same voice can be connected with ties. By using two voices,
+with the tied notes in one of them
+
+@lilypond[quote,fragment,relative=2]
+<< { b8~ b\noBeam } \\ { b8[ g] } >>
+@end lilypond
+
+@noindent
+and blanking the first up-stem in that voice, the tie appears to
+cross voices:
+
+@cindex Stem, example of overriding
+@cindex transparent property, example
+
+@lilypond[quote,fragment,relative=2,verbatim]
+<<
+ {
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
+ b8~ b\noBeam
+ }
+\\
+ { b8[ g] }
+>>
+@end lilypond
+
+To make sure that the just-blanked stem doesn't squeeze the tie
+too much, we can lengthen the stem by setting the
+@code{length} to @code{8},
+
+@lilypond[quote,fragment,relative=2,verbatim]
+<<
+ {
+ \tweak Stem.transparent ##t
+ \tweak Flag.transparent ##t
+ \tweak Stem.length #8
+ b8~ b\noBeam
+ }
+\\
+ { b8[ g] }
+>>
+@end lilypond
+
+@subheading Simulating a fermata in MIDI
+
+@cindex stencil property, use of
+@cindex fermata, implementing in MIDI
+
+For outside-staff objects it is usually better to override the
+object's @code{stencil} property rather than its @code{transparent}
+property when you wish to remove it from the printed output.
+Setting the @code{stencil} property of an object to @code{#f} will
+remove that object entirely from the printed output. This means it
+has no effect on the placement of other objects placed relative to
+it.
+
+For example, if we wished to change the metronome setting in order
+to simulate a fermata in the MIDI output we would not want the
+metronome markings to appear in the printed output, and we would
+not want it to influence the spacing between the two systems or
+the positions of adjacent annotations on the staff. So setting
+its @code{stencil} property to @code{#f} would be the best way.
+We show here the effect of the two methods:
+
+@cindex MetronomeMark, example of overriding
+@cindex transparent property, example
+
+@lilypond[quote,verbatim,ragged-right]
+\score {
+ \relative c'' {
+ % Visible tempo marking
+ \tempo 4=120
+ a4 a a
+ \once \override Score.MetronomeMark.transparent = ##t
+ % Invisible tempo marking to lengthen fermata in MIDI
+ \tempo 4=80
+ a4\fermata |
+ % New tempo for next section
+ \tempo 4=100
+ a4 a a a |
+ }
+ \layout { }
+ \midi { }
+}
+@end lilypond
+
+@cindex MetronomeMark, example of overriding
+@cindex stencil property, example
+
+@lilypond[quote,verbatim,ragged-right]
+\score {
+ \relative c'' {
+ % Visible tempo marking
+ \tempo 4=120
+ a4 a a
+ \once \override Score.MetronomeMark.stencil = ##f
+ % Invisible tempo marking to lengthen fermata in MIDI
+ \tempo 4=80
+ a4\fermata |
+ % New tempo for next section
+ \tempo 4=100
+ a4 a a a |
+ }
+ \layout { }
+ \midi { }
+}
+@end lilypond
+
+@noindent
+Both methods remove the metronome mark which lengthens the fermata
+from the printed output, and both affect the MIDI timing as
+required, but the transparent metronome mark in the first line
+forces the following tempo indication too high while the
+second (with the stencil removed) does not.
+
+@seealso
+Music Glossary:
+@rglos{system}.
+
+@node Using variables for tweaks
+@subsection Using variables for tweaks
+
+@cindex variables, using for tweaks
+@cindex using variables for tweaks
+@cindex tweaks, using variables for
+
+Override commands are often long and tedious to type, and they
+have to be absolutely correct. If the same overrides are to be
+used many times it may be worth defining variables to hold them.
+
+Suppose we wish to emphasize certain words in lyrics by printing
+them in bold italics. The @code{\italic} and @code{\bold}
+commands only work within lyrics if they are embedded, together with
+the word or words to be modified, within a @code{\markup} block,
+which makes them tedious to enter. The need to embed the words
+themselves prevents their use in simple variables. As an
+alternative can we use @code{\override} and @code{\revert} commands?
+
+@example
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
+
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
+@end example
+
+These would also be extremely tedious to enter if there were many
+words requiring emphasis. But we @emph{can} define these as two
+variables and use those to bracket the words to be emphasized.
+Another advantage of using variables for these overrides is that
+the spaces around the dot are not necessary, since they are not
+being interpreted in @code{\lyricmode} directly. Here's an example
+of this, although in practice we would choose shorter names
+for the variables to make them quicker to type:
+
+@cindex LyricText, example of overriding
+@cindex font-shape property, example
+@cindex font-series property, example
+
+@lilypond[quote,verbatim]
+emphasize = {
+ \override Lyrics.LyricText.font-shape = #'italic
+ \override Lyrics.LyricText.font-series = #'bold
+}
+
+normal = {
+ \revert Lyrics.LyricText.font-shape
+ \revert Lyrics.LyricText.font-series
+}
+
+global = { \key c \major \time 4/4 \partial 4 }
+
+SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g }
+AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e }
+TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 }
+BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 }
+
+VerseOne = \lyrics {
+ E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save,
+}
+
+VerseTwo = \lyricmode {
+ O | \once \emphasize Christ, whose voice the | wa -- ters heard,
+}
+
+VerseThree = \lyricmode {
+ O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood
+}
+
+VerseFour = \lyricmode {
+ O | \emphasize Tri -- ni -- ty \normal of | love and pow'r
+}
+
+\score {
+ \new ChoirStaff <<
+ \new Staff <<
+ \clef "treble"
+ \new Voice = "Soprano" { \voiceOne \global \SopranoMusic }
+ \new Voice = "Alto" { \voiceTwo \AltoMusic }
+ \new Lyrics \lyricsto "Soprano" { \VerseOne }
+ \new Lyrics \lyricsto "Soprano" { \VerseTwo }
+ \new Lyrics \lyricsto "Soprano" { \VerseThree }
+ \new Lyrics \lyricsto "Soprano" { \VerseFour }
+ >>
+ \new Staff <<
+ \clef "bass"
+ \new Voice = "Tenor" { \voiceOne \TenorMusic }
+ \new Voice = "Bass" { \voiceTwo \BassMusic }
+ >>
+ >>
+}
+@end lilypond
+
+
+@node Style sheets
+@subsection Style sheets
+
+The output that LilyPond produces can be heavily modified; see
+@ref{Tweaking output}, for details. But what if you have many
+input files that you want to apply your tweaks to? Or what if you
+simply want to separate your tweaks from the actual music? This
+is quite easy to do.
+
+Let's look at an example. Don't worry if you don't understand
+the parts with all the @code{#()}. This is explained in
+@ref{Advanced tweaks with Scheme}.
+
+@lilypond[quote,verbatim,ragged-right]
+mpdolce =
+#(make-dynamic-script
+ #{ \markup { \hspace #0
+ \translate #'(5 . 0)
+ \line { \dynamic "mp"
+ \text \italic "dolce" } }
+ #})
+
+inst =
+#(define-music-function
+ (parser location string)
+ (string?)
+ #{ ^\markup \bold \box #string #})
+
+\relative c'' {
+ \tempo 4=50
+ a4.\mpdolce d8 cis4--\glissando a |
+ b4 bes a2 |
+ \inst "Clarinet"
+ cis4.\< d8 e4 fis |
+ g8(\! fis)-. e( d)-. cis2 |
+}
+@end lilypond
+
+Let's do something about the @code{mpdolce} and @code{inst} definitions.
+They produce the output we desire, but we might want to use them in
+another piece. We could simply copy-and-paste them at the top of every
+file, but that's an annoyance. It also leaves those definitions in our
+input files, and I personally find all the @code{#()} somewhat ugly.
+Let's hide them in another file:
+
+@example
+%%% save this to a file called "definitions.ily"
+mpdolce =
+#(make-dynamic-script
+ #@{ \markup @{ \hspace #0
+ \translate #'(5 . 0)
+ \line @{ \dynamic "mp"
+ \text \italic "dolce" @} @}
+ #@})
+
+inst =
+#(define-music-function
+ (parser location string)
+ (string?)
+ #@{ ^\markup \bold \box #string #@})
+@end example
+
+We will refer to this file using the @code{\include} command near
+the top of the music file. (The extension @file{.ily} is used to
+distinguish this included file, which is not meant to be compiled
+on its own, from the main file.)
+Now let's modify our music (let's save this file as @file{music.ly}).
+
+@c We have to do this awkward example/lilypond-non-verbatim
+@c because we can't do the \include stuff in the manual.
+
+@example
+\include "definitions.ily"
+
+\relative c'' @{
+ \tempo 4=50
+ a4.\mpdolce d8 cis4--\glissando a |
+ b4 bes a2 |
+ \inst "Clarinet"
+ cis4.\< d8 e4 fis |
+ g8(\! fis)-. e( d)-. cis2 |
+@}
+@end example
+
+@lilypond[quote,ragged-right]
+mpdolce =
+#(make-dynamic-script
+ #{ \markup { \hspace #0
+ \translate #'(5 . 0)
+ \line { \dynamic "mp"
+ \text \italic "dolce" } }
+ #})
+
+inst =
+#(define-music-function
+ (parser location string)
+ (string?)
+ #{ ^\markup \bold \box #string #})
+
+\relative c'' {
+ \tempo 4=50
+ a4.\mpdolce d8 cis4--\glissando a |
+ b4 bes a2 |
+ \inst "Clarinet"
+ cis4.\< d8 e4 fis |
+ g8(\! fis)-. e( d)-. cis2 |
+}
+@end lilypond
+
+That looks better, but let's make a few changes. The glissando is hard
+to see, so let's make it thicker and closer to the note heads. Let's
+put the metronome marking above the clef, instead of over the first
+note. And finally, my composition professor hates @q{C} time signatures,
+so we'd better make that @q{4/4} instead.
+
+Don't change @file{music.ly}, though. Replace our @file{definitions.ily}
+with this:
+
+@example
+%%% definitions.ily
+mpdolce =
+#(make-dynamic-script
+ #@{ \markup @{ \hspace #0
+ \translate #'(5 . 0)
+ \line @{ \dynamic "mp"
+ \text \italic "dolce" @} @}
+ #@})
+
+inst =
+#(define-music-function
+ (parser location string)
+ (string?)
+ #@{ ^\markup \bold \box #string #@})
+
+\layout@{
+ \context @{
+ \Score
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
+ @}
+ \context @{
+ \Staff
+ \override TimeSignature.style = #'numbered
+ @}
+ \context @{
+ \Voice
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
+ @}
+@}
+@end example
+
+@lilypond[quote,ragged-right]
+mpdolce =
+#(make-dynamic-script
+ #{ \markup { \hspace #0
+ \translate #'(5 . 0)
+ \line { \dynamic "mp"
+ \text \italic "dolce" } }
+ #})
+
+inst =
+#(define-music-function
+ (parser location string)
+ (string?)
+ #{ ^\markup \bold \box #string #})
+
+\layout{
+ \context {
+ \Score
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
+ }
+ \context {
+ \Staff
+ \override TimeSignature.style = #'numbered
+ }
+ \context {
+ \Voice
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
+ }
+}
+
+\relative c'' {
+ \tempo 4=50
+ a4.\mpdolce d8 cis4--\glissando a |
+ b4 bes a2 |
+ \inst "Clarinet"
+ cis4.\< d8 e4 fis |
+ g8(\! fis)-. e( d)-. cis2 |
+}
+@end lilypond
+
+That looks nicer! But now suppose that I want to publish this
+piece. My composition professor doesn't like @q{C} time
+signatures, but I'm somewhat fond of them. Let's copy the
+current @file{definitions.ily} to @file{web-publish.ily} and
+modify that. Since this music is aimed at producing a pdf which
+will be displayed on the screen, we'll also increase the
+overall size of the output.
+
+@example
+%%% web-publish.ily
+mpdolce =
+#(make-dynamic-script
+ #@{ \markup @{ \hspace #0
+ \translate #'(5 . 0)
+ \line @{ \dynamic "mp"
+ \text \italic "dolce" @} @}
+ #@})
+
+inst =
+#(define-music-function
+ (parser location string)
+ (string?)
+ #@{ ^\markup \bold \box #string #@})
+
+#(set-global-staff-size 23)
+
+\layout@{
+ \context @{
+ \Score
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
+ @}
+ \context @{
+ \Staff
+ @}
+ \context @{
+ \Voice
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
+ @}
+@}
+@end example
+
+@lilypond[quote,ragged-right]
+mpdolce =
+#(make-dynamic-script
+ #{ \markup { \hspace #0
+ \translate #'(5 . 0)
+ \line { \dynamic "mp"
+ \text \italic "dolce" } }
+ #})
+
+inst =
+#(define-music-function
+ (parser location string)
+ (string?)
+ #{ ^\markup \bold \box #string #})
+
+#(set-global-staff-size 23)
+
+\layout{
+ \context { \Score
+ \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.padding = #'3
+ }
+ \context { \Voice
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
+ }
+}
+
+\relative c'' {
+ \tempo 4=50
+ a4.\mpdolce d8 cis4--\glissando a |
+ b4 bes a2 |
+ \inst "Clarinet"
+ cis4.\< d8 e4 fis |
+ g8(\! fis)-. e( d)-. cis2 |
+}
+@end lilypond
+
+Now in our music, I simply replace
+@code{\include "definitions.ily"} with
+@code{\include "web-publish.ily"}. Of course, we could make this
+even more convenient. We could make a @file{definitions.ily} file which
+contains only the definitions of @code{mpdolce} and @code{inst}, a
+@file{web-publish.ily} file which contains only the @code{\layout}
+section listed above, and a @file{university.ily} file which
+contains only the tweaks to produce the output that my professor
+prefers. The top of @file{music.ly} would then look like this:
+
+@example
+\include "definitions.ily"
+
+%%% Only uncomment one of these two lines!
+\include "web-publish.ily"
+%\include "university.ily"
+@end example
+
+This approach can be useful even if you are only producing
+one set of parts. I use half a dozen different
+@q{style sheet} files for my projects. I begin every music
+file with @code{\include "../global.ily"}, which contains
+
+@example
+%%% global.ily
+\version @w{"@version{}"}
+
+#(ly:set-option 'point-and-click #f)
+
+\include "../init/init-defs.ly"
+\include "../init/init-layout.ly"
+\include "../init/init-headers.ly"
+\include "../init/init-paper.ly"
+@end example
+
+
+@node Other sources of information
+@subsection Other sources of information
+
+The Internals Reference documentation contains a lot of information
+about LilyPond, but even more information can be gathered by
+looking at the internal LilyPond files. To explore these, you must
+first find the directory appropriate to your system. The location
+of this directory depends (a) on whether you obtained LilyPond
+by downloading a precompiled binary from lilypond.org
+or whether you installed it from a package manager (i.e.
+distributed with GNU/Linux, or installed under fink or cygwin) or
+compiled it from source, and (b) on which operating system it is
+being used:
+
+@strong{Downloaded from lilypond.org}
+
+@itemize @bullet
+@item GNU/Linux
+
+Navigate to
+@example
+@file{@var{INSTALLDIR}/lilypond/usr/@/share/lilypond/current/}
+@end example
+
+@item MacOS X
+
+Navigate to
+@example
+@file{@var{INSTALLDIR}/LilyPond.app/Contents/@/Resources/share/lilypond/current/}
+@end example
+
+by either @code{cd}-ing into this directory from the
+Terminal, or control-clicking on the LilyPond application and
+selecting @q{Show Package Contents}.
+
+@item Windows
+
+Using Windows Explorer, navigate to
+@example
+@file{@var{INSTALLDIR}/LilyPond/usr/@/share/lilypond/current/}
+@end example
+
+@end itemize
+
+@strong{Installed from a package manager or compiled from source}
+
+Navigate to
+@file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, where
+@var{PREFIX} is set by your package manager or @code{configure}
+script, and @var{X.Y.Z} is the LilyPond version number.
+
+@smallspace
+
+Within this directory the two interesting subdirectories are
+
+@itemize
+@item @file{ly/} - contains files in LilyPond format
+@item @file{scm/} - contains files in Scheme format
+@end itemize
+
+Let's begin by looking at some files in @file{ly/}.
+Open @file{ly/property-init.ly} in a text editor. The one
+you normally use for @code{.ly} files will be fine. This file
+contains the definitions of all the standard LilyPond predefined
+commands, such as @code{\stemUp} and @code{\slurDotted}. You will
+see that these are nothing more than definitions of variables
+containing one or a group of @code{\override} commands. For
+example, @code{/tieDotted} is defined to be:
+
+@example
+tieDotted = @{
+ \override Tie.dash-period = #0.75
+ \override Tie.dash-fraction = #0.1
+@}
+@end example
+
+If you do not like the default values these predefined commands can
+be redefined easily, just like any other variable, at the
+head of your input file.
+
+The following are the most useful files to be found in
+@file{ly/}:
+
+@multitable @columnfractions .4 .6
+@headitem Filename
+ @tab Contents
+@item @file{ly/engraver-init.ly}
+ @tab Definitions of engraver Contexts
+@item @file{ly/paper-defaults-init.ly}
+ @tab Specifications of paper-related defaults
+@item @file{ly/performer-init.ly}
+ @tab Definitions of performer Contexts
+@item @file{ly/property-init.ly}
+ @tab Definitions of all common predefined commands
+@item @file{ly/spanner-init.ly}
+ @tab Definitions of spanner-related predefined commands
+@end multitable
+
+Other settings (such as the definitions of markup commands) are
+stored as @file{.scm} (Scheme) files. The Scheme programming
+language is used to provide a programmable interface into
+LilyPond internal operation. Further explanation of these files
+is currently outside the scope of this manual, as a knowledge of
+the Scheme language is required. Users should be warned that
+a substantial amount of technical knowledge or time is required
+to understand Scheme and these files (see @rextend{Scheme tutorial}).
+
+If you have this knowledge, the Scheme files which may be of
+interest are:
+
+@multitable @columnfractions .4 .6
+@headitem Filename
+ @tab Contents
+@item @file{scm/auto-beam.scm}
+ @tab Sub-beaming defaults
+@item @file{scm/define-grobs.scm}
+ @tab Default settings for grob properties
+@item @file{scm/define-markup-commands.scm}
+ @tab Specify all markup commands
+@item @file{scm/midi.scm}
+ @tab Default settings for MIDI output
+@item @file{scm/output-lib.scm}
+ @tab Settings that affect appearance of frets, colors,
+ accidentals, bar lines, etc
+@item @file{scm/parser-clef.scm}
+ @tab Definitions of supported clefs
+@item @file{scm/script.scm}
+ @tab Default settings for articulations
+@end multitable
+
+
+@node Advanced tweaks with Scheme
+@subsection Advanced tweaks with Scheme
+
+Although many things are possible with the @code{\override} and
+@code{\tweak} commands, an even more powerful way of modifying
+the action of LilyPond is available through a programmable
+interface to the LilyPond internal operation. Code written in
+the Scheme programming language can be incorporated directly in
+the internal operation of LilyPond. Of course, at least a basic
+knowledge of programming in Scheme is required to do this, and an
+introduction is provided in the @rextend{Scheme tutorial}.
+
+As an illustration of one of the many possibilities, instead of
+setting a property to a constant it can be set to a Scheme
+procedure which is then called whenever that property is accessed
+by LilyPond. The property can then be set dynamically to a value
+determined by the procedure at the time it is called. In this
+example we color the note head in accordance with its position on
+the staff.
+
+@cindex x11-color function, example of using
+@cindex NoteHead, example of overriding
+@cindex color property, setting to Scheme procedure
+
+@lilypond[quote,verbatim,ragged-right]
+#(define (color-notehead grob)
+ "Color the notehead according to its position on the staff."
+ (let ((mod-position (modulo (ly:grob-property grob 'staff-position)
+ 7)))
+ (case mod-position
+ ;; Return rainbow colors
+ ((1) (x11-color 'red )) ; for C
+ ((2) (x11-color 'orange )) ; for D
+ ((3) (x11-color 'yellow )) ; for E
+ ((4) (x11-color 'green )) ; for F
+ ((5) (x11-color 'blue )) ; for G
+ ((6) (x11-color 'purple )) ; for A
+ ((0) (x11-color 'violet )) ; for B
+ )))
+
+\relative c' {
+ % Arrange to obtain color from color-notehead procedure
+ \override NoteHead.color = #color-notehead
+ a2 b | c2 d | e2 f | g2 a |
+}
+@end lilypond
+
+Further examples showing the use of these programmable interfaces
+can be found in @rextend{Callback functions}.
+
+
+
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org +v2.16 '
+ onSubmit="search.q.value='site:lilypond.org +v2.17 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org +v2.16 '
+ onMouseMove="search.q.value='site:lilypond.org +v2.17 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org +v2.16 '
+ onKeyUp="search.q.value='site:lilypond.org +v2.17 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Zoek met Google">
<input type="text" name="brute_query" onfocus="this.value=''" value="Zoek">
+++ /dev/null
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Ancient notation
\context {
\Staff
\consists "Custos_engraver"
- \override Custos #'style = #'mensural
+ \override Custos.style = #'mensural
}
}
}
\score {
<<
\new MensuralVoice = "discantus" \transpose c c' {
- \override Score.BarNumber #'transparent = ##t {
+ \override Score.BarNumber.transparent = ##t {
c'1\melisma bes a g\melismaEnd
f\breve
\[ f1\melisma a c'\breve d'\melismaEnd \]
@tab
@lilypond[relative=1,notime]
\clef "mensural-c2"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "mensural-f"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "mensural-g"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "petrucci-c2"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "petrucci-f3"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@tab
@lilypond[relative=1,notime]
\clef "petrucci-g"
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
c
@end lilypond
@end multitable
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter default }
- \override Staff.TimeSignature #'style = #'numbered
+ \override Staff.TimeSignature.style = #'numbered
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter numbered }
- \override Staff.TimeSignature #'style = #'mensural
+ \override Staff.TimeSignature.style = #'mensural
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter mensural }
- \override Staff.TimeSignature #'style = #'neomensural
+ \override Staff.TimeSignature.style = #'neomensural
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter neomensural }
- \override Staff.TimeSignature #'style = #'single-digit
+ \override Staff.TimeSignature.style = #'single-digit
\time 2/2
c1^\markup { \hspace #-2.0 \typewriter single-digit }
}
@lilypond[quote,fragment,ragged-right,verbatim]
\set Score.skipBars = ##t
\autoBeamOff
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a'
-\override NoteHead #'style = #'semipetrucci
+\override NoteHead.style = #'semipetrucci
a'\breve*5/6
-\override NoteHead #'style = #'blackpetrucci
+\override NoteHead.style = #'blackpetrucci
a'8*4/3 a'
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
a'\longa
@end lilypond
only the @code{mensural} style is supported.
@lilypond[quote,fragment,ragged-right,verbatim]
-\override Flag #'style = #'mensural
-\override Stem #'thickness = #1.0
-\override NoteHead #'style = #'mensural
+\override Flag.style = #'mensural
+\override Stem.thickness = #1.0
+\override NoteHead.style = #'mensural
\autoBeamOff
c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8
c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32
@lilypond[quote,fragment,ragged-right,verbatim]
\set Score.skipBars = ##t
-\override Rest #'style = #'classical
+\override Rest.style = #'classical
r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'mensural
+\override Rest.style = #'mensural
r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'neomensural
+\override Rest.style = #'neomensural
r\longa^"neomensural" r\breve r1 r2 r4 r8 r16
@end lilypond
@code{KeySignature}, respectively; e.g.:
@example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
#alteration-mensural-glyph-name-alist
@end example
@c @example
@c \set Score.timing = ##f
-@c \set Score.defaultBarType = "empty"
-@c \override NoteHead #'style = #'neomensural
-@c \override Staff.TimeSignature #'style = #'neomensural
+@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 \]
\score {
\transpose c c' {
\set Score.timing = ##f
- \set Score.defaultBarType = "empty"
- \override NoteHead #'style = #'petrucci
- \override Staff.TimeSignature #'style = #'mensural
+ \set Score.defaultBarType = "-"
+ \override NoteHead.style = #'petrucci
+ \override Staff.TimeSignature.style = #'mensural
\clef "petrucci-g"
\[ c'\maxima g \]
\[ d\longa
- \override NoteHead #'ligature-flexa = ##t
- \once \override NoteHead #'flexa-width = #3.2
+ \override NoteHead.ligature-flexa = ##t
+ \once \override NoteHead.flexa-width = #3.2
c\breve f e d \]
\[ c'\maxima d'\longa \]
\[ e'1 a g\breve \]
@lilypond[quote,ragged-right]
\transpose c c' {
\set Score.timing = ##f
- \set Score.defaultBarType = "empty"
- \override NoteHead #'style = #'petrucci
- \override Staff.TimeSignature #'style = #'mensural
+ \set Score.defaultBarType = "-"
+ \override NoteHead.style = #'petrucci
+ \override Staff.TimeSignature.style = #'mensural
\clef "petrucci-g"
\[ c'\maxima g \]
\[ d\longa
- \override NoteHead #'ligature-flexa = ##t
- \once \override NoteHead #'flexa-width = #3.2
+ \override NoteHead.ligature-flexa = ##t
+ \once \override NoteHead.flexa-width = #3.2
c\breve f e d \]
\[ c'\maxima d'\longa \]
\[ e'1 a g\breve \]
@code{vaticana-do3}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'vaticana.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'vaticana.punctum
\clef "vaticana-do2"
c
@end lilypond
@code{vaticana-fa1}, @code{vaticana-fa2}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'vaticana.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'vaticana.punctum
\clef "vaticana-fa2"
c
@end lilypond
@code{medicaea-do3}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'medicaea.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'medicaea.punctum
\clef "medicaea-do2"
c
@end lilypond
@code{medicaea-fa1}, @code{medicaea-fa2}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'medicaea.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'medicaea.punctum
\clef "medicaea-fa2"
c
@end lilypond
@code{hufnagel-do3}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'hufnagel.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-do2"
c
@end lilypond
@code{hufnagel-fa1}, @code{hufnagel-fa2}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'line-count = #4
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'hufnagel.punctum
+ \override Staff.StaffSymbol.line-count = #4
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-fa2"
c
@end lilypond
@code{hufnagel-do-fa}
@tab
@lilypond[relative=1,notime]
- \override Staff.StaffSymbol #'color = #red
- \override Staff.LedgerLineSpanner #'color = #red
- \override Voice.Stem #'transparent = ##t
- \override Voice.Flag #'transparent = ##t
- \override NoteHead #'style = #'hufnagel.punctum
+ \override Staff.StaffSymbol.color = #red
+ \override Staff.LedgerLineSpanner.color = #red
+ \override Voice.Stem.transparent = ##t
+ \override Voice.Flag.transparent = ##t
+ \override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-do-fa"
c
@end lilypond
@code{KeySignature}, respectively; e.g.:
@example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
#alteration-mensural-glyph-name-alist
@end example
\score {
<<
\context VaticanaVoice {
- \override TextScript #'padding = #3
+ \override TextScript.padding = #3
g a g
s^\markup { "divisio minima" }
\divisioMinima
\include "gregorian.ly"
\score {
\new VaticanaVoice {
- \override TextScript #'font-family = #'typewriter
- \override TextScript #'font-shape = #'upright
- \override Script #'padding = #-0.1
+ \override TextScript.font-family = #'typewriter
+ \override TextScript.font-shape = #'upright
+ \override Script.padding = #-0.1
a\ictus_"ictus " \bar "" \break
a\circulus_"circulus " \bar "" \break
a\semicirculus_"semicirculus " \bar "" \break
\new KievanVoice = "melody" \transpose c c' {
\cadenzaOn
c4 c c c c2 b,\longa
- \bar "kievan"
+ \bar "k"
}
\new Lyrics \lyricsto "melody" {
Го -- спо -- ди по -- ми -- луй.
@lilypond[quote,relative=1,notime,verbatim]
\clef "kievan-do"
- \override NoteHead #'style = #'kievan
+ \override NoteHead.style = #'kievan
c
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim]
\autoBeamOff
\cadenzaOn
-\override NoteHead #'style = #'kievan
+\override NoteHead.style = #'kievan
b'1 b'2 b'4 b'8 b'\breve b'\longa
@end lilypond
@lilypond[quote,relative=1,notime,verbatim]
\clef "kievan-do"
-\override NoteHead #'style = #'kievan
-\override Accidental #'glyph-name-alist =
+\override NoteHead.style = #'kievan
+\override Accidental.glyph-name-alist =
#alteration-kievan-glyph-name-alist
bes' dis,
@end lilypond
A decorative figure is commonly placed at the end of a piece of
Kievan notation, which may be called the Kievan final bar line.
-It can be invoked as @code{\bar "kievan"}.
+It can be invoked as @code{\bar "k"}.
@lilypond[quote,relative=1,notime,verbatim]
\clef "kievan-do"
- \override NoteHead #'style = #'kievan
- c \bar "kievan"
+ \override NoteHead.style = #'kievan
+ c \bar "k"
@end lilypond
@seealso
However, in some transcription styles, stems are used
occasionally, for example to indicate the transition from a
single-tone recitative to a fixed melodic gesture. In these cases,
-one can use either @code{\override Stem #'transparent = ##t} or
-@code{\override Stem #'length = #0} instead, and restore the stem
-when needed with the corresponding @code{\once \override Stem
-#'transparent = ##f} (see example below). When using stems that
-carry flags, make sure to set @code{\override Flag #'transparent
+one can use either @code{\override Stem.transparent = ##t} or
+@code{\override Stem.length = #0} instead, and restore the stem
+when needed with the corresponding @code{\once \override Stem.transparent = ##f} (see example below). When using stems that
+carry flags, make sure to set @code{\override Flag.transparent
= ##t} as well.
@b{Timing.} For unmetered chant, there are several alternatives.
To remove the bar lines, the radical approach is to @code{\remove}
the Bar_engraver from the Staff context. Again, one may want to
-use @code{\override BarLine #'transparent = ##t} instead, if an
+use @code{\override BarLine.transparent = ##t} instead, if an
occasional barline is wanted.
A common type of transcription is recitativic chant where the
}
verba = \lyricmode {
- \once \override LyricText #'self-alignment-X = #-1
+ \once \override LyricText.self-alignment-X = #-1
"Noctem quietam et" fi -- nem per -- fec -- tum
- \once \override LyricText #'self-alignment-X = #-1
+ \once \override LyricText.self-alignment-X = #-1
"concedat nobis Dominus" om -- ni -- po -- tens.
}
\score {
\Staff
\remove "Time_signature_engraver"
\remove "Bar_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
}
}
}
chant = \relative c' {
\clef "G_8"
\set Score.timing = ##f
- c\breve \override NoteHead #'transparent = ##t c c c c c
- \revert NoteHead #'transparent
- \override Stem #'transparent = ##f \stemUp c4 b4 a
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t c2 c4 \divisioMaior
- c\breve \override NoteHead #'transparent = ##t c c c c c c c
- \revert NoteHead #'transparent c4 c f, f \finalis
+ c\breve \override NoteHead.transparent = ##t c c c c c
+ \revert NoteHead.transparent
+ \override Stem.transparent = ##f \stemUp c4 b4 a
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t c2 c4 \divisioMaior
+ c\breve \override NoteHead.transparent = ##t c c c c c c c
+ \revert NoteHead.transparent c4 c f, f \finalis
}
verba = \lyricmode {
\context {
\Staff
\remove "Time_signature_engraver"
- \override BarLine #'transparent = ##t
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override BarLine.transparent = ##t
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
}
}
}
@lilypond[verbatim,quote]
spiritus = \relative c' {
\time 1/4
- \override Lyrics.LyricText #'X-extent = #'(0 . 3)
+ \override Lyrics.LyricText.X-extent = #'(0 . 3)
d4 \times 2/3 { f8 a g } g a a4 g f8 e
d4 f8 g g8 d f g a g f4 g8 a a4 s
\times 2/3 { g8 f d } e f g a g4
\context {
\Staff
\remove "Time_signature_engraver"
- \override BarLine #'X-extent = #'(-1 . 1)
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Beam #'transparent = ##t
- \override BarLine #'transparent = ##t
- \override TupletNumber #'transparent = ##t
+ \override BarLine.X-extent = #'(-1 . 1)
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Beam.transparent = ##t
+ \override BarLine.transparent = ##t
+ \override TupletNumber.transparent = ##t
}
}
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Changing defaults
@chapter Changing defaults
\layout {
\context {
\Staff
- \override Stem #'thickness = #4.0
+ \override Stem.thickness = #4.0
}
}
}
@item
A predefined command such as @code{\dynamicUp} or a music
-expression like @code{\accidentalStyle "dodecaphonic"}
+expression like @code{\accidentalStyle dodecaphonic}
@lilypond[quote,verbatim]
\score {
}
\context {
\Staff
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
}
}
}
}
}
\layout {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\set fontSize = #-4
- \override Voice.Stem #'thickness = #4.0
+ \override Voice.Stem.thickness = #4.0
}
}
@end lilypond
\new Staff {
\new Voice
\with {
- \override Stem #'thickness = #4.0
+ \override Stem.thickness = #4.0
}
{
\relative c'' {
}
}
\new Staff
- \with { \accidentalStyle "dodecaphonic" }
+ \with { \accidentalStyle dodecaphonic }
{
\new Voice
\with { \dynamicUp }
\consists "Text_engraver"
\consists "Pitch_squash_engraver"
squashedPosition = #0
- \override NoteHead #'style = #'slash
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override NoteHead.style = #'slash
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
\alias Voice
}
\context { \Staff
The notes look like a slash, and have no stem,
@example
-\override NoteHead #'style = #'slash
-\override Stem #'transparent = ##t
-\override Flag #'transparent = ##t
+\override NoteHead.style = #'slash
+\override Stem.transparent = ##t
+\override Flag.transparent = ##t
@end example
All these plug-ins have to cooperate, and this is achieved with a
\consists "Text_engraver"
\consists "Pitch_squash_engraver"
squashedPosition = #0
- \override NoteHead #'style = #'slash
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override NoteHead.style = #'slash
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
\alias Voice
@}
@end example
3 staff spaces of white
between the note and the fingering:
@example
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
@end example
Inserting this command before the Fingering object is created,
i.e., before @code{c2}, yields the following result:
@lilypond[quote,relative=2,verbatim]
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
c-2
\stemUp
f
The command
@verbatim
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
@end verbatim
@noindent
@lilypond[quote,verbatim,relative=2]
c4
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
c4
c4
c4
@lilypond[quote,verbatim,relative=2]
c4
-\once \override Stem #'thickness = #4.0
+\once \override Stem.thickness = #4.0
c4
c4
@end lilypond
when the object is created. In this example,
@lilypond[quote,verbatim,relative=2]
-\override Slur #'thickness = #3.0
+\override Slur.thickness = #3.0
c8[( c
-\override Beam #'beam-thickness = #0.6
+\override Beam.beam-thickness = #0.6
c8 c])
@end lilypond
@code{\revert} in the next example does not do anything.
@example
-\override Voice.Stem #'thickness = #4.0
-\revert Staff.Stem #'thickness
+\override Voice.Stem.thickness = #4.0
+\revert Staff.Stem.thickness
@end example
Some tweakable options are called @q{subproperties} and reside inside
such as
@example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
+\override Stem.details.beamed-lengths = #'(4 4 3)
@end example
@end ignore
to see the settings for each grob description. Grob descriptions
are modified with @code{\override}.
-@code{\override} is actually a shorthand;
+The syntax for the @code{\override} command is
@example
-\override @var{context}.@var{GrobName} #'@var{property} = #@var{value}
+\override [@var{context}.]@var{GrobName}.@var{property} = #@var{value}
@end example
-@noindent
-is more or less equivalent to
-
-@c leave this long line -gp
-@example
-\set @var{context}.@var{GrobName} =
- #(cons (cons '@var{property} @var{value})
- <previous value of @var{context}.@var{GrobName}>)
-@end example
-
-The value of @code{context}.@code{GrobName} (the alist) is used to initialize
-the properties of individual grobs. Grobs have
-properties, named in Scheme style, with
-@code{dashed-words}. The values of grob properties change
-during the formatting process: formatting basically amounts
-to computing properties using callback functions.
-
For example, we can increase the thickness of a note stem by
overriding the @code{thickness} property of the @code{Stem}
object:
@lilypond[quote,verbatim,relative=2]
c4 c
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
c4 c
@end lilypond
context is used:
@lilypond[quote,verbatim,relative=2]
-{ \override Staff.Stem #'thickness = #3.0
+{ \override Staff.Stem.thickness = #3.0
<<
{
e4 e
- \override Stem #'thickness = #0.5
+ \override Stem.thickness = #0.5
e4 e
} \\ {
c4 c c c
}
@end lilypond
+Some tweakable options are called @q{subproperties} and reside inside
+properties. To tweak those, use commands in the form
+
+@example
+\override Stem.details.beamed-lengths = #'(4 4 3)
+@end example
+
+or to modify the ends of spanners, use a form like these
+
+@example
+\override TextSpanner.bound-details.left.text = #"left text"
+\override TextSpanner.bound-details.right.text = #"right text"
+@end example
+
@funindex \revert
@cindex reverting overrides
@cindex overrides, reverting
-The effects of @code{\override} can be undone by @code{\revert}:
+The effects of @code{\override} can be undone by @code{\revert}.
+
+The syntax for the @code{\revert} command is
+
+@example
+\revert [@var{context}.]@var{GrobName}.@var{property}
+@end example
+
+For example,
@lilypond[quote,verbatim,relative=2]
c4
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
c4 c
-\revert Voice.Stem #'thickness
+\revert Voice.Stem.thickness
c4
@end lilypond
<<
{
e4
- \override Staff.Stem #'thickness = #3.0
+ \override Staff.Stem.thickness = #3.0
e4 e e
} \\ {
c4 c c
- \revert Staff.Stem #'thickness
+ \revert Staff.Stem.thickness
c4
}
>>
{
<<
{
- \override Stem #'thickness = #3.0
+ \override Stem.thickness = #3.0
e4 e e e
} \\ {
c4
- \once \override Stem #'thickness = #3.0
+ \once \override Stem.thickness = #3.0
c4 c c
}
>>
Commands which change output generally look like
@example
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
@end example
@noindent
@item a sensible value: here @code{3.0}.
@end itemize
-Some tweakable options are called @q{subproperties} and reside inside
-properties. To tweak those, use commands in the form
-
-@example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
-@end example
-
@cindex internal documentation
@cindex finding graphical objects
@cindex graphical object descriptions
syntax:
@example
-\tweak @var{layout-object} #'@var{grob-property} @var{value}
+\tweak [@var{layout-object}.]@var{grob-property} @var{value}
@end example
Specifying @var{layout-object} is optional.
@lilypond[relative=2,verbatim,quote]
< c
- \tweak #'color #red
+ \tweak color #red
d
g
- \tweak #'duration-log #1
+ \tweak duration-log #1
a
> 4
--\tweak #'padding #8
+-\tweak padding #8
-^
@end lilypond
-But the main use of the @code{\tweak} command is to modify just
+The main use of the @code{\tweak} command is to modify just
one of a number of notation elements which start at the same musical
moment, like the notes of a chord, or tuplet brackets which start
at the same time.
So, this works:
@lilypond[relative=2,verbatim,quote]
-<\tweak #'color #red c>4
+<\tweak color #red c>4
@end lilypond
@noindent
but this does not:
@lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
+\tweak color #red c4
@end lilypond
@end ignore
@lilypond[relative=2,verbatim,quote]
< c
- \tweak #'color #red
+ \tweak color #red
d
g
- \tweak #'duration-log #1
+ \tweak duration-log #1
a
> 4
@end lilypond
@code{\tweak} can be used to modify slurs:
@lilypond[verbatim,quote,relative=1]
-c-\tweak #'thickness #5 ( d e f)
+c-\tweak thickness #5 ( d e f)
@end lilypond
inside of the @code{EventChord}:
@lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
-\tweak #'color #red <c e>4
-<\tweak #'color #red c e>4
+\tweak color #red c4
+\tweak color #red <c e>4
+<\tweak color #red c e>4
@end lilypond
The simple @code{\tweak} command cannot be used to modify any object
@code{NoteHead} layout objects rather than by music elements in the
input stream.
-Such indirectly created layout objects can be tweaked using the explicit
-form of the @code{\tweak} command:
+Such indirectly created layout objects can be tweaked using the form
+of the @code{\tweak} command in which the grob name is specified
+explicitly:
@lilypond[relative=2,verbatim,quote]
-\tweak Stem #'color #red
-\tweak Beam #'color #green c8 e
-<c e \tweak Accidental #'font-size #-3 ges>4
+\tweak Stem.color #red
+\tweak Beam.color #green c8 e
+<c e \tweak Accidental.font-size #-3 ges>4
@end lilypond
@code{\tweak} cannot be used to modify clefs or time
@lilypond[verbatim,quote,relative=1]
c
--\tweak #'style #'dashed-line
--\tweak #'dash-fraction #0.2
--\tweak #'thickness #3
--\tweak #'color #red
+-\tweak style #'dashed-line
+-\tweak dash-fraction #0.2
+-\tweak thickness #3
+-\tweak color #red
\glissando
f'
@end lilypond
% reduced space between staves
\new PianoStaff \with {
% this is the nested declaration
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #7
} <<
\new Staff { \clef treble c''1 }
\new Staff { \clef bass c1 }
@lilypond[quote,verbatim]
\new PianoStaff \with {
- \override StaffGrouper #'staff-staff-spacing =
+ \override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 0)
(minimum-distance . 0)
(padding . 0)
declarations are equivalent:
@example
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 7))
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 7)
(minimum-distance . 0)
(padding . 0)
be determined automatically by LilyPond, but in some cases it may
be desirable to force a particular direction or placement.
-@strong{Articulation direction indicators}
+@menu
+* Articulation direction indicators::
+* The direction property::
+@end menu
+
+@node Articulation direction indicators
+@unnumberedsubsubsec Articulation direction indicators
By default some directions are always up or always down (e.g.
dynamics or fermata), while other things can alternate between
c2^( c)
@end lilypond
-@strong{The direction property}
+@node The direction property
+@unnumberedsubsubsec The direction property
The position or direction of many layout objects is controlled by the
@code{direction} property.
@lilypond[verbatim,quote,relative=1]
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
+ \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
}
{ a4 e' f b | d1 }
@end lilypond
@lilypond[verbatim,quote,relative=1]
\new Staff \with {
- \override StaffSymbol #'width = #23
+ \override StaffSymbol.width = #23
}
{ a4 e' f b | d1 }
@end lilypond
those that draw a straight line between the two objects, support in
addition the @code{line-spanner-interface}.
+@menu
+* Using the spanner-interface::
+* Using the line-spanner-interface::
+@end menu
+
+@node Using the spanner-interface
@unnumberedsubsubsec Using the @code{spanner-interface}
This interface provides two properties that apply to several spanners.
a~a
a
% increase the length of the tie
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
~a
@end lilypond
\compressFullBarRests
R1*23
% increase the length of the rest bar
-\once \override MultiMeasureRest #'minimum-length = #20
+\once \override MultiMeasureRest.minimum-length = #20
R1*23
a1
@end lilypond
@lilypond[verbatim,quote,relative=2]
a \< a a a \!
% increase the length of the hairpin
-\override Hairpin #'minimum-length = #20
+\override Hairpin.minimum-length = #20
a \< a a a \!
@end lilypond
@lilypond[verbatim,quote,relative=2]
a( a)
a
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
( a)
a\( a\)
a
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
\( a\)
@end lilypond
e \glissando c'
% not effective alone
-\once \override Glissando #'minimum-length = #20
+\once \override Glissando.minimum-length = #20
e, \glissando c'
% effective only when both overrides are present
-\once \override Glissando #'minimum-length = #20
-\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Glissando.minimum-length = #20
+\once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
e, \glissando c'
@end lilypond
@lilypond[verbatim,quote,relative=1]
% not effective alone
-\once \override Beam #'minimum-length = #20
+\once \override Beam.minimum-length = #20
e8 e e e
% effective only when both overrides are present
-\once \override Beam #'minimum-length = #20
-\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Beam.minimum-length = #20
+\once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
e8 e e e
@end lilypond
@lilypond[verbatim,quote,relative=2]
a \< a a a a \! a a a \break
-\override Hairpin #'to-barline = ##f
+\override Hairpin.to-barline = ##f
a \< a a a a \! a a a
@end lilypond
or on other spanners for which terminating on the bar line would
not be meaningful.
+@node Using the line-spanner-interface
@unnumberedsubsubsec Using the @code{line-spanner-interface}
Objects which support the @code{line-spanner-interface} include
@lilypond[relative=2,quote,verbatim]
e2 \glissando b
-\once \override Glissando #'(bound-details left Y) = #3
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.left.Y = #3
+\once \override Glissando.bound-details.right.Y = #-2
e2 \glissando b
@end lilypond
sub-lists of @code{bound-details}. For example:
@lilypond[relative=2,ragged-right,verbatim,quote]
-\override Glissando #'breakable = ##t
-\override Glissando #'(bound-details right-broken Y) = #-3
+\override Glissando.breakable = ##t
+\override Glissando.bound-details.right-broken.Y = #-3
c1 \glissando \break
f1
@end lilypond
to put @i{cresc.}, @i{tr} and other text on horizontal spanners.
@lilypond[quote,ragged-right,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
c2\startTextSpan b c a\stopTextSpan
@end lilypond
relative to the end point of the line:
@lilypond[relative=1,quote,verbatim]
-\override TextSpanner
- #'(bound-details left stencil-align-dir-y) = #-2
-\override TextSpanner
- #'(bound-details right stencil-align-dir-y) = #UP
-
-\override TextSpanner
- #'(bound-details left text) = #"ggg"
-\override TextSpanner
- #'(bound-details right text) = #"hhh"
+\override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
+\override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
+
+\override TextSpanner.bound-details.left.text = #"ggg"
+\override TextSpanner.bound-details.right.text = #"hhh"
c4^\startTextSpan c c c \stopTextSpan
@end lilypond
@lilypond[quote,verbatim,relative=1]
a1 a
-\override Score.BarLine #'stencil = ##f
+\override Score.BarLine.stencil = ##f
a a
-\revert Score.BarLine #'stencil
+\revert Score.BarLine.stencil
a a a
@end lilypond
@lilypond[quote,verbatim,relative=2]
a4 a
-\once \override NoteHead #'transparent = ##t
+\once \override NoteHead.transparent = ##t
a a
@end lilypond
here:
@lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
+\override Staff.Clef.color = #white
a1
@end lilypond
@code{layer}, say @w{@code{-1}}, so that it is drawn earlier:
@lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
-\override Staff.Clef #'layer = #-1
+\override Staff.Clef.color = #white
+\override Staff.Clef.layer = #-1
a1
@end lilypond
f4 g a b
f4 g a b
% Remove bar line at the end of the current line
-\once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
+\once \override Score.BarLine.break-visibility = #'#(#f #t #t)
\break
f4 g a b
f4 g a b
\key g \major
f4 g a b
% Try to remove all key signatures
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b
\break
\key g \major
f4 g a b
\set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b \break
f4 g a b
f4 g a b
\set Staff.explicitKeySignatureVisibility = #all-invisible
\set Staff.printKeyCancellation = ##f
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
\key bes \major
f4 g a b \break
f4 g a b
@lilypond[relative=2,ragged-right,verbatim,quote]
d2 \glissando d'2
-\once \override Glissando #'style = #'dashed-line
+\once \override Glissando.style = #'dashed-line
d,2 \glissando d'2
-\override Glissando #'style = #'dotted-line
+\override Glissando.style = #'dotted-line
d,2 \glissando d'2
-\override Glissando #'style = #'zigzag
+\override Glissando.style = #'zigzag
d,2 \glissando d'2
-\override Glissando #'style = #'trill
+\override Glissando.style = #'trill
d,2 \glissando d'2
@end lilypond
@c TODO Complete
@lilypond[relative=2,ragged-right,verbatim,quote]
e2 \glissando f
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.right.Y = #-2
e2 \glissando f
@end lilypond
@lilypond[quote,verbatim,relative=1]
g4\< e' d' f\!
-\override Hairpin #'rotation = #'(20 -1 0)
+\override Hairpin.rotation = #'(20 -1 0)
g,,4\< e' d' f\!
@end lilypond
of the text too high.
@lilypond[quote,verbatim,relative=1]
-\override TextScript #'outside-staff-priority = ##f
+\override TextScript.outside-staff-priority = ##f
g4^\markup { \rotate #30 "a G" }
b^\markup { \rotate #30 "a B" }
des^\markup { \rotate #30 "a D-Flat" }
@lilypond[verbatim,quote,relative=2]
a-3
a
--\tweak #'X-offset #0
--\tweak #'Y-offset #0
+-\tweak X-offset #0
+-\tweak Y-offset #0
-3
a
--\tweak #'X-offset #-1
--\tweak #'Y-offset #1
+-\tweak X-offset #-1
+-\tweak Y-offset #1
-3
@end lilypond
@node Using the self-alignment-interface
@unnumberedsubsubsec Using the @code{self-alignment-interface}
-@emph{Self-aligning objects horizontally}
+@subsubsubheading Self-aligning objects horizontally
The horizontal alignment of an object which supports the
@code{self-alignment-interface} is controlled by the value of
@lilypond[quote,verbatim,relative=1]
a'
--\tweak #'self-alignment-X #-1
+-\tweak self-alignment-X #-1
^"left-aligned"
--\tweak #'self-alignment-X #0
+-\tweak self-alignment-X #0
^"center-aligned"
--\tweak #'self-alignment-X #RIGHT
+-\tweak self-alignment-X #RIGHT
^"right-aligned"
--\tweak #'self-alignment-X #-2.5
+-\tweak self-alignment-X #-2.5
^"aligned further to the right"
@end lilypond
-@emph{Self-aligning objects vertically}
+@subsubsubheading Self-aligning objects vertically
Objects may be aligned vertically in an analogous way to aligning
them horizontally if the @code{Y-offset} property is set to
@code{CENTER}, and @code{UP} may be substituted for @w{@code{-1}},
@code{0}, and @code{1}, respectively.
-@emph{Self-aligning objects in both directions}
+@subsubsubheading Self-aligning objects in both directions
By setting both @code{X-offset} and @code{Y-offset}, an object may
be aligned in both directions simultaneously.
@lilypond[quote,verbatim,relative=2]
a
--\tweak #'self-alignment-X #0.5 % move horizontally left
--\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
--\tweak #'self-alignment-Y #-1 % move vertically up
+-\tweak self-alignment-X #0.5 % move horizontally left
+-\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
+-\tweak self-alignment-Y #-1 % move vertically up
-3 % third finger
@end lilypond
@lilypond[verbatim,quote,relative=1]
% The rehearsal mark will be centered above the Clef
-\override Score.RehearsalMark #'break-align-symbols = #'(clef)
+\override Score.RehearsalMark.break-align-symbols = #'(clef)
\key a \major
\clef treble
\mark "↓"
e1
% The rehearsal mark will be centered above the Time Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
+\override Score.RehearsalMark.break-align-symbols = #'(time-signature)
\key a \major
\clef treble
\time 3/4
\mark "↓"
e2.
% The rehearsal mark will be centered above the Breath Mark
-\override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
+\override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
\key a \major
\clef treble
\time 4/4
@lilypond[verbatim,quote,relative=1]
% The rehearsal mark will be centered above the Key Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
e1
% The rehearsal mark will be centered above the Clef
\set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef bass
\mark "↓"
% The rehearsal mark will be centered above the Bar Line
\set Staff.explicitKeySignatureVisibility = #all-invisible
\set Staff.explicitClefVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
@lilypond[verbatim,quote,relative=1]
% The RehearsalMark will be centered above the Key Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\key a \major
\clef treble
\time 4/4
\mark "↓"
e1
% The RehearsalMark will be aligned with the left edge of the Key Signature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
+\once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
\mark "↓"
\key a \major
e1
% The RehearsalMark will be aligned with the right edge of the Key Signature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
+\once \override Score.KeySignature.break-align-anchor-alignment = #RIGHT
\key a \major
\mark "↓"
e1
@lilypond[verbatim,quote,relative=1]
% The RehearsalMark will be aligned with the left edge of the Key Signature
% and then shifted right by 3.5 staff-spaces
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
-\once \override Score.KeySignature #'break-align-anchor = #3.5
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
+\once \override Score.KeySignature.break-align-anchor = #3.5
\key a \major
\mark "↓"
e1
% The RehearsalMark will be aligned with the left edge of the Key Signature
% and then shifted left by 2 staff-spaces
-\once \override Score.KeySignature #'break-align-anchor = #-2
+\once \override Score.KeySignature.break-align-anchor = #-2
\key a \major
\mark "↓"
e1
@lilypond[verbatim,quote]
XinO = {
- \once \override NoteHead #'stencil = #ly:text-interface::print
- \once \override NoteHead #'text = \markup {
+ \once \override NoteHead.stencil = #ly:text-interface::print
+ \once \override NoteHead.text = \markup {
\combine
\halign #-0.7 \draw-circle #0.85 #0.2 ##f
\musicglyph #"noteheads.s2cross"
@cindex Bézier curves, control points
@cindex control points, Bézier curves
-Ties, slurs and phrasing slurs are drawn as third-order Bézier
-curves. If the shape of the tie or slur which is calculated
-automatically is not optimum, the shape may be modified manually by
-explicitly specifying the four control points required to define
-a third-order Bézier curve.
+@code{Tie}s, @code{Slur}s, @code{PhrasingSlur}s,
+@code{LaissezVibrerTie}s and @code{RepeatTie}s are all drawn as
+third-order Bézier curves. If the shape of the tie or slur which
+is calculated automatically is not optimum, the shape may be
+modified manually in two ways:
+
+@enumerate a
+@item
+by specifying the displacements to be made to the control points
+of the automatically calculated Bézier curve, or
+
+@item
+by explicitly specifying the positions of the four control points
+required to define the wanted curve.
+@end enumerate
+
+Both methods are explained below. The first method is more suitable
+if only slight adjustments to the curve are required; the second may
+be better for creating curves which are related to just a single
+note.
+
+@subsubsubheading Cubic Bézier curves
Third-order or cubic Bézier curves are defined by four control
points. The first and fourth control points are precisely the
head towards the third and continuing to bend over to head towards
the fourth, arriving there travelling directly from the third
control point. The curve is entirely contained in the
-quadrilateral defined by the four control points.
+quadrilateral defined by the four control points. Translations,
+rotations and scaling of the control points all result in exactly
+the same operations on the curve.
+
+@subsubsubheading Specifying displacements from current control points
-Here is an example of a case where the tie is not optimum, and
-where @code{\tieDown} would not help.
+@cindex shaping slurs and ties
+@funindex \shape
+
+In this example the automatic placement of the tie is not optimum,
+and @code{\tieDown} would not help.
@lilypond[verbatim,quote,relative=1]
<<
>>
@end lilypond
-One way of improving this tie is to manually modify its control
-points, as follows.
+Adjusting the control points of the tie with @code{\shape} allows
+the collisions to be avoided.
-The coordinates of the Bézier control points are specified in units
-of staff-spaces. The X@tie{}coordinate is relative to the reference
-point of the note to which the tie or slur is attached, and the
-Y@tie{}coordinate is relative to the staff center line. The
-coordinates are entered as a list of four pairs of decimal numbers
-(reals). One approach is to estimate the coordinates of the two
-end points, and then guess the two intermediate points. The optimum
-values are then found by trial and error.
+The syntax of @code{\shape} is
-It is useful to remember that a symmetric curve requires symmetric
-control points, and that Bézier curves have the useful property that
-transformations of the curve such as translation, rotation and
-scaling can be achieved by applying the same transformation to the
-curve's control points.
+@example
+[-]@code{\shape} @var{displacements} @var{item}
+@end example
-For the example above the following override gives a satisfactory
-tie. Note the placement -- it has to be immediately before the note
-to which the start of the tie (or slur) is attached.
+This will reposition the control-points of @var{item} by the amounts
+given by @var{displacements}. The @var{displacements} argument is a
+list of number pairs or a list of such lists. Each element of a pair
+represents the displacement of one of the coordinates of a
+control-point. If @var{item} is a string, the result is
+@code{\once\override} for the specified grob type. If @var{item} is
+a music expression, the result is the same music expression with an
+appropriate tweak applied.
+
+In other words, the @code{\shape} function can act as either a
+@code{\once\override} command or a @code{\tweak} command depending
+on whether the @var{item} argument is a grob name, like @qq{Slur},
+or a music expression, like @qq{(}. The @var{displacements} argument
+specifies the displacements of the four control points as a list of
+four pairs of (dx . dy) values in units of staff-spaces (or a list
+of such lists if the curve has more than one segment).
+
+The leading hyphen is required if and only if the @code{\tweak} form
+is being used.
+
+So, using the same example as above and the @code{\once\override}
+form of @code{\shape}, this will raise the tie by half a staff-space:
@lilypond[verbatim,quote,relative=1]
<<
{
- \once \override Tie
- #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
- e1 ~ e
+ \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
+ e1~ e
}
\\
{ r4 <g c,> <g c,> <g c,> }
>>
@end lilypond
+This positioning of the tie is better, but maybe it should be raised
+more in the center. The following example does this, this time using
+the alternative @code{\tweak} form:
+
+@lilypond[verbatim,quote,relative=1]
+<<
+ {
+ e1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e
+ }
+\\
+ { r4 <g c,> <g c,> <g c,> }
+>>
+@end lilypond
+
+Changes to the horizontal positions of the control points may be made
+in the same way, and two different curves starting at the same
+musical moment may also be shaped:
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+c8(\( a) a'4 e c\)
+\shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur
+\shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur
+c8(\( a) a'4 e c\)
+@end lilypond
+
+The @code{\shape} function can also displace the control points of
+curves which stretch across line breaks. Each piece of the broken
+curve can be given its own list of offsets. If changes to a
+particular segment are not needed, the empty list can serve as a
+placeholder. In this example the line break makes the single slur
+look like two:
+
+@lilypond[verbatim,quote,ragged-right,relative=1]
+c4( f g c
+\break
+d,4 c' f, c)
+@end lilypond
+
+Changing the shapes of the two halves of the slur makes it clearer
+that the slur continues over the line break:
+
+@lilypond[verbatim,quote,ragged-right,relative=1]
+% () may be used as a shorthand for ((0 . 0) (0 . 0) (0 . 0) (0 . 0))
+% if any of the segments does not need to be changed
+\shape #'(
+ (( 0 . 0) (0 . 0) (0 . 0) (0 . 1))
+ ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
+ ) Slur
+c4( f g c
+\break
+d,4 c' f, c)
+@end lilypond
+
+If an S-shaped curve is required the control points must always be
+adjusted manually --- LilyPond will never select such shapes
+automatically.
+
+@lilypond[verbatim,quote,relative=2]
+c8( e b-> f d' a e-> g)
+\shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur
+c8\( e b-> f d' a e-> g\)
+@end lilypond
+
+@subsubsubheading Specifying control points explicitly
+
+The coordinates of the Bézier control points are specified in units
+of staff-spaces. The X@tie{}coordinate is relative to the reference
+point of the note to which the tie or slur is attached, and the
+Y@tie{}coordinate is relative to the staff center line. The
+coordinates are specified as a list of four pairs of decimal numbers
+(reals). One approach is to estimate the coordinates of the two
+end points, and then guess the two intermediate points. The optimum
+values are then found by trial and error. Be aware that these values
+may need to be manually adjusted if any further changes are made to
+the music or the layout.
+
+One situation where specifying the control points explicitly is
+preferable to specifying displacements is when they need to be
+specified relative to a single note. Here is an example of this.
+It shows one way of indicating a slur extending into alternative
+sections of a volta repeat.
+
+@lilypond[verbatim,quote,relative=2]
+c1
+\repeat volta 3 { c4 d( e f }
+\alternative {
+ { g2) d }
+ {
+ g2
+ % create a slur and move it to a new position
+ % the <> is just an empty chord to carry the slur termination
+ -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> )
+ f,
+ }
+ {
+ e'2
+ % create a slur and move it to a new position
+ -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> )
+ f,
+ }
+}
+@end lilypond
+
@knownissues
It is not possible to modify shapes of ties or slurs by changing
the @code{control-points} property if there are multiple ties or slurs
'(-0.5 . 0.5)))))
squareLineCircleSpace = {
- \override NoteHead #'stencil = #square-line-circle-space
+ \override NoteHead.stencil = #square-line-circle-space
}
smartSquareLineCircleSpace = {
\squareLineCircleSpace
- \override NoteHead #'Y-extent =
+ \override NoteHead.Y-extent =
#(ly:make-unpure-pure-container
ly:grob::stencil-height
(lambda (grob start end) (ly:grob::stencil-height grob)))
\new Voice \with { \remove "Stem_engraver" }
\relative c'' {
\squareLineCircleSpace
- cis4 ces cisis c
+ cis4 ces disis d
\smartSquareLineCircleSpace
- cis4 ces cisis c
+ cis4 ces disis d
}
@end lilypond
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = #padding
+ \once \override TextScript.padding = #padding
#})
\relative c''' {
(parser location note)
(ly:music?)
#{
- \tweak NoteHead #'stencil #ly:text-interface::print
- \tweak NoteHead #'text
+ \tweak NoteHead.stencil #ly:text-interface::print
+ \tweak NoteHead.text
\markup \musicglyph #"custodes.mensural.u0"
- \tweak Stem #'stencil ##f
+ \tweak Stem.stencil ##f
#note
#})
(parser location padding tempotext)
(number? markup?)
#{
- \once \override Score.MetronomeMark #'padding = #padding
+ \once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@c TODO: add tablature.
@tab
@lilypond[relative=2,notime]
\set Staff.autoBeaming = ##f
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
c1 c2 c8 c16
@end lilypond
@tab augmentation dots
@tab
@lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
c4. c4..
@end lilypond
@tab time signature
@tab
@lilypond[relative=1]
-\override Staff.Clef #'stencil = #empty-stencil
+\override Staff.Clef.stencil = #empty-stencil
\time 3/4
s4_" "
\time 4/4
@tab rest
@tab
@lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
r4 r8
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Chord notation
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:m c:m7
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:dim c:dim7
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:aug
}
@end lilypond
@tab
@lilypond[line-width=4\cm, noragged-right]
\chordmode {
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c1:maj c:maj7
}
@end lilypond
In addition to the different naming systems, different note names
are used for the root in different languages. The predefined
-variables @code{\germanChords}, @code{\semiGermanChords},
+commands @code{\germanChords}, @code{\semiGermanChords},
@code{\italianChords} and @code{\frenchChords} set these variables.
The effect is demonstrated here:
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Editorial annotations
@section Editorial annotations
@lilypond[verbatim,quote,relative=2]
\set fontSize = #3
c4.-> d8---3
-\override NoteHead #'font-size = #-4
+\override NoteHead.font-size = #-4
c4.-> d8---3
-\override Script #'font-size = #2
+\override Script.font-size = #2
c4.-> d8---3
-\override Stem #'font-size = #-5
+\override Stem.font-size = #-5
c4.-> d8---3
@end lilypond
are listed in the @ref{List of colors}.
@lilypond[verbatim,quote,relative=2]
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
c4 c
-\override NoteHead #'color = #(x11-color 'LimeGreen)
+\override NoteHead.color = #(x11-color 'LimeGreen)
d
-\override Stem #'color = #blue
+\override Stem.color = #blue
e
@end lilypond
color returned defaults to black.
@lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
\set Staff.instrumentName = \markup {
\with-color #(x11-color 'navy) "Clarinet"
}
gis8 a
-\override Beam #'color = #(x11-color "medium turquoise")
+\override Beam.color = #(x11-color "medium turquoise")
gis a
-\override Accidental #'color = #(x11-color 'DarkRed)
+\override Accidental.color = #(x11-color 'DarkRed)
gis a
-\override NoteHead #'color = #(x11-color "LimeGreen")
+\override NoteHead.color = #(x11-color "LimeGreen")
gis a
% this is deliberate nonsense; note that the stems remain black
-\override Stem #'color = #(x11-color 'Boggle)
+\override Stem.color = #(x11-color 'Boggle)
b2 cis
@end lilypond
@code{rgb-color}.
@lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
\set Staff.instrumentName = \markup {
\with-color #(x11-color 'navy) "Clarinet"
}
-\override Stem #'color = #(rgb-color 0 0 0)
+\override Stem.color = #(rgb-color 0 0 0)
gis8 a
-\override Stem #'color = #(rgb-color 1 1 1)
+\override Stem.color = #(rgb-color 1 1 1)
gis8 a
-\override Stem #'color = #(rgb-color 0 0 0.5)
+\override Stem.color = #(rgb-color 0 0 0.5)
gis4 a
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Expressive marks
@section Expressive marks
creates a @code{MultiMeasureRestText} object.
@lilypond[verbatim,quote,relative=2]
-\override Script #'color = #red
-\override MultiMeasureRestText #'color = #blue
+\override Script.color = #red
+\override MultiMeasureRestText.color = #blue
a2\fermata r\fermata
R1\fermataMarkup
@end lilypond
}
@end lilypond
+To left-align the dynamic text rather than centering it on a note
+use a @code{\tweak}:
+
+@lilypond[verbatim,quote]
+moltoF = \tweak DynamicText.self-alignment-X #LEFT
+ #(make-dynamic-script
+ (markup #:normal-text "molto"
+ #:dynamic "f"))
+\relative c' {
+ <d e>16 <d e>
+ <d e>2..\moltoF <d e>1
+}
+@end lilypond
+
Font settings in markup mode are described in
@ref{Selecting font and font size}.
@lilypondfile[verbatim,quote,texidoc,doctitle]
{changing-the-breath-mark-symbol.ly}
+@cindex tick mark
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{using-a-tick-as-the-breath-mark-symbol.ly}
+
@cindex caesura
@cindex railroad tracks
@lilypondfile[verbatim,quote,texidoc,doctitle]
{making-glissandi-breakable.ly}
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{extending-glissandi-across-repeats.ly}
+
@seealso
Music Glossary:
@rglos{glissando}.
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Fretted string instruments
@section Fretted string instruments
to @code{#t}.
@lilypond[quote,ragged-right,verbatim]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \override Voice.StringNumber.stencil = ##f }
\new StaffGroup <<
\new Staff \relative c {
\clef "treble_8"
@cindex harmonic indications in tablature notation
@cindex tablature and harmonic indications
-@cindex slides in tablature notation
-@cindex tablature and slides
-@cindex chord glissandi
@funindex \harmonic
@funindex \harmonicByFret
@funindex \harmonicByRatio
pitches:
@lilypond[verbatim,quote]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \override Voice.StringNumber.stencil = ##f }
firstHarmonic = {
d'4\4\harmonic
g'4\3\harmonic
@lilypondfile[verbatim,quote,texidoc,doctitle]
{fretted-string-harmonics-in-tablature.ly}
+@cindex slides in tablature notation
+@cindex tablature and slides
+
@lilypondfile[verbatim,quote,texidoc,doctitle]
{slides-in-tablature.ly}
+@cindex chord glissandi
+
@lilypondfile[verbatim,quote,texidoc,doctitle]
{chord-glissando-in-tablature.ly}
@lilypond[quote,ragged-right,verbatim]
<<
\new Voice \with {
- \override StringNumber #'stencil = ##f
+ \override StringNumber.stencil = ##f
} {
\clef "bass_8"
\relative c, {
}
}
\context Staff {
- \override Voice.TextScript
- #'(fret-diagram-details finger-code) = #'below-string
+ \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
\clef "treble_8"
<c e g c' e'>1^\markup {
\fret-diagram-terse #"x;3-3;2-2;o;1-1;o;"
}
\context Staff {
\clef "treble_8"
- \override Voice.TextScript
- #'(fret-diagram-details finger-code) = #'below-string
+ \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
<f, c f a c' f'>1^\markup {
\fret-diagram-verbose #'(
(place-fret 6 1)
(place-fret 1 3 3)
)
}
- <c e g c' e'>1^\markup {
+ <c g c' e' g'>1^\markup {
\fret-diagram-verbose #'(
(capo 3)
(mute 6)
\clef "treble_8"
b16 d g b e
\textSpannerDown
-\override TextSpanner #'(bound-details left text) = #"XII "
+\override TextSpanner.bound-details.left.text = #"XII "
g16\startTextSpan
b16 e g e b g\stopTextSpan
e16 b g d
@lilypond[quote,ragged-right,verbatim]
\relative c' {
\clef "treble_8"
- \override Staff.NoteHead #'style = #'harmonic-mixed
+ \override Staff.NoteHead.style = #'harmonic-mixed
d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node General input and output
@chapter General input and output
circumstances to avoid errors:
@itemize
+
@item Around every opening and closing curly bracket.
+
@item After every command or variable, i.e. every item that
begins with a @code{\} sign.
+
@item After every item that is to be interpreted as a Scheme
expression, i.e. every item that begins with a @code{#}@tie{}sign.
+
@item To separate all elements of a Scheme expression.
-@item In @code{lyricmode} to separate all the terms in both
-@code{\override} and @code{\set} commands. In particular, spaces
-must be used around the dot and the equals sign in commands like
-@code{\override Score . LyricText #'font-size = #5} and before and
-after the entire command.
+
+@item In @code{lyricmode} before and after @code{\set} and
+@code{\override} commands.
@end itemize
@headitem Procedure name @tab Condition tested
@item print-page-number-check-first @tab should this page number be printed?
-@item create-page-number-stencil @tab 'print-page-numbers true?
-@item print-all-headers @tab 'print-all-headers true?
+@item create-page-number-stencil @tab print-page-numbers true?
+@item print-all-headers @tab print-all-headers true?
@item first-page @tab first page in the book?
@item (on-page nmbr) @tab page number = nmbr?
@item last-page @tab last page in the book?
\footnote \markup { \super "$" } #'(0.5 . 1)
\markup { \super "$" \italic " The second note" }
e c4
- \once \override Score.FootnoteItem #'annotation-line = ##f
+ \once \override Score.FootnoteItem.annotation-line = ##f
b-\footnote \markup \tiny "+" #'(0.1 . 0.1)
\markup { \super "+" \italic " Editorial" } \p
}
\header { tagline = ##f }
\relative c'' {
% footnotes may be added to chord constituents
- < \footnote #'(-1 . -3) #'Accidental "Another flat" aes
+ < \single\footnote #'(-1 . -3) "Another flat" Accidental aes
c
- \footnote #'(-1 . 0.5) #'Accidental "A flat" ees
+ \single\footnote #'(-1 . 0.5) "A flat" Accidental ees
>2
- \footnote #'(-1 . 2) #'Stem "A stem" ees2
+ \single\footnote #'(-1 . 2) "A stem" Stem ees2
}
}
@end lilypond
\header { tagline = ##f }
\relative c'' {
r1 |
- \footnote #'(-0.5 . -1) #'TimeSignature "Meter change" \default
+ \footnote #'(-0.5 . -1) "Meter change" Staff.TimeSignature
\time 3/4
- \footnote #'(1 . -1) #'Stem "Chord stem" \default
+ \footnote #'(1 . -1) "Chord stem" Stem
<c e g>4 q q
- \footnote #'(-0.5 . 1) #'BarLine "Bar line" \default
+ \footnote #'(-0.5 . 1) "Bar line" Staff.BarLine
q q
- \footnote #'(0.5 . -1) #'KeySignature "Key change" \default
+ \footnote #'(0.5 . -1) "Key change" Staff.KeySignature
\key c\minor
q
}
@menu
* Creating MIDI files::
+* MIDI Instruments::
* MIDI block::
* What goes into the MIDI output?::
* Repeats in MIDI::
@end example
-@unnumberedsubsubsec Instrument names
-
-@cindex instrument names
-@funindex Staff.midiInstrument
-
-The MIDI instrument to be used is specified by setting the
-@code{Staff.midiInstrument} property to the instrument name.
-The name should be chosen from the list in @ref{MIDI instruments}.
-
-@example
-\new Staff @{
- \set Staff.midiInstrument = #"glockenspiel"
- @var{...notes...}
-@}
-@end example
-
-@example
-\new Staff \with @{midiInstrument = #"cello"@} @{
- @var{...notes...}
-@}
-@end example
-
-If the selected instrument does not exactly match an instrument from
-the list of MIDI instruments, the Grand Piano (@code{"acoustic grand"})
-instrument is used.
-
-
@snippets
@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
output. Players that are known to work include MS Windows Media
Player and @uref{http://@/timidity@/.sourceforge@/.net/,timidity}.
+@node MIDI Instruments
+@subsection MIDI Instruments
+
+@cindex instrument names
+@cindex MIDI, instruments
+@funindex Staff.midiInstrument
+
+The MIDI instrument to be used is specified by setting the
+@code{Staff.midiInstrument} property to the instrument name.
+The name should be chosen from the list in @ref{MIDI instruments}.
+
+@example
+\new Staff @{
+ \set Staff.midiInstrument = #"glockenspiel"
+ @var{...notes...}
+@}
+@end example
+
+@example
+\new Staff \with @{midiInstrument = #"cello"@} @{
+ @var{...notes...}
+@}
+@end example
+
+If the selected instrument does not exactly match an instrument from
+the list of MIDI instruments, the Grand Piano (@code{"acoustic grand"})
+instrument is used.
+
@node MIDI block
@subsection MIDI block
@cindex MIDI block
@c TODO Check grace notes - timing is suspect?
+@menu
+* Supported in MIDI::
+* Unsupported in MIDI::
+@end menu
+
+@node Supported in MIDI
@unnumberedsubsubsec Supported in MIDI
@cindex Pitches in MIDI
@end itemize
+@node Unsupported in MIDI
@unnumberedsubsubsec Unsupported in MIDI
@c TODO index as above
overall MIDI volume, the relative volume of dynamic markings and
the relative volume of different instruments.
+@menu
+* Dynamic marks::
+* Overall MIDI volume::
+* Equalizing different instruments (i)::
+* Equalizing different instruments (ii)::
+@end menu
+
+@node Dynamic marks
@unnumberedsubsubsec Dynamic marks
Dynamic marks are translated to a fixed fraction of the available
@file{../scm/midi.scm} and the associated table as a model.
The final example in this section shows how this might be done.
+@node Overall MIDI volume
@unnumberedsubsubsec Overall MIDI volume
The minimum and maximum overall volume of MIDI dynamic markings is
}
@end lilypond
+@node Equalizing different instruments (i)
@unnumberedsubsubsec Equalizing different instruments (i)
If the minimum and maximum MIDI volume properties are set in
}
@end lilypond
+
+@node Equalizing different instruments (ii)
@unnumberedsubsubsec Equalizing different instruments (ii)
If the MIDI minimum and maximum volume properties are not set
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Keyboard and other multi-staff instruments
@section Keyboard and other multi-staff instruments
\new Staff = "up" {
\voiceOne
% Make space for fingering in the cross-staff voice
- \once\override DynamicLineSpanner #'staff-padding = #3.4
+ \once\override DynamicLineSpanner.staff-padding = #3.4
e''2\p\< d''\>
c''1\!
}
@cindex mode
@cindex output-count
@cindex output-suffix
-@cindex parseStringResult
@cindex partCombineListener
@cindex pitchnames
@cindex toplevel-bookparts
@item mode
@item output-count
@item output-suffix
-@item parseStringResult
@item partCombineListener
@item pitchnames
@item toplevel-bookparts
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Percussion
@section Percussion
<< \new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics \nam
>>
\layout {
\context {
\Score
- \override LyricText #'font-family = #'typewriter
- \override BarNumber #'transparent =##T
+ \override LyricText.font-family = #'typewriter
+ \override BarNumber.transparent =##T
}
}
}
\new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
- \override StaffSymbol #'line-count = #2
- \override StaffSymbol #'staff-space = #2
- \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0)
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
+ \override StaffSymbol.line-count = #2
+ \override StaffSymbol.staff-space = #2
+ \override VerticalAxisGroup.minimum-Y-extent = #'(-3.0 . 4.0)
drumStyleTable = #timbales-style
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\remove "Bar_engraver"
\remove "Time_signature_engraver"
drumStyleTable = #congas-style
- \override StaffSymbol #'line-count = #2
+ \override StaffSymbol.line-count = #2
%% this sucks; it will lengthen stems.
- \override StaffSymbol #'staff-space = #2
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override StaffSymbol.staff-space = #2
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\new DrumStaff \with {
\remove "Bar_engraver"
\remove "Time_signature_engraver"
- \override StaffSymbol #'line-count = #2
+ \override StaffSymbol.line-count = #2
drumStyleTable = #bongos-style
%% this sucks; it will lengthen stems.
- \override StaffSymbol #'staff-space = #2
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override StaffSymbol.staff-space = #2
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
\new DrumStaff \with{
\remove "Bar_engraver"
drumStyleTable = #percussion-style
- \override StaffSymbol #'line-count = #1
+ \override StaffSymbol.line-count = #1
\remove "Time_signature_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Stem #'Y-extent = ##f
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Stem.Y-extent = ##f
} \mus
\new Lyrics {
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
\nam
}
>>
woodstaff = {
% This defines a staff with only two lines.
% It also defines the positions of the two lines.
- \override Staff.StaffSymbol #'line-positions = #'(-2 3)
+ \override Staff.StaffSymbol.line-positions = #'(-2 3)
% This is necessary; if not entered, the barline would be too short!
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
}
\new DrumStaff {
@end lilypond
Note that in this special case the length of the barline must
-altered with @code{\override Staff.BarLine #'bar-extent #'(from . to)}.
+altered with @code{\override Staff.BarLine.bar-extent #'(from . to)}.
Otherwise it would be too short. And you have also to define the
positions of the two stafflines. For more information about these
delicate things have a look at @ref{Staff symbol}.
#(define mydrums '((tambourine default #t 0)))
tambustaff = {
- \override Staff.StaffSymbol #'line-positions = #'( 0 )
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.StaffSymbol.line-positions = #'( 0 )
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Tambourine"
}
#(define mydrums '((tamtam default #t 0)))
tamtamstaff = {
- \override Staff.StaffSymbol #'line-positions = #'( 0 )
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.StaffSymbol.line-positions = #'( 0 )
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Tamtam"
}
(cowbell default #t -2)))
bellstaff = {
- \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3)
+ \override DrumStaff.StaffSymbol.line-positions = #'(-2 3)
\set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
- \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+ \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\set DrumStaff.instrumentName = #"Different Bells"
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Pitches
@tab c d e f g a b h
@item @code{english}
@tab c d e f g a bf b
-@item @code{espanol}
+@item @code{espanol} or @code{español}
@tab do re mi fa sol la sib si
-@item @code{italiano}
+@item @code{italiano} or @code{français}
@tab do re mi fa sol la sib si
@item @code{norsk}
@tab c d e f g a b h
@item @code{english}
@tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp
@tab -ff/-flatflat
-@item @code{espanol}
+@item @code{espanol} or @code{español}
@tab -s @tab -b @tab -ss/-x @tab -bb
-@item @code{italiano}
+@item @code{italiano} or @code{français}
@tab -d @tab -b @tab -dd @tab -bb
@item @code{norsk}
@tab -iss/-is @tab -ess/-es @tab -ississ/-isis
@tab -ih @tab -eh @tab -isih @tab -eseh
@item @code{english}
@tab -qs @tab -qf @tab -tqs @tab -tqf
-@item @code{espanol}
+@item @code{espanol} or @code{español}
@tab -cs @tab -cb @tab -tcs @tab -tcb
-@item @code{italiano}
+@item @code{italiano} or @code{français}
@tab -sd @tab -sb @tab -dsd @tab -bsb
@item @code{portugues}
@tab -sqt @tab -bqt @tab -stqt @tab -btqt
@end lilypond
@warning{Motifs to be inverted should be expressed in absolute form
-or be first converted to absolute form by enclosing them in a
+or be first converted to absolute form by enclosing them in a
@code{\relative} block.}
@seealso
@cindex transposing clef
@cindex clef, transposing
@cindex octave transposition
+@cindex optional octave transposition
+@cindex octave transposition, optional
@cindex choral tenor clef
@cindex tenor clef, choral
c2 c
@end lilypond
+Optional octavation can be obtained by enclosing the numeric
+argument in parentheses or brackets:
+
+@lilypond[verbatim,quote,relative=1]
+\clef "treble_(8)"
+c2 c
+\clef "bass^[15]"
+c2 c
+@end lilypond
+
+The pitches are displayed as if the numeric argument were
+given without parentheses/brackets.
+
Some special purpose clefs are described in @ref{Mensural clefs},
@ref{Gregorian clefs}, @ref{Default tablatures}, and @ref{Custom
tablatures}. For mixing different clefs when using cue notes within a
@rinternals{OctavateEight},
@rinternals{clef-interface}.
+@knownissues
+Ottavation numbers attached to clefs are treated as separate grobs. So
+any @code{\override} done to the @var{Clef} will also need to be
+applied, as a separate @code{\override}, to the @var{OctavateEight}
+grob.
+
+@lilypond[fragment,quote,relative=1]
+\new Staff \with {
+ \override OctavateEight.color = #red
+ \override Clef.color = #blue
+}
+
+\clef "treble_8" c4
+@end lilypond
+
@node Key signature
@unnumberedsubsubsec Key signature
fis
@end lilypond
+Additional modes can be defined, by listing the alterations
+for each scale step when the mode starts on C.
+
+@lilypond[verbatim,quote]
+freygish = #`((0 . ,NATURAL) (1 . ,FLAT) (2 . ,NATURAL)
+ (3 . ,NATURAL) (4 . ,NATURAL) (5 . ,FLAT) (6 . ,FLAT))
+
+\relative c' {
+ \key c\freygish c4 des e f
+ \bar "||" \key d\freygish d es fis g
+}
+@end lilypond
+
+Accidentals in the key signature may be printed in octaves other
+than their traditional positions, or in multiple octaves, by
+using the @code{flat-positions} and @code{sharp-positions}
+properties of @code{KeySignature}. Entries in these properties
+specify the range of staff-positions where accidentals will be
+printed. If a single position is specified in an entry, the
+accidentals are placed within the octave ending at that staff
+position.
+
+@lilypond[verbatim, quote,relative=0]
+\override Staff.KeySignature.flat-positions = #'((-5 . 5))
+\override Staff.KeyCancellation.flat-positions = #'((-5 . 5))
+\clef bass \key es\major es g bes d
+\clef treble \bar "||" \key es\major es g bes d
+
+\override Staff.KeySignature.sharp-positions = #'(2)
+\bar "||" \key b\major b fis b2
+@end lilypond
@snippets
@rinternals{Key_performer},
@rinternals{KeyCancellation},
@rinternals{KeySignature},
-@rinternals{key-cancellation-interface},
@rinternals{key-signature-interface}.
@example
\new Staff <<
- \accidentalStyle "voice"
+ \accidentalStyle voice
@{ @dots{} @}
>>
@end example
style in all staves of the current @code{StaffGroup}, use:
@example
-\accidentalStyle #'StaffGroup "voice"
+\accidentalStyle StaffGroup.voice
@end example
The following accidental styles are supported. To demonstrate
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicA
}
\context Staff = "down" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicB
}
>>
<<
\context Staff = "up" @{
%%% change the next line as desired:
- \accidentalStyle #'Score "default"
+ \accidentalStyle Score.default
\musicA
@}
\context Staff = "down" @{
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicA
}
\context Staff = "down" {
- \accidentalStyle "default"
+ \accidentalStyle default
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "voice"
+ \accidentalStyle voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "voice"
+ \accidentalStyle voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern"
+ \accidentalStyle modern
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern"
+ \accidentalStyle modern
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-cautionary"
+ \accidentalStyle modern-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-cautionary"
+ \accidentalStyle modern-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-voice"
+ \accidentalStyle modern-voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-voice"
+ \accidentalStyle modern-voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "modern-voice-cautionary"
+ \accidentalStyle modern-voice-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "modern-voice-cautionary"
+ \accidentalStyle modern-voice-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "piano"
+ \accidentalStyle piano
\musicA
}
\context Staff = "down" {
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "piano-cautionary"
+ \accidentalStyle piano-cautionary
\musicA
}
\context Staff = "down" {
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern"
+ \accidentalStyle neo-modern
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern"
+ \accidentalStyle neo-modern
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-cautionary"
+ \accidentalStyle neo-modern-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-cautionary"
+ \accidentalStyle neo-modern-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-voice"
+ \accidentalStyle neo-modern-voice
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-voice"
+ \accidentalStyle neo-modern-voice
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "neo-modern-voice-cautionary"
+ \accidentalStyle neo-modern-voice-cautionary
\musicA
}
\context Staff = "down" {
- \accidentalStyle "neo-modern-voice-cautionary"
+ \accidentalStyle neo-modern-voice-cautionary
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\musicA
}
\context Staff = "down" {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
\musicB
}
>>
<<
\context Staff = "up" {
\key fis \minor
- \accidentalStyle "teaching"
+ \accidentalStyle teaching
\musicA
}
\context Staff = "down" {
\key fis \minor
- \accidentalStyle "teaching"
+ \accidentalStyle teaching
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "no-reset"
+ \accidentalStyle no-reset
\musicA
}
\context Staff = "down" {
- \accidentalStyle "no-reset"
+ \accidentalStyle no-reset
\musicB
}
>>
\new PianoStaff {
<<
\context Staff = "up" {
- \accidentalStyle "forget"
+ \accidentalStyle forget
\musicA
}
\context Staff = "down" {
- \accidentalStyle "forget"
+ \accidentalStyle forget
\musicB
}
>>
@lilypond[quote]
{
- \accidentalStyle "modern"
+ \accidentalStyle modern
\time 2/4
\repeat volta 2 {
c'2
@lilypond[verbatim,quote]
forget = #(define-music-function (parser location music) (ly:music?) #{
- \accidentalStyle "forget"
+ \accidentalStyle forget
#music
- \accidentalStyle "modern"
+ \accidentalStyle modern
#})
{
- \accidentalStyle "modern"
+ \accidentalStyle modern
\time 2/4
\repeat volta 2 {
c'2
@lilypond[verbatim,quote,relative=2]
c4 b
-\override NoteHead #'style = #'cross
+\override NoteHead.style = #'cross
c4 b
-\revert NoteHead #'style
+\revert NoteHead.style
a b
-\override NoteHead #'style = #'harmonic
+\override NoteHead.style = #'harmonic
a b
-\revert NoteHead #'style
+\revert NoteHead.style
c4 d e f
@end lilypond
Notation Reference:
@ref{Bar lines},
@ref{Modifying context plug-ins},
+@ref{Modifying ties and slurs},
@ref{Time administration}.
Snippets:
@cindex repeat and measure number
@cindex timing information and repeats
@cindex measure number and repeats
-@cindex repeat and slur
-@cindex slur and repeat
+@cindex repeats and slur
+@cindex slur and repeats
+@cindex glissandi and repeats
+@cindex repeats and glissandi
Slurs that span from a @code{\repeat} block into an
-@code{\alternative} block will only work for the first alternate
-ending. Also, slurs cannot wrap around from the end of one
+@code{\alternative} block will only work for the first alternative
+ending. The visual appearance of a continuing slur in other
+alternative blocks may be simulated with @code{\repeatTie} if the
+slur extends into only one note in the alternative block, although
+this method does not work in @code{TabStaff}. Other methods which
+may be tailored to indicate continuing slurs over several notes in
+alternative blocks, and which also work in @code{TabStaff} contexts,
+are shown in @ref{Modifying ties and slurs}.
+
+Also, slurs cannot wrap around from the end of one
alternative back to the beginning of the repeat.
+Glissandi that span from a @code{\repeat} block into an
+@code{\alternative} block will only work for the first alternative
+ending. The visual appearance of a continuing glissando in other
+alternative blocks may be indicated by coding a glissando starting
+on a hidden grace note. For an example, see
+@qq{Extending glissandi across repeats} under Selected Snippets
+in @ref{Glissando}.
+
If a repeat that begins with an incomplete measure has an
@code{\alternative} block that contains modifications to the
@code{measureLength} property, using @code{\unfoldRepeats} will
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Rhythms
@section Rhythms
collide with other objects in a staff.
@lilypond[verbatim,quote,ragged-right,relative=2]
-\override Tie #'layer = #-2
-\override Staff.TimeSignature #'layer = #-1
-\override Staff.KeySignature #'layer = #-1
-\override Staff.TimeSignature #'whiteout = ##t
-\override Staff.KeySignature #'whiteout = ##t
+\override Tie.layer = #-2
+\override Staff.TimeSignature.layer = #-1
+\override Staff.KeySignature.layer = #-1
+\override Staff.TimeSignature.whiteout = ##t
+\override Staff.KeySignature.whiteout = ##t
b2 b~
\time 3/4
\key a \major
\new Staff {
% These two lines are just to prettify this example
\time 16/1
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
% Print a maxima rest, equal to four breves
r\maxima
% Print a longa rest, equal to two breves
@lilypond[quote,verbatim,relative=2]
% This fails, as the wrong object name is specified
-\override TextScript #'padding = #5
+\override TextScript.padding = #5
R1^"wrong"
% This is the correct object name to be specified
-\override MultiMeasureRestText #'padding = #5
+\override MultiMeasureRestText.padding = #5
R1^"right"
@end lilypond
@lilypond[verbatim,relative=2,quote]
% Show all bar numbers
-\override Score.BarNumber #'break-visibility = #all-visible
+\override Score.BarNumber.break-visibility = #all-visible
c4 d e d
\cadenzaOn
c4 c d8[ d d] f4 g4.
the last four 32nd notes are at a constant tempo.
@lilypond[relative=1,verbatim,quote]
-\override Beam #'grow-direction = #LEFT
+\override Beam.grow-direction = #LEFT
\featherDurations #(ly:make-moment 2 1)
{ c16[ c c c c c c c] }
-\override Beam #'grow-direction = #RIGHT
+\override Beam.grow-direction = #RIGHT
\featherDurations #(ly:make-moment 2 3)
{ c32[ d e f] }
% revert to non-feathered beams
-\override Beam #'grow-direction = #'()
+\override Beam.grow-direction = #'()
{ g32[ a b c] }
@end lilypond
f1 \bar "."
g1 \bar "||"
a1 \bar ".|"
-b1 \bar ".|."
+b1 \bar ".."
c1 \bar "|.|"
d1 \bar "|."
e1
together with dotted and dashed bar lines:
@lilypond[quote,relative=1,verbatim]
-f1 \bar ":"
-g1 \bar "dashed"
+f1 \bar ";"
+g1 \bar "!"
a1
@end lilypond
@noindent
-and five types of repeat bar line:
+and nine types of repeat bar lines:
@lilypond[quote,relative=1,verbatim]
-f1 \bar "|:"
-g1 \bar ":|:"
+f1 \bar ".|:"
+g1 \bar ":..:"
a1 \bar ":|.|:"
b1 \bar ":|.:"
-c1 \bar ":|"
-e1
+c1 \bar ":.|.:"
+d1 \bar "[|:"
+e1 \bar ":|][|:"
+f1 \bar ":|]"
+g1 \bar ":|."
+a1
@end lilypond
Additionally, a bar line can be printed as a simple tick:
preferable to use @code{\divisioMinima} there instead, described in
the section @ref{Divisiones} in Gregorian chant.
+Lilypond supports kievan notation and provides a special kievan
+bar line:
+@lilypond[quote,relative=1,verbatim]
+f1 \bar "k"
+@end lilypond
+Further details of this notation are explained in
+@ref{Typesetting Kievan square notation}.
+
@cindex segno
For in-line segno signs, there are three types of bar lines which
c4 c c c \break
\bar "S"
c4 c c c
-\bar "|S"
+\bar "S-|"
c4 c c c \break
-\bar "|S"
+\bar "S-|"
c4 c c c
-\bar "S|"
+\bar "S-S"
c4 c c c \break
-\bar "S|"
+\bar "S-S"
c1
@end lilypond
using the various repeat commands (see @ref{Repeats}), which
automatically print the appropriate bar lines.
-In addition, you can specify @code{"||:"}, which is equivalent to
-@code{"|:"} except at line breaks, where it gives a double bar
+In addition, you can specify @code{".|:-||"}, which is equivalent to
+@code{".|:"} except at line breaks, where it gives a double bar
line at the end of the line and a start repeat at the beginning of
the next line.
@lilypond[quote,relative=2,verbatim]
c4 c c c
-\bar "||:"
+\bar ".|:-||"
c4 c c c \break
-\bar "||:"
+\bar ".|:-||"
c4 c c c
@end lilypond
@lilypond[quote,relative=2,verbatim]
c4 c c c
-\bar ":|S"
+\bar ":|.S"
c4 c c c \break
-\bar ":|S"
+\bar ":|.S"
c4 c c c
-\bar ":|S."
+\bar ":|.S-S"
c4 c c c \break
-\bar ":|S."
+\bar ":|.S-S"
c4 c c c
-\bar "S|:"
+\bar "S.|:-S"
c4 c c c \break
-\bar "S|:"
+\bar "S.|:-S"
c4 c c c
-\bar ".S|:"
+\bar "S.|:"
c4 c c c \break
-\bar ".S|:"
+\bar "S.|:"
c4 c c c
-\bar ":|S|:"
+\bar ":|.S.|:"
c4 c c c \break
-\bar ":|S|:"
+\bar ":|.S.|:"
c4 c c c
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
c4 c c c \break
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
c1
@end lilypond
creates a segno bar, placed in cooperation
with the @code{\repeat volta} command.
+@funindex \defineBarLine
+@funindex defineBarLine
+@cindex bar lines, defining
+@cindex defining bar lines
+
+New bar line types can be defined with @code{\defineBarLine}:
+
+@example
+\defineBarLine @var{bartype} #'(@var{end} @var{begin} @var{span})
+@end example
+
+The @code{\defineBarline} variables can include the
+@q{empty} string @code{""}, which is equivalent to an invisible
+bar line being printed. Or they can be set to @code{#f} which
+prints no bar line at all.
+
+After the definiton, the new bar line can be used by
+@code{\bar} @var{bartype}.
+
+There are currently ten bar line elements available:
+
+@lilypond[quote,verbatim]
+\defineBarLine ":" #'("" ":" "")
+\defineBarLine "=" #'("=" "" "")
+\defineBarLine "[" #'("" "[" "")
+\defineBarLine "]" #'("]" "" "")
+
+\new Staff {
+ s1 \bar "|"
+ s1 \bar "."
+ s1 \bar "!"
+ s1 \bar ";"
+ s1 \bar ":"
+ s1 \bar "k"
+ s1 \bar "S"
+ s1 \bar "="
+ s1 \bar "["
+ s1 \bar "]"
+ s1 \bar ""
+}
+@end lilypond
+
+The @code{"="} bar line provides the double span bar line, used
+in combination with the segno sign. Do not use it as a standalone
+double thin bar line; here, @code{\bar} @var{"||"} is
+preferred.
+
+The @code{"-"} sign starts annotations to bar lines which
+are useful to distinguish those with identical appearance
+but different behavior at line breaks and/or different span bars.
+The part following the @code{"-"} sign is not used for building up
+the bar line.
+
+@lilypond[quote,relative=2,verbatim]
+\defineBarLine "||-dashedSpan" #'("||" "" "!!")
+
+\new StaffGroup <<
+ \new Staff {
+ c1 \bar "||"
+ c1 \bar "||-dashedSpan"
+ c1
+ }
+ \new Staff {
+ c1
+ c1
+ c1
+ }
+>>
+@end lilypond
+
+Furthermore, the space character @code{" "} serves as a placeholder
+for defining span bars correctly aligned to the main bar lines:
+
+@lilypond[quote,relative=2,verbatim]
+\defineBarLine ":|.-wrong" #'(":|." "" "|.")
+\defineBarLine ":|.-right" #'(":|." "" " |.")
+
+\new StaffGroup <<
+ \new Staff {
+ c1 \bar ":|.-wrong"
+ c1 \bar ":|.-right"
+ c1
+ }
+ \new Staff {
+ c1
+ c1
+ c1
+ }
+>>
+@end lilypond
+
+If additional elements are needed, LilyPond provides a simple
+way to define them. For more informations on modifying or adding
+bar lines, see file @file{scm/bar-line.scm}.
In scores with many staves, a @code{\bar} command in one staff is
automatically applied to all staves. The resulting bar lines are
@cindex default bar lines, changing
@cindex bar lines, default, changing
-@snippets
-
@funindex whichBar
@funindex defaultBarType
@funindex \bar
@ref{Repeats},
@ref{Grouping staves}.
+Installed Files:
+@file{scm/bar-line.scm}.
+
Snippets:
@rlsr{Rhythms}.
example bar numbers are printed at all possible places:
@lilypond[verbatim,quote,relative=1]
-\override Score.BarNumber #'break-visibility = #'#(#t #t #t)
+\override Score.BarNumber.break-visibility = #'#(#t #t #t)
\set Score.currentBarNumber = #11
% Permit first bar number to be printed
\bar ""
@lilypond[quote,relative=2,verbatim]
<<
- \new Staff { e4 \bar "|:" \grace c16 d2. }
- \new Staff { c4 \bar "|:" d2. }
+ \new Staff { e4 \bar ".|:" \grace c16 d2. }
+ \new Staff { c4 \bar ".|:" d2. }
>>
@end lilypond
@lilypond[quote,relative=2,verbatim]
<<
- \new Staff { e4 \bar "|:" \grace c16 d2. }
- \new Staff { c4 \bar "|:" \grace s16 d2. }
+ \new Staff { e4 \bar ".|:" \grace c16 d2. }
+ \new Staff { c4 \bar ".|:" \grace s16 d2. }
>>
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Simultaneous notes
will appear during compilation. This message can be suppressed by:
@example
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
@end example
However, this not only suppresses the warning but will prevent any
@cindex collisions, ignoring
@knownissues
-Using @code{\override NoteColumn #'ignore-collision = ##t} will cause
+Using @code{\override NoteColumn.ignore-collision = ##t} will cause
differently headed notes in different voices to merge incorrectly.
@lilypond[quote,relative=1,verbatim]
\mergeDifferentlyHeadedOn
<< { c16 a' b a } \\ { c,2 } >>
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
<< { c16 a' b a } \\ { c,2 } >>
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@ignore
GDP TODO list
Could we add a sentence:
"Use instead the pair fontSize = #@var{N}
- \override StaffSymbol #'staff-space = #(magstep
+ \override StaffSymbol.staff-space = #(magstep
@var{N})
inside the Staff context to change the size of the font and the
distance between
@node \paper variables for line breaking
@unnumberedsubsubsec @code{\paper} variables for line breaking
-@c TODO: Mention that ly:optimal-breaking is on by default? -mp
-
@table @code
@item max-systems-per-page
@table @code
-@item blank-after-score-page-force
-@funindex blank-after-score-page-force
-
-The penalty for having a blank page after the end of one score and
-before the next. By default, this is smaller than
-@code{blank-page-force}, so that we prefer blank pages after
-scores to blank pages within a score.
-
-@item blank-last-page-force
-@funindex blank-last-page-force
-
-The penalty for ending the score on an odd-numbered page.
-
-@item blank-page-force
-@funindex blank-page-force
-
-The penalty for having a blank page in the middle of a
-score. This is not used by @code{ly:optimal-breaking} since it will
-never consider blank pages in the middle of a score.
-
@item page-breaking
@funindex page-breaking
The page-breaking algorithm to use. Choices are
-@code{ly:minimal-breaking}, @code{ly:page-turn-breaking}, and
-@code{ly:optimal-breaking}.
+@code{ly:minimal-breaking}, @code{ly:page-turn-breaking},
+@code{ly:one-line-breaking} and @code{ly:optimal-breaking}
+(the default).
@item page-breaking-system-system-spacing
@funindex page-breaking-system-system-spacing
@end table
+The following variables are effective only when @code{page-breaking}
+is set to @code{ly:page-turn-breaking}. Page breaks are then chosen
+to minimize the number of page turns. Since page turns are required
+on moving from an odd-numbered page to an even-numbered one, a
+layout in which the last page is odd-numbered will usually be
+favoured. Places where page turns are preferred can be indicated
+manually by inserting @code{\allowPageTurn} or automatically by
+including the @code{Page_turn_engraver} (see @ref{Optimal page turning}).
+
+If there are insufficient choices available for making suitable page
+turns, LilyPond may insert a blank page either within a score, between
+scores (if there are two or more scores), or by ending a score on an
+even-numbered page. The values of the following three variables may
+be increased to make these actions less likely.
+
+The values are penalties, i.e. the higher the value the less likely
+will be the associated action relative to other choices.
+
+@table @code
+
+@item blank-page-penalty
+@funindex blank-page-penalty
+
+The penalty for having a blank page in the middle of a score. If
+@code{blank-page-penalty} is large and @code{ly:page-turn-breaking} is
+selected, then LilyPond will be less likely to insert a page in the
+middle of a score. Instead, it will space out the music further to
+fill the blank page and the following one. Default: 5.
+
+@item blank-last-page-penalty
+@funindex blank-last-page-penalty
+
+The penalty for ending the score on an even-numbered page. If
+@code{blank-last-page-penalty} is large and
+@code{ly:page-turn-breaking} is selected, then LilyPond will be less
+likely to produce a score in which the last page is even-numbered.
+Instead, it will adjust the spacing in order to use one page more or
+one page less. Default: 0.
+
+@item blank-after-score-page-penalty
+@funindex blank-after-score-page-penalty
+
+The penalty for having a blank page after the end of one score and
+before the next. By default, this is smaller than
+@code{blank-page-penalty}, so that blank pages after scores are
+inserted in preference to blank pages within a score. Default: 2.
+
+@end table
+
+
@seealso
Notation Reference:
@ref{Page breaking},
indent = 2\cm
\context @{
\StaffGroup
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #8
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #8
@}
\context @{
\Voice
- \override TextScript #'padding = #1
- \override Glissando #'thickness = #3
+ \override TextScript.padding = #1
+ \override Glissando.thickness = #3
@}
@}
@end example
\layout @{
\context @{
\Voice
- \override TextScript #'color = #magenta
- \override Glissando #'thickness = #1.5
+ \override TextScript.color = #magenta
+ \override Glissando.thickness = #1.5
@}
@}
@end example
layoutVariable = \layout @{
\context @{
\Voice
- \override NoteHead #'font-size = #4
+ \override NoteHead.font-size = #4
@}
@}
@end example
it will hold the current @code{\layout} configuration with the
-@code{NoteHead #'font-size} override added, but this combination
+@code{NoteHead.font-size} override added, but this combination
is @emph{not} saved as the new current configuration. Be aware
that the @q{current configuration} is read when the variable is
defined and not when it is used, so the content of the variable
\layoutVariable
\context @{
\Voice
- \override NoteHead #'color = #red
+ \override NoteHead.color = #red
@}
@}
@end example
consist of:
@example
- TextScript #'padding = #1
- TextScript #'color = #magenta
- Glissando #'thickness = #1.5
- NoteHead #' font-size = #4
- NoteHead #' color = #red
+ TextScript.padding = #1
+ TextScript.color = #magenta
+ Glissando.thickness = #1.5
+ NoteHead.font-size = #4
+ NoteHead.color = #red
@end example
plus the @code{indent} and the @code{StaffGrouper} overrides.
only
@example
- NoteHead #' font-size= #4 % (written in the variable definition)
- NoteHead #' color = #red % (added after the use of the variable)
+ NoteHead.font-size = #4 % (written in the variable definition)
+ NoteHead.color = #red % (added after the use of the variable)
@end example
If carefully planned, @code{\layout} variables can be a valuable tool
Similarly, line breaks are normally forbidden when beams cross bar
lines. This behavior can be changed by setting
-@code{\override Beam #'breakable = ##t}:
+@code{\override Beam.breakable = ##t}:
@lilypond[quote,ragged-right,relative=2,verbatim]
-\override Beam #'breakable = ##t
+\override Beam.breakable = ##t
c2. c8[ c | \break
c8 c] c2. |
@end lilypond
@endpredefined
@seealso
+Notation Reference:
+@ref{\paper variables for line breaking}.
+
Snippets:
@rlsr{Spacing}.
commands. There are two commands to override this behavior:
@example
-\override NonMusicalPaperColumn #'line-break-permission = ##f
-\override NonMusicalPaperColumn #'page-break-permission = ##f
+\override NonMusicalPaperColumn.line-break-permission = ##f
+\override NonMusicalPaperColumn.page-break-permission = ##f
@end example
When @code{line-break-permission} is overridden to false, Lily will insert
\layout {
\context {
\Score
- \override NonMusicalPaperColumn #'line-break-permission = ##f
- \override NonMusicalPaperColumn #'page-break-permission = ##f
+ \override NonMusicalPaperColumn.line-break-permission = ##f
+ \override NonMusicalPaperColumn.page-break-permission = ##f
}
}
}
\score {
\new Staff <<
\new Voice {
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
s1 * 2 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 35))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 35))
s1 * 3 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 70))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 70))
s1 * 6 \break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 105))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 105))
s1 * 5 \break
}
\new Voice {
#(define zero-space '((padding . -inf.0) (basic-distance . 0)))
alignToZero = \with {
- \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space
- \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #zero-space
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #zero-space
}
lowerCaseChords = \with {
chordNameLowercaseMinor = ##t
}
staffAffinityDown = \with {
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
labelContext =
#(define-music-function
\lowerCaseChords }
\context { \FretBoards \alignToZero \staffAffinityDown }
\context { \Score
- \override BarLine #'stencil = ##f
- \override DynamicText #'self-alignment-X = #-1
- \override FretBoard #'X-offset = #1.75
- \override InstrumentName #'minimum-Y-extent = #'(-2 . 2)
- \override InstrumentName #'extra-offset = #'(0 . -0.5)
- \override TextScript #'minimum-Y-extent = #'(-2 . 3)
- \override TimeSignature #'stencil = ##f
+ \override BarLine.stencil = ##f
+ \override DynamicText.self-alignment-X = #-1
+ \override FretBoard.X-offset = #1.75
+ \override InstrumentName.minimum-Y-extent = #'(-2 . 2)
+ \override InstrumentName.extra-offset = #'(0 . -0.5)
+ \override TextScript.minimum-Y-extent = #'(-2 . 3)
+ \override TimeSignature.stencil = ##f
}
}
@example
\new Staff \with @{
- \override VerticalAxisGroup #'default-staff-staff-spacing
- #'basic-distance = #10
+ \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
@} @{ @dots{} @}
\new Staff \with @{
- \override VerticalAxisGroup #'default-staff-staff-spacing =
+ \override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 10)
(minimum-distance . 9)
(padding . 1)
\layout @{
\context @{
\Staff
- \override VerticalAxisGroup #'default-staff-staff-spacing
- #'basic-distance = #10
+ \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
@}
@}
@end example
\layout {
\context {
\Staff
- \override VerticalAxisGroup #'default-staff-staff-spacing =
+ \override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 8)
(minimum-distance . 7)
(padding . 1))
% By setting 'padding to a negative value, staves can be made to
% collide. The lowest acceptable value for 'basic-distance is 0.
\new Staff \with {
- \override VerticalAxisGroup #'default-staff-staff-spacing =
+ \override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 3.5)
(padding . -10))
} { \clef bass g2 r | }
\layout {
\context {
\Score
- \override StaffGrouper #'staff-staff-spacing #'padding = #0
- \override StaffGrouper #'staff-staff-spacing #'basic-distance = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #0
+ \override StaffGrouper.staff-staff-spacing.basic-distance = #1
}
}
<<
\new PianoStaff \with {
- \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20
+ \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
} <<
\new Staff { c'1 }
\new Staff { c'1 }
\layout {
\context {
\Lyrics
- \override VerticalAxisGroup
- #'nonstaff-nonstaff-spacing #'stretchability = #1000
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing.stretchability = #1000
}
}
\new StaffGroup
<<
\new Staff \with {
- \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 30))
+ \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30))
} { c'1 }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #UP
+ \override VerticalAxisGroup.staff-affinity = #UP
} \lyricmode { up }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #CENTER
+ \override VerticalAxisGroup.staff-affinity = #CENTER
} \lyricmode { center }
\new Lyrics \with {
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
} \lyricmode { down }
\new Staff { c'1 }
>>
amount of vertical padding between staves and systems.
It is possible to approach vertical spacing in a different way
-using @code{NonMusicalPaperColumn #'line-break-system-details}.
+using @code{NonMusicalPaperColumn.line-break-system-details}.
While the flexible vertical spacing mechanisms specify vertical
-padding, @code{NonMusicalPaperColumn #'line-break-system-details}
+padding, @code{NonMusicalPaperColumn.line-break-system-details}
can specify exact vertical positions on the page.
-@code{NonMusicalPaperColumn #'line-break-system-details} accepts
+@code{NonMusicalPaperColumn.line-break-system-details} accepts
an associative list of three different settings:
@itemize
@code{\overrideProperty} command:
@example
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((Y-offset . 40))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20)
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
(Y-offset . 40))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((alignment-distances . (15)))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((alignment-distances . (15)))
-\overrideProperty NonMusicalPaperColumn
- #'line-break-system-details #'((X-offset . 20)
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
(Y-offset . 40)
(alignment-distances . (15)))
@end example
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 40))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 80))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 80))
s1*5 \break
}
\new Voice { \repeat unfold 15 { c'4 c' c' c' } }
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 20)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 20)
(alignment-distances . (15)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 60)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
(alignment-distances . (15)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 100)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
(alignment-distances . (15)))
s1*5 \break
}
<<
\new Staff <<
\new Voice {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 0)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0)
(alignment-distances . (30 10)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 60)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
(alignment-distances . (10 10)))
s1*5 \break
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((Y-offset . 100)
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
(alignment-distances . (10 30)))
s1*5 \break
}
of the distance between adjacent staff lines. Positive values move staves
and lyrics up, negative values move staves and lyrics down.
-@item Because the @code{NonMusicalPaperColumn #'line-break-system-details}
+@item Because the @code{NonMusicalPaperColumn.line-break-system-details}
settings given here allow the positioning of staves and systems anywhere
on the page, it is possible to violate paper or margin boundaries or even
to print staves or systems on top of one another. Reasonable values
@lilypond[quote,ragged-right,relative=2,verbatim]
c4_"Text"\pp
r2.
-\once \override TextScript #'outside-staff-priority = #1
+\once \override TextScript.outside-staff-priority = #1
c4_"Text"\pp % this time the text will be closer to the staff
r2.
% by setting outside-staff-priority to a non-number,
% we disable the automatic collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
-\once \override DynamicLineSpanner #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
+\once \override DynamicLineSpanner.outside-staff-priority = ##f
c4_"Text"\pp % now they will collide
@end lilypond
@code{outside-staff-padding}.
@lilypond[quote,ragged-right,relative=2,verbatim,staffsize=18]
-\once \override TextScript #'outside-staff-padding = #0
+\once \override TextScript.outside-staff-padding = #0
a'^"This text is placed very close to the note"
-\once \override TextScript #'outside-staff-padding = #3
+\once \override TextScript.outside-staff-padding = #3
c^"This text is padded away from the previous text"
c^"This text is placed close to the previous text"
@end lilypond
c''2
% setting outside-staff-horizontal-padding fixes this
R1
-\once \override TextScript #'outside-staff-horizontal-padding = #1
+\once \override TextScript.outside-staff-horizontal-padding = #1
c,,4^"Text"
c4
c''2
{
c'4 e''4 e'4 b'4 |
b'4 e''4 b'4 e''4 |
- \override Staff.NoteSpacing #'stem-spacing-correction = #1.5
- \override Staff.StaffSpacing #'stem-spacing-correction = #1.5
+ \override Staff.NoteSpacing.stem-spacing-correction = #1.5
+ \override Staff.StaffSpacing.stem-spacing-correction = #1.5
c'4 e''4 e'4 b'4 |
b'4 e''4 b'4 e''4 |
}
adjusting the padding value as necessary.
@example
- \override Score.NonMusicalPaperColumn #'padding = #10
+ \override Score.NonMusicalPaperColumn.padding = #10
@end example
No work-around exists for decreasing the amount of space.
\layout {
\context {
\Score
- \override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 1 16)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16)
}
}
}
By default, spacing in tuplets depends on various non-duration
factors (such as accidentals, clef changes, etc). To disregard
such symbols and force uniform equal-duration spacing, use
-@code{Score.SpacingSpanner #'uniform-stretching}. This
+@code{Score.SpacingSpanner.uniform-stretching}. This
property can only be changed at the beginning of a score,
@lilypond[quote,ragged-right,verbatim]
\layout {
\context {
\Score
- \override SpacingSpanner #'uniform-stretching = ##t
+ \override SpacingSpanner.uniform-stretching = ##t
}
}
}
regard for clefs, bar lines, and grace notes,
@lilypond[quote,ragged-right,relative=2,verbatim]
-\override Score.SpacingSpanner #'strict-note-spacing = ##t
+\override Score.SpacingSpanner.strict-note-spacing = ##t
\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] }
@end lilypond
@item @code{uniform-stretching}
@item @code{strict-note-spacing}
@item @code{\remove "Separating_line_group_engraver"}
-@item @code{\override PaperColumn #'used = ##t}
+@item @code{\override PaperColumn.used = ##t}
@end itemize
In the examples that follow, we explore these five different
\context {
\Score
proportionalNotationDuration = #(ly:make-moment 1 20)
- \override SpacingSpanner #'uniform-stretching = ##t
+ \override SpacingSpanner.uniform-stretching = ##t
}
}
}
\new Staff {
\set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
- \override Score.SpacingSpanner #'strict-note-spacing = ##t
+ \override Score.SpacingSpanner.strict-note-spacing = ##t
c''8
c''8
c''8
that frequently appear in proportional scores. These include:
@itemize
-@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
+@item @code{\override SpacingSpanner.strict-grace-spacing = ##t}
@item @code{tupletFullLength = ##t}
-@item @code{\override Beam #'breakable = ##t}
-@item @code{\override Glissando #'breakable = ##t}
-@item @code{\override TextSpanner #'breakable = ##t}
+@item @code{\override Beam.breakable = ##t}
+@item @code{\override Glissando.breakable = ##t}
+@item @code{\override TextSpanner.breakable = ##t}
@item @code{\remove "Forbid_line_break_engraver" in the Voice context}
@end itemize
@lilypond[verbatim,quote,relative=1]
e4 c g\f c
-e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c
+e4 c g-\tweak X-offset #-2.7 -\tweak Y-offset #2.5 \f c
@end lilypond
@item
\layout {
\context {
\Score
- \override SpacingSpanner
- #'common-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 2)
}
}
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Staff notation
@section Staff notation
@lilypond[verbatim,quote,relative=2]
f4 d \stopStaff
-\override Staff.StaffSymbol #'line-count = #2
+\override Staff.StaffSymbol.line-count = #2
\startStaff g, e |
f'4 d \stopStaff
-\revert Staff.StaffSymbol #'line-count
+\revert Staff.StaffSymbol.line-count
\startStaff g, e |
@end lilypond
@lilypond[verbatim,quote,relative=2]
f4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(1 3 5 -1 -3)
+\override Staff.StaffSymbol.line-positions = #'(1 3 5 -1 -3)
\startStaff g, e |
f'4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(8 6.5 -6 -8 -0.5)
+\override Staff.StaffSymbol.line-positions = #'(8 6.5 -6 -8 -0.5)
\startStaff g, e
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'thickness = #3
+ \override StaffSymbol.thickness = #3
}
{ f4 d g, e }
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'thickness = #2
- \override StaffSymbol #'ledger-line-thickness = #'(0.5 . 0.4)
+ \override StaffSymbol.thickness = #2
+ \override StaffSymbol.ledger-line-thickness = #'(0.5 . 0.4)
}
{ f'4 a, a,, f }
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'ledger-positions = #'(-3 -2 -1 2 5 6)
+ \override StaffSymbol.ledger-positions = #'(-3 -2 -1 2 5 6)
}
{ f'4 a, a,, f }
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'ledger-extra = #4
+ \override StaffSymbol.ledger-extra = #4
}
{ f'4 a, d, f, }
@end lilypond
@code{\override} for the whole @code{StaffSymbol}.
@lilypond[fragment,quote,relative=1]
-\override Staff.StaffSymbol #'line-positions = #'(-8 0 2 4)
+\override Staff.StaffSymbol.line-positions = #'(-8 0 2 4)
d4 e f g
\stopStaff
\startStaff
-\override Staff.StaffSymbol #'ledger-positions = #'(-8 -6 (-4 -2) 0)
+\override Staff.StaffSymbol.ledger-positions = #'(-8 -6 (-4 -2) 0)
d4 e f g
@end lilypond
@lilypond[verbatim,quote,relative=2]
\new Staff \with {
- \override StaffSymbol #'staff-space = #1.5
+ \override StaffSymbol.staff-space = #1.5
}
{ f'4 d, g, e, }
@end lilypond
\remove "Time_signature_engraver"
alignAboveContext = #"main"
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
firstClef = ##f
}
{ e4 d f e }
<<
\new Staff = ossia \with {
\remove "Time_signature_engraver"
- \override Clef #'transparent = ##t
+ \override Clef.transparent = ##t
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
}
{ \stopStaff s1*6 }
<<
\new Staff = ossia \with {
\remove "Time_signature_engraver"
- \override Clef #'transparent = ##t
+ \override Clef.transparent = ##t
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3)
} \relative c'' {
R1*3
c4 e8 d c2
\layout {
\context {
\Staff \RemoveEmptyStaves
- \override VerticalAxisGroup #'remove-first = ##t
+ \override VerticalAxisGroup.remove-first = ##t
}
}
@end lilypond
engraver:
@example
-\override StaffSymbol #'stencil = ##f
-\override NoteHead #'no-ledgers = ##t
+\override StaffSymbol.stencil = ##f
+\override NoteHead.no-ledgers = ##t
@end example
For the Known issues and warnings associated with
{ f2 g4 f }
\new Staff \with {
instrumentName = \markup {
- \center-column { "Clarinet" }
- \line { "in B" \smaller \flat }
+ \center-column { "Clarinet"
+ \line { "in B" \smaller \flat }
+ }
}
}
{ c4 b c2 }
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Text
@section Text
performance is desired, use
@example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
@end example
following syntax:
@lilypond[verbatim,quote,relative=2]
-\override TextSpanner #'(bound-details left text) = "rit."
+\override TextSpanner.bound-details.left.text = "rit."
b1\startTextSpan
e,\stopTextSpan
@end lilypond
@ref{Formatting text}.
@lilypond[quote,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text) =
+\override TextSpanner.bound-details.left.text =
\markup { \upright "rit." }
b1\startTextSpan c
e,\stopTextSpan
required change from the default size.
@lilypond[quote,verbatim,relative=2]
-\override Score.RehearsalMark #'font-family = #'typewriter
+\override Score.RehearsalMark.font-family = #'typewriter
\mark \markup "Ouverture"
-\override Voice.TextScript #'font-shape = #'italic
-\override Voice.TextScript #'font-series = #'bold
+\override Voice.TextScript.font-shape = #'italic
+\override Voice.TextScript.font-series = #'bold
d2.^\markup "Allegro"
-\override Voice.TextScript #'font-size = #-3
+\override Voice.TextScript.font-size = #-3
c4^smaller
@end lilypond
FontConfig may be used in a score, using the following syntax:
@lilypond[quote,verbatim,relative=2]
-\override Staff.TimeSignature #'font-name = #"Bitstream Charter"
-\override Staff.TimeSignature #'font-size = #2
+\override Staff.TimeSignature.font-name = #"Bitstream Charter"
+\override Staff.TimeSignature.font-size = #2
\time 3/4
a1_\markup {
see @ref{Chorded notes}. Directives for playing chords may be
added, see @ref{Arpeggio}.
-@item A template for a string quartet can be found in
-@rlearning{String quartet}. Others are shown in the snippets.
+@item Templates for string quartets can be found in
+@rlearning{String quartet templates}. Others are shown in the snippets.
@end itemize
@seealso
Learning Manual:
-@rlearning{String quartet}.
+@rlearning{String quartet templates}.
Notation Reference:
@ref{Text scripts},
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Vocal music
@section Vocal music
\lyricmode @{ lah lah lah @}
@end example
-@cindex overrides in lyric mode
-@funindex \override in \lyricmode
-
-Similarly, in lyric mode, a period will be included in the
-alphabetic sequence that it follows. As a consequence, spaces
-must be inserted around the period in @code{\override} commands.
-Do @emph{not} write
-
-@example
-\override Score.LyricText #'font-shape = #'italic
-@end example
-
-@noindent
-but instead use
-
-@example
-\override Score . LyricText #'font-shape = #'italic
-@end example
-
Punctuation, lyrics with accented characters, characters from
non-English languages, or special characters (such as the heart
symbol or slanted quotes), may simply be inserted directly
<<
\new Lyrics = "lyrics" \with {
% lyrics above a staff should have this override
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff {
\new Voice = "melody" {
\new Lyrics = "sopranos"
\new Lyrics = "contraltos" \with {
% lyrics above a staff should have this override
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff {
\new Voice = "contraltos" {
@end lilypond
Other combinations of lyrics and staves may be generated by
-elaborating these examples, or by examining the
-@rlearning{Vocal ensembles} templates in the Learning Manual.
+elaborating these examples, or by examining the templates in the
+Learning Manual, see @rlearning{Vocal ensembles templates}.
@snippets
@lilypondfile[verbatim,quote,texidoc,doctitle]
@seealso
Learning Manual:
-@rlearning{Vocal ensembles}.
+@rlearning{Vocal ensembles templates}.
Notation Reference:
@ref{Context layout order},
@lilypond[relative=1,verbatim,quote,ragged-right]
{
c c c c
- \override Lyrics.LyricSpace #'minimum-distance = #1.0
+ \override Lyrics.LyricSpace.minimum-distance = #1.0
c c c c
}
\addlyrics {
\layout {
\context {
\Lyrics
- \override LyricSpace #'minimum-distance = #1.0
+ \override LyricSpace.minimum-distance = #1.0
}
}
}
feature can be disabled:
@example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
@end example
To make lyrics avoid bar lines as well, use
\Lyrics
\consists "Bar_engraver"
\consists "Separating_line_group_engraver"
- \override BarLine #'transparent = ##t
+ \override BarLine.transparent = ##t
@}
@}
@end example
\voiceOne
\times 2/3 {
% show associations clearly.
- \override NoteColumn #'force-hshift = #-3
+ \override NoteColumn.force-hshift = #-3
f8 f g
}
}
@item
Several templates suitable for various styles of choral music can
also be found in the Learning Manual, see
-@rlearning{Vocal ensembles}.
+@rlearning{Vocal ensembles templates}.
@item
For information about @code{ChoirStaff} and @code{PianoStaff} see
@seealso
Learning Manual:
@rlearning{Four-part SATB vocal score},
-@rlearning{Vocal ensembles}.
+@rlearning{Vocal ensembles templates}.
Notation Reference:
@ref{Context layout order},
\layout {
\context {
\Score
- \override DynamicText #'direction = #UP
- \override DynamicLineSpanner #'direction = #UP
+ \override DynamicText.direction = #UP
+ \override DynamicLineSpanner.direction = #UP
}
}
}
% position name of cue-ing instrument just before the cue notes,
% and above the staff
\new CueVoice {
- \override InstrumentSwitch #'self-alignment-X = #RIGHT
+ \override InstrumentSwitch.self-alignment-X = #RIGHT
\set instrumentCueName = "Flute"
}
\cueDuring "flute" #UP { g4 bes4 }
\transposition c'
% position name of cue-ing instrument below the staff
\new CueVoice {
- \override InstrumentSwitch #'self-alignment-X = #RIGHT
- \override InstrumentSwitch #'direction = #DOWN
+ \override InstrumentSwitch.self-alignment-X = #RIGHT
+ \override InstrumentSwitch.direction = #DOWN
\set instrumentCueName = "Clar."
}
\cueDuring "clarinet" #DOWN { c4. g8 }
\score {
<<
\new Lyrics \with {
- \override LyricText #'font-shape = #'italic
- \override LyricText #'self-alignment-X = #LEFT
+ \override LyricText.font-shape = #'italic
+ \override LyricText.self-alignment-X = #LEFT
}
{ \dialogue }
\new Staff {
with the rhythm being taken from the spoken rhythm of the words.
@lilypond[verbatim,quote]
-stemOff = { \override Staff.Stem #'transparent = ##t }
+stemOff = { \override Staff.Stem.transparent = ##t }
\relative c' {
\stemOff
\bar "'"
a4 b c2
a4 b c2
-\bar ":"
+\bar ";"
a4 b c2
-\bar "dashed"
+\bar "!"
a4 b c2
\bar "||"
@end lilypond
@lilypond[verbatim,quote]
divisioMinima = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-minima
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
divisioMaior = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maior
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maior
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
divisioMaxima = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maxima
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maxima
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
finalis = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::finalis
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::finalis
+ \once \override BreathingSign.Y-offset = #0
\breathe
}
\layout {
\context {
\Score
- \override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 2)
}
\context {
\Staff
@seealso
Learning Manual:
@rlearning{Visibility and color of objects},
-@rlearning{Vocal ensembles}.
+@rlearning{Vocal ensembles templates}.
Notation Reference:
@ref{Ancient notation},
described in @ref{Formatting text}.
Most of these elements are shown in one or other of the two verses
-in the template, see @qq{Psalms} in @rlearning{Vocal ensembles}.
+in the template, see @rlearning{Psalms}.
@seealso
Learning Manual:
-@rlearning{Vocal ensembles}.
+@rlearning{Psalms},
+@rlearning{Vocal ensembles templates}.
Notation Reference:
@ref{Fonts},
depth = ../..
-SUBDIRS = pdf
-
BITMAP_IMAGES = $(call src-wildcard,*.png) $(call src-wildcard,*.jpg)
EPS_ILLUSTRATIONS = $(call src-wildcard,*.eps)
SVG_FILES = $(call src-wildcard,*.svg)
PDF_DIR = $(call src-wildcard,pdf/*.pdf)
-EXTRA_DIST_FILES = $(BITMAP_IMAGES) $(EPS_ILLUSTRATIONS) $(SVG_FILES)
-
OUT_PDF_IMAGES = $(EPS_ILLUSTRATIONS:%.eps=$(outdir)/%.pdf)
OUT_BITMAP_IMAGES = $(BITMAP_IMAGES:%=$(outdir)/%)
OUT_BITMAP_IMAGES += $(EPS_ILLUSTRATIONS:%.eps=$(outdir)/%.png)
gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=$@ -sDEVICE=png16m -dEPSCrop -dNOPAUSE -f $< -c quit
$(outdir)/%.pdf: %.eps
- gs -dAutoRotatePages=/None -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ -dEPSCrop -c .setpdfwrite -f $<
+ gs -dAutoRotatePages=/None -q -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ -dEPSCrop -c .setpdfwrite -f $<
+++ /dev/null
-depth = ../../..
-
-PDF_FILES = $(call src-wildcard,*.pdf)
-
-EXTRA_DIST_FILES = $(PDF_FILES)
-
-STEPMAKE_TEMPLATES = documentation
-
-include $(depth)/make/stepmake.make
-
-default:
-
<!--
we depend on an external entity here, which we cannot control. Suppose
-we go from 2.16.x to 2.17.x and put the documentation under "v2.17".
+we go from 2.15.x to 2.17.x and put the documentation under "v2.17".
For some time, Google won't have the new location in its index, so the
-search would get nothing. It would be better to keep "v2.16" in the
-search for a while and have a redirection from "v2.16" to "v2.17".
+search would get nothing. It would be better to keep "v2.15" in the
+search for a while and have a redirection from "v2.15" to "v2.17".
-->
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org/doc/v2.16 '
+ onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org/doc/v2.16 '
+ onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org/doc/v2.16 '
+ onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Google Search">
<input type="text" name="brute_query" onfocus="this.value=''" value="Search">
+++ /dev/null
-depth = ../..
-
-.PHONY: snippets
-
-SUBDIRS = new
-EXTRA_DIST_FILES = $(call src-wildcard,*.snippet-list) \
- $(call src-wildcard,*.ly) $(call src-wildcard,*.itely) \
- README
-SNIPPET_LY_FILES = $(call src-wildcard,*.ly)
-OUT_SNIPPET_LY_FILES = $(SNIPPET_LY_FILES:%.ly=out/%.ly)
-
-include $(depth)/make/stepmake.make
-
-default:
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation, chords, contexts-and-engravers"
}
continuo = \figuremode {
<_>4 <6>4 <5/>4
- \override Staff.BassFigureAlignmentPositioning #'direction = #UP
+ \override Staff.BassFigureAlignmentPositioning.direction = #UP
%\bassFigureStaffAlignmentUp
< _+ >4 <6>
\set Staff.useBassFigureExtenders = ##t
- \override Staff.BassFigureAlignmentPositioning #'direction = #DOWN
+ \override Staff.BassFigureAlignmentPositioning.direction = #DOWN
%\bassFigureStaffAlignmentDown
<4>4. <4>8 <_+>4
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "pitches, staff-notation, vocal-music"
\new Voice \with {
\consists "Ambitus_engraver"
} \relative c'' {
- \override Ambitus #'X-offset = #2.0
+ \override Ambitus.X-offset = #2.0
\voiceOne
c4 a d e
f1
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "breaks, contexts-and-engravers, staff-notation, workaround"
<< { c1 | c }
\new Staff {
\key f \major
- \once \override Staff.TimeSignature #'stencil = ##f
+ \once \override Staff.TimeSignature.stencil = ##f
c1 | c
}
>>
\new Staff {
\once \set Staff.explicitKeySignatureVisibility = #end-of-line-invisible
\key f \major
- \once \override Staff.TimeSignature #'stencil = ##f
+ \once \override Staff.TimeSignature.stencil = ##f
c1 | c
}
>>
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "contexts-and-engravers, really-simple, staff-notation"
c1 | d
}
\new Staff {
- \once \override Staff.TimeSignature #'stencil = ##f
+ \once \override Staff.TimeSignature.stencil = ##f
c1 | b
}
>>
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "chords, specific-notation"
\new ChordNames \with {
- \override BarLine #'bar-extent = #'(-2 . 2)
+ \override BarLine.bar-extent = #'(-2 . 2)
\consists "Bar_engraver"
}
\chordmode {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "percussion, preparing-parts, really-simple, rhythms, specific-notation"
<<
\new DrumStaff \with {
drumStyleTable = #timbales-style
- \override StaffSymbol #'line-count = #2
- \override BarLine #'bar-extent = #'(-1 . 1)
+ \override StaffSymbol.line-count = #2
+ \override BarLine.bar-extent = #'(-1 . 1)
} <<
\set Staff.instrumentName = #"timbales"
\timb
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "staff-notation, symbols-and-glyphs, vocal-music"
}
splitStaffBarLine = {
- \once \override Staff.BarLine #'stencil =
+ \once \override Staff.BarLine.stencil =
#(lambda (grob)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
\layout {
\context {
\Staff \RemoveEmptyStaves
- \override VerticalAxisGroup #'remove-first = ##t
+ \override VerticalAxisGroup.remove-first = ##t
}
}
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.20
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "staff-notation, vocal-music"
(string? string? ly:dir? ly:music?)
#{
\cueDuring $instrument #dir {
- \once \override TextScript #'self-alignment-X = #RIGHT
- \once \override TextScript #'direction = $dir
+ \once \override TextScript.self-alignment-X = #RIGHT
+ \once \override TextScript.direction = $dir
<>-\markup { \tiny #name }
$music
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, workaround"
\relative c' {
c2-\parenthesize ->
- \override ParenthesesItem #'padding = #0.1
- \override ParenthesesItem #'font-size = #-4
+ \override ParenthesesItem.padding = #0.1
+ \override ParenthesesItem.font-size = #-4
<d \parenthesize f a>2
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.15.15"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, staff-notation, tweaks-and-overrides"
glissandoSkipOn = {
- \override NoteColumn #'glissando-skip = ##t
- \override NoteHead #'transparent = ##t
- \override NoteHead #'no-ledgers = ##t
+ \override NoteColumn.glissando-skip = ##t
+ \override NoteHead.transparent = ##t
+ \override NoteHead.no-ledgers = ##t
}
glissandoSkipOff = {
- \revert NoteColumn #'glissando-skip
- \revert NoteHead #'transparent
- \revert NoteHead #'no-ledgers
+ \revert NoteColumn.glissando-skip
+ \revert NoteHead.transparent
+ \revert NoteHead.no-ledgers
}
\relative c'' {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
\relative c'' {
c8
\graceNotes
- \override Score.GraceSpacing #'spacing-increment = #2.0
+ \override Score.GraceSpacing.spacing-increment = #2.0
\graceNotes
- \revert Score.GraceSpacing #'spacing-increment
+ \revert Score.GraceSpacing.spacing-increment
\graceNotes
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "correction-wanted, spacing, text, vocal-music, workaround"
}
% Reducing the minimum space below the staff and above the lyrics:
\new Lyrics \with {
- \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #'((basic-distance . 1))
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #'((basic-distance . 1))
}
\lyricsto melody { aa aa aa aa aa aa aa aa aa }
>>
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks"
} % begin verbatim
\relative c'' {
- \override Score.SpacingSpanner #'shortest-duration-space = #4.0
+ \override Score.SpacingSpanner.shortest-duration-space = #4.0
c2-\bendAfter #5
c2-\bendAfter #-4.75
c2-\bendAfter #8.5
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "paper-and-layout, text, titles"
\score {
\new StaffGroup <<
\new Staff {
- \override Staff.InstrumentName #'self-alignment-X = #LEFT
+ \override Staff.InstrumentName.self-alignment-X = #LEFT
\set Staff.instrumentName = \markup \left-column {
"Left aligned"
"instrument name"
c''1
}
\new Staff {
- \override Staff.InstrumentName #'self-alignment-X = #CENTER
+ \override Staff.InstrumentName.self-alignment-X = #CENTER
\set Staff.instrumentName = \markup \center-column {
Centered
"instrument name"
g'1
}
\new Staff {
- \override Staff.InstrumentName #'self-alignment-X = #RIGHT
+ \override Staff.InstrumentName.self-alignment-X = #RIGHT
\set Staff.instrumentName = \markup \right-column {
"Right aligned"
"instrument name"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
\relative c' {
\set Score.currentBarNumber = #111
- \override Score.BarNumber #'break-visibility = #all-visible
+ \override Score.BarNumber.break-visibility = #all-visible
% Increase the size of the bar number by 2
- \override Score.BarNumber #'font-size = #2
+ \override Score.BarNumber.font-size = #2
% Print a bar number every second measure
\set Score.barNumberVisibility = #(every-nth-bar-number-visible 2)
c1 | c1
% Center-align bar numbers
- \override Score.BarNumber #'self-alignment-X = #CENTER
+ \override Score.BarNumber.self-alignment-X = #CENTER
c1 | c1
% Left-align bar numbers
- \override Score.BarNumber #'self-alignment-X = #LEFT
+ \override Score.BarNumber.self-alignment-X = #LEFT
c1 | c1
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "text"
e1
% the RehearsalMark will be centered above the Clef
- \override Score.RehearsalMark #'break-align-symbols = #'(clef)
+ \override Score.RehearsalMark.break-align-symbols = #'(clef)
\key a \major
\clef treble
\mark \markup { \char ##x2193 }
e1
% the RehearsalMark will be centered above the TimeSignature
- \override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
+ \override Score.RehearsalMark.break-align-symbols = #'(time-signature)
\key a \major
\clef treble
\time 3/4
e2.
% the RehearsalMark will be centered above the KeySignature
- \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+ \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\key a \major
\clef treble
\time 4/4
e1
% the RehearsalMark will be aligned with the left edge of the KeySignature
- \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
+ \once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
\mark \markup { \char ##x2193 }
\key a \major
e1
% the RehearsalMark will be aligned with the right edge of the KeySignature
- \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
+ \once \override Score.KeySignature.break-align-anchor-alignment = #RIGHT
\key a \major
\mark \markup { \char ##x2193 }
e1
% the RehearsalMark will be aligned with the left edge of the KeySignature
% and then shifted right by one unit.
- \once \override Score.KeySignature #'break-align-anchor = #1
+ \once \override Score.KeySignature.break-align-anchor = #1
\key a \major
\mark \markup { \char ##x2193 }
e1
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "text"
\relative c' {
c1 \mark "(Center)"
c1
- \once \override Score.RehearsalMark #'self-alignment-X = #LEFT
+ \once \override Score.RehearsalMark.self-alignment-X = #LEFT
\mark "(Left)"
c4 c c c
c4 c c c
- \once \override Score.RehearsalMark #'self-alignment-X = #RIGHT
+ \once \override Score.RehearsalMark.self-alignment-X = #RIGHT
\mark "(Right)"
c1
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, fretted-strings, spacing, specific-notation"
\relative c' {
<c-1 e-2 g-3 b-5>2
- \override Fingering #'staff-padding = #'()
+ \override Fingering.staff-padding = #'()
<c-1 e-2 g-3 b-5>4 <g'-0>
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "pitches, tweaks-and-overrides"
\relative c'' {
- \override Stem #'(details beamed-lengths) = #'(2)
+ \override Stem.details.beamed-lengths = #'(2)
a8[ a] a16[ a] a32[ a]
- \override Stem #'(details beamed-lengths) = #'(8 10 12)
+ \override Stem.details.beamed-lengths = #'(8 10 12)
a8[ a] a16[ a] a32[ a] r8
- \override Stem #'(details beamed-lengths) = #'(8)
+ \override Stem.details.beamed-lengths = #'(8)
a8[ a]
- \override Stem #'(details beamed-lengths) = #'(8.5)
+ \override Stem.details.beamed-lengths = #'(8.5)
a8[ a]
- \revert Stem #'details
+ \revert Stem.details
a8[ a] a16[ a] a32[ a] r16
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.24
+%% Note: this file works from version 2.16.0
\version "2.16.0"
\header {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, rhythms"
\relative c'' {
\time 4/2
c\breve |
- \override Staff.NoteHead #'style = #'altdefault
+ \override Staff.NoteHead.style = #'altdefault
b\breve
- \revert Staff.NoteHead #'style
+ \revert Staff.NoteHead.style
a\breve
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, really-simple, tweaks-and-overrides"
}
}
\relative c'' {
- \once \override HorizontalBracket #'direction = #UP
+ \once \override HorizontalBracket.direction = #UP
c2\startGroup
d2\stopGroup
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.9
+%% Note: this file works from version 2.17.6
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation, symbols-and-glyphs"
\context VaticanaVoice <<
\transpose c c {
- \override NoteHead #'style = #'vaticana.punctum
+ \override NoteHead.style = #'vaticana.punctum
\key es \major
\clef "vaticana-fa2"
c1 des e f ges
- \override NoteHead #'style = #'vaticana.inclinatum
+ \override NoteHead.style = #'vaticana.inclinatum
a! b ces'
\bar "|"
% \break % 1 (8*1)
- \override NoteHead #'style = #'vaticana.quilisma
+ \override NoteHead.style = #'vaticana.quilisma
b! des'! ges! fes!
\breathe
\clef "vaticana-fa1"
- \override NoteHead #'style = #'vaticana.plica
+ \override NoteHead.style = #'vaticana.plica
es d
- \override NoteHead #'style = #'vaticana.reverse.plica
+ \override NoteHead.style = #'vaticana.reverse.plica
c d
\bar "|"
% \break %2 (8*1)
- \override NoteHead #'style = #'vaticana.punctum.cavum
+ \override NoteHead.style = #'vaticana.punctum.cavum
es f
- \override NoteHead #'style = #'vaticana.lpes
+ \override NoteHead.style = #'vaticana.lpes
g as
- \override NoteHead #'style = #'vaticana.upes
+ \override NoteHead.style = #'vaticana.upes
bes as
- \override NoteHead #'style = #'vaticana.vupes
+ \override NoteHead.style = #'vaticana.vupes
g f
- \override NoteHead #'style = #'vaticana.linea.punctum
- \once \override Staff.BarLine #'bar-extent = #'(-1 . 1) \bar "|"
+ \override NoteHead.style = #'vaticana.linea.punctum
+ \once \override Staff.BarLine.bar-extent = #'(-1 . 1) \bar "|"
% \break % 3 (8*1)
es d
- \override NoteHead #'style = #'vaticana.epiphonus
+ \override NoteHead.style = #'vaticana.epiphonus
c d
- \override NoteHead #'style = #'vaticana.cephalicus
+ \override NoteHead.style = #'vaticana.cephalicus
es f
- \override Staff.KeySignature #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
- \override Staff.Accidental #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
- \override Staff.Custos #'style = #'medicaea
- \override NoteHead #'style = #'medicaea.punctum
+ \override Staff.KeySignature.glyph-name-alist = #alteration-medicaea-glyph-name-alist
+ \override Staff.Accidental.glyph-name-alist = #alteration-medicaea-glyph-name-alist
+ \override Staff.Custos.style = #'medicaea
+ \override NoteHead.style = #'medicaea.punctum
\clef "medicaea-fa2"
ces des
\bar "|"
e! f! ges
\clef "medicaea-do2"
- \override NoteHead #'style = #'medicaea.inclinatum
+ \override NoteHead.style = #'medicaea.inclinatum
a! b! ces'
- \override NoteHead #'style = #'medicaea.virga
+ \override NoteHead.style = #'medicaea.virga
b! a!
\bar "|"
% \break % 5 (8*1)
ges fes
\clef "medicaea-fa1"
- \override NoteHead #'style = #'medicaea.rvirga
+ \override NoteHead.style = #'medicaea.rvirga
e des ces
- \override Staff.KeySignature #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
- \override Staff.Accidental #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
- \override Staff.Custos #'style = #'hufnagel
- \override NoteHead #'style = #'hufnagel.punctum
+ \override Staff.KeySignature.glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+ \override Staff.Accidental.glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+ \override Staff.Custos.style = #'hufnagel
+ \override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-fa2"
ces des es
\bar "|"
fes ges
\clef "hufnagel-do2"
- \override NoteHead #'style = #'hufnagel.lpes
+ \override NoteHead.style = #'hufnagel.lpes
as! bes! ces'
- \override NoteHead #'style = #'hufnagel.virga
+ \override NoteHead.style = #'hufnagel.virga
bes! as!
\bar "|"
% \break % 7 (8*1)
ges! fes!
\clef "hufnagel-do-fa"
- \override NoteHead #'style = #'hufnagel.punctum
+ \override NoteHead.style = #'hufnagel.punctum
es! des ces des! es! fes!
\bar "||"
% \break % 8 (8*1)
r2
\clef "mensural-g"
r4 r8 r16 r16
- \override NoteHead #'style = #'mensural
- \override Rest #'style = #'mensural
+ \override NoteHead.style = #'mensural
+ \override Rest.style = #'mensural
\clef "petrucci-f"
c8 b, c16 b, c32 b, c64 b, c64 b,
d8 e d16 e d32 e d64 e d64 e
}
\context {
\MensuralVoice
- \override NoteHead #'style = #'neomensural
- \override Rest #'style = #'neomensural
- \override Flag #'style = #'mensural
- \override Stem #'thickness = #1.0
+ \override NoteHead.style = #'neomensural
+ \override Rest.style = #'neomensural
+ \override Flag.style = #'mensural
+ \override Stem.thickness = #1.0
}
\context {
\MensuralStaff
- \revert BarLine #'transparent
- \override KeySignature #'glyph-name-alist = #alteration-mensural-glyph-name-alist
+ \revert BarLine.transparent
+ \override KeySignature.glyph-name-alist = #alteration-mensural-glyph-name-alist
clefGlyph = #"clefs.petrucci.c2"
}
\context {
\VaticanaStaff
- \revert BarLine #'transparent
- \override StaffSymbol #'thickness = #2.0
- \override KeySignature #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
- \override Custos #'neutral-position = #4
+ \revert BarLine.transparent
+ \override StaffSymbol.thickness = #2.0
+ \override KeySignature.glyph-name-alist = #alteration-vaticana-glyph-name-alist
+ \override Custos.neutral-position = #4
}
}
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "vocal-music, ancient-notation, template"
\Staff
\remove "Time_signature_engraver"
\remove "Bar_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
}
\context {
\Voice
- \override Stem #'length = #0
+ \override Stem.length = #0
}
\context {
\Score
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation, real-music, really-cool, template"
\set Score.skipBars = ##t
% incipit
- \once \override Score.SystemStartBracket #'transparent = ##t
+ \once \override Score.SystemStartBracket.transparent = ##t
% Set tight spacing
- \override Score.SpacingSpanner #'spacing-increment = #1.0
+ \override Score.SpacingSpanner.spacing-increment = #1.0
\key f \major
\time 2/2
- \once \override Staff.TimeSignature #'style = #'neomensural
- \override Voice.NoteHead #'style = #'neomensural
- \override Voice.Rest #'style = #'neomensural
+ \once \override Staff.TimeSignature.style = #'neomensural
+ \override Voice.NoteHead.style = #'neomensural
+ \override Voice.Rest.style = #'neomensural
\set Staff.printKeyCancellation = ##f
\cadenzaOn % turn off bar lines
\skip 1*10
- \once \override Staff.BarLine #'transparent = ##f
+ \once \override Staff.BarLine.transparent = ##f
\bar "||"
\skip 1*1 % need this extra \skip such that clef change comes
% after bar line
% main
\cadenzaOff % turn bar lines on again
- \once \override Staff.Clef #'full-size-change = ##t
+ \once \override Staff.Clef.full-size-change = ##t
\set Staff.forceClef = ##t
\key g \major
\time 4/4
- \override Voice.NoteHead #'style = #'default
- \override Voice.Rest #'style = #'default
+ \override Voice.NoteHead.style = #'default
+ \override Voice.Rest.style = #'default
% Setting printKeyCancellation back to #t must not
% occur in the first bar after the incipit. Dto. for forceClef.
\skip 1*7 % the actual music
% let finis bar go through all staves
- \override Staff.BarLine #'transparent = ##f
+ \override Staff.BarLine.transparent = ##f
% finis bar
\bar "|."
c'4 e'4.( d'8 c' b |
a4) b a2 |
b4.( c'8 d'4) c'4 |
- \once \override NoteHead #'transparent = ##t c'1 |
+ \once \override NoteHead.transparent = ##t c'1 |
b\breve |
}
}
a2 g4 e |
fis g4.( fis16 e fis4) |
g1 |
- \once \override NoteHead #'transparent = ##t g1 |
+ \once \override NoteHead.transparent = ##t g1 |
g\breve |
}
}
R1 |
R1 |
r2 d'2. d'4 b e' | % two bars
- \once \override NoteHead #'transparent = ##t e'1 |
+ \once \override NoteHead.transparent = ##t e'1 |
d'\breve |
}
}
R1 |
R1 |
g2. e4 |
- \once \override NoteHead #'transparent = ##t e1 |
+ \once \override NoteHead.transparent = ##t e1 |
g\breve |
}
}
\Score
% no bars in staves
- \override BarLine #'transparent = ##t
+ \override BarLine.transparent = ##t
% incipit should not start with a start delimiter
\remove "System_start_delimiter_engraver"
\Voice
% no slurs
- \override Slur #'transparent = ##t
+ \override Slur.transparent = ##t
% The command below can be commented out in
% short scores, but especially for large scores you
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation"
{
- \override Staff.TimeSignature #'style = #'neomensural
+ \override Staff.TimeSignature.style = #'neomensural
s1
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "template, vocal-music"
\layout {
\context {
\Score
- \override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 2)
}
\context {
\Staff
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "world-music"
\relative sol' {
\key re \kurd
- \accidentalStyle "forget"
+ \accidentalStyle forget
\cadenzaOn
sol4 sol sol sol fad mib sol1 fad8 mib re4. r8 mib1 fad sol
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
\stemDown
\slurUp
\slurNotes
- \once \override Slur #'eccentricity = #3.0
+ \once \override Slur.eccentricity = #3.0
\slurNotes
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "chords, editorial-annotations, rhythms, tweaks-and-overrides"
% Corrected to avoid collisions
r8
- \override Fingering #'add-stem-support = ##t
+ \override Fingering.add-stem-support = ##t
<f c'-5>8
- \override StringNumber #'add-stem-support = ##t
+ \override StringNumber.add-stem-support = ##t
<f c'\5>8
- \override StrokeFinger #'add-stem-support = ##t
+ \override StrokeFinger.add-stem-support = ##t
<f c'-\rightHandFinger #2 >8
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.30
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "chords, fretted-strings"
(cons (make-music 'TextSpanEvent 'span-direction 1)
(ly:music-property last-element 'articulations))))))
#{
- \once \override TextSpanner #'font-size = #-2
- \once \override TextSpanner #'font-shape = #'upright
- \once \override TextSpanner #'staff-padding = #3
- \once \override TextSpanner #'style = #'line
- \once \override TextSpanner #'to-barline = ##f
- \once \override TextSpanner #'bound-details =
+ \once \override TextSpanner.font-size = #-2
+ \once \override TextSpanner.font-shape = #'upright
+ \once \override TextSpanner.staff-padding = #3
+ \once \override TextSpanner.style = #'line
+ \once \override TextSpanner.to-barline = ##f
+ \once \override TextSpanner.bound-details =
#`((left
(text . ,#{ \markup { \draw-line #'( 0 . -.5) } #})
(Y . 0)
(padding . 0.25)
(attach-dir . 2)))
%% uncomment this line for make full barred
- % \once \override TextSpanner #'bound-details #'left #'text = \markup { "B" #str }
+ % \once \override TextSpanner.bound-details.left.text = \markup { "B" #str }
$music
#})
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
\relative c'' {
- \override Beam #'breakable = ##t
+ \override Beam.breakable = ##t
c8 c[ c] c[ c] c[ c] c[ \break
c8] c[ c] c[ c] c[ c] c
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, really-cool, text"
\layout { ragged-right = ##f }
\relative c' {
- \override TextScript #'extra-offset = #'(2 . 4)
+ \override TextScript.extra-offset = #'(2 . 4)
c2-\markup { \whiteout \pad-markup #0.5 "middle C" } c
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, symbols-and-glyphs"
<< { g4 as g } \\ { es4 bes es } >> |
% Modern notation:
% by default, \breathe uses the rcomma, just as if saying:
- % \override BreathingSign #'text = #(make-musicglyph-markup "scripts.rcomma")
+ % \override BreathingSign.text = #(make-musicglyph-markup "scripts.rcomma")
<< { g4 as g } \\ { es4 \breathe bes es } >> |
% rvarcomma and lvarcomma are variations of the default rcomma and lcomma
% N.B.: must use Staff context here, since we start a Voice below
- \override Staff.BreathingSign #'text = \markup { \musicglyph #"scripts.rvarcomma" }
+ \override Staff.BreathingSign.text = \markup { \musicglyph #"scripts.rvarcomma" }
<< { g4 as g } \\ { es4 \breathe bes es } >> |
% vee
- \override BreathingSign #'text = \markup { \musicglyph #"scripts.upbow" }
+ \override BreathingSign.text = \markup { \musicglyph #"scripts.upbow" }
es8[ d es f g] \breathe f |
% caesura
- \override BreathingSign #'text = \markup { \musicglyph #"scripts.caesura.curved" }
+ \override BreathingSign.text = \markup { \musicglyph #"scripts.caesura.curved" }
es8[ d] \breathe es[ f g f] |
es2 r4 \bar "||"
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "contemporary-notation, expressive-marks, symbols-and-glyphs"
<<
{
\dynamicUp
- \override DynamicLineSpanner #'staff-padding = #4
+ \override DynamicLineSpanner.staff-padding = #4
r2 r16 c'8.\pp r4
}
\\
{
- \override DynamicLineSpanner #'layer = #0
+ \override DynamicLineSpanner.layer = #0
des,2\mf\< ~
- \override TextScript #'layer = #2
+ \override TextScript.layer = #2
des16_\markup {
\postscript #"
1.9 -8 translate
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, symbols-and-glyphs, tweaks-and-overrides"
\relative c'' {
c2.
% construct the symbol
- \override BreathingSign #'text = \markup {
+ \override BreathingSign.text = \markup {
\line {
\musicglyph #"scripts.caesura.curved"
\translate #'(-1.75 . 1.6)
}
\breathe c4
% set the breathe mark back to normal
- \revert BreathingSign #'text
+ \revert BreathingSign.text
c2. \breathe c4
\bar "|."
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, really-cool, scheme-language, text"
texidoc = "
This example provides a function to typeset a hairpin (de)crescendo
with some additional text below it, such as @qq{molto} or @qq{poco}.
+The added text will change the direction according to the direction of
+the hairpin. The Hairpin is aligned to DynamicText.
+
The example also illustrates how to modify the way an object is
normally printed, using some Scheme code.
doctitle = "Center text below hairpin dynamics"
} % begin verbatim
-
hairpinWithCenteredText =
#(define-music-function (parser location text) (markup?)
#{
- \override Voice.Hairpin #'stencil = #(lambda (grob)
- (ly:stencil-aligned-to
- (ly:stencil-combine-at-edge
- (ly:stencil-aligned-to (ly:hairpin::print grob) X CENTER)
- Y DOWN
- (ly:stencil-aligned-to (grob-interpret-markup grob text) X CENTER))
- X LEFT))
+ \once \override Voice.Hairpin.after-line-breaking =
+ #(lambda (grob)
+ (let* ((stencil (ly:hairpin::print grob))
+ (par-y (ly:grob-parent grob Y))
+ (dir (ly:grob-property par-y 'direction))
+ (new-stencil (ly:stencil-aligned-to
+ (ly:stencil-combine-at-edge
+ (ly:stencil-aligned-to stencil X CENTER)
+ Y dir
+ (ly:stencil-aligned-to (grob-interpret-markup grob text) X CENTER))
+ X LEFT))
+ (staff-space (ly:output-def-lookup (ly:grob-layout grob) 'staff-space))
+ (staff-line-thickness
+ (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness))
+ (grob-name (lambda (x) (assq-ref (ly:grob-property x 'meta) 'name)))
+ (par-x (ly:grob-parent grob X))
+ (dyn-text (eq? (grob-name par-x) 'DynamicText ))
+ (dyn-text-stencil-x-length
+ (if dyn-text
+ (interval-length
+ (ly:stencil-extent (ly:grob-property par-x 'stencil) X))
+ 0))
+ (x-shift
+ (if dyn-text
+ (-
+ (+ staff-space dyn-text-stencil-x-length)
+ (* 0.5 staff-line-thickness)) 0)))
+
+ (ly:grob-set-property! grob 'Y-offset 0)
+ (ly:grob-set-property! grob 'stencil
+ (ly:stencil-translate-axis
+ new-stencil
+ x-shift X))))
#})
-hairpinMolto = \hairpinWithCenteredText \markup { \italic molto }
-hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo }
+hairpinMolto =
+\hairpinWithCenteredText \markup { \italic molto }
+
+hairpinMore =
+\hairpinWithCenteredText \markup { \larger moltissimo }
\layout { ragged-right = ##f }
\hairpinMolto
c2\< c\f
\hairpinMore
- c2\< c\f
+ c2\ppppp\< c\f
+ \break
+ \hairpinMolto
+ c2^\< c\f
+ \hairpinMore
+ c2\ppppp\< c\f
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.31
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "text, tweaks-and-overrides, contexts-and-engravers"
\context {
\Voice
\consists #Text_align_engraver
- \override TextScript #'X-offset =
+ \override TextScript.X-offset =
#ly:self-alignment-interface::aligned-on-x-parent
- \override TextScript #'self-alignment-X = #CENTER
+ \override TextScript.self-alignment-X = #CENTER
}
}
\new Staff <<
\relative c'' {
- \override NoteColumn #'force-hshift = #3
+ \override NoteColumn.force-hshift = #3
c1-\markup { \arrow-head #Y #DOWN ##t }
}
\\
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, really-simple, simultaneous-notes, specific-notation, tweaks-and-overrides"
\relative c' {
- <\tweak #'font-size #+2 c e g c \tweak #'font-size #-2 e>1^\markup { A tiny e }_\markup { A big c }
+ <\tweak font-size #+2 c e g c \tweak font-size #-2 e>1^\markup { A tiny e }_\markup { A big c }
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
{
f8 f''8 f8 f''8
- \override Beam #'auto-knee-gap = #6
+ \override Beam.auto-knee-gap = #6
f8 f''8 f8 f''8
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
\relative c'' {
\compressFullBarRests
R1*2 | R1*5 | R1*9
- \override MultiMeasureRest #'expand-limit = #3
+ \override MultiMeasureRest.expand-limit = #3
R1*2 | R1*5 | R1*9
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings"
\new FretBoards {
\chordmode {
c1
- \override FretBoard #'(fret-diagram-details orientation) =
+ \override FretBoard.fret-diagram-details.orientation =
#'landscape
c1
- \override FretBoard #'(fret-diagram-details orientation) =
+ \override FretBoard.fret-diagram-details.orientation =
#'opposing-landscape
c1
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "contexts-and-engravers, midi, real-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "really-simple, vocal-music"
Hi, my name is Bert.
}
\addlyrics {
- \override StanzaNumber #'font-name = #"DejaVu"
+ \override StanzaNumber.font-name = #"DejaVu"
\set stanza = #"2. "
- \override LyricText #'font-family = #'typewriter
+ \override LyricText.font-family = #'typewriter
Oh, ché -- ri, je t'aime
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
\relative c'' {
\set crescendoText = \markup { \italic { cresc. poco } }
\set crescendoSpanner = #'text
- \override DynamicTextSpanner #'style = #'dotted-line
+ \override DynamicTextSpanner.style = #'dotted-line
a2\< a
a2 a
a2 a
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "pitches"
\new Staff {
\time 2/4
- \override AmbitusLine #'gap = #0
+ \override AmbitusLine.gap = #0
c'4 g''
}
\new Staff {
\time 2/4
- \override AmbitusLine #'gap = #1
+ \override AmbitusLine.gap = #1
c'4 g''
}
\new Staff {
\time 2/4
- \override AmbitusLine #'gap = #1.5
+ \override AmbitusLine.gap = #1.5
c'4 g''
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks"
\relative c'' {
c2
- \override BreathingSign #'text =
+ \override BreathingSign.text =
\markup { \musicglyph #"scripts.rvarcomma" }
\breathe
d2
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, rhythms"
\relative c' {
c4.. a16 r2 |
- \override Dots #'dot-count = #4
+ \override Dots.dot-count = #4
c4.. a16 r2 |
- \override Dots #'dot-count = #0
+ \override Dots.dot-count = #0
c4.. a16 r2 |
- \revert Dots #'dot-count
+ \revert Dots.dot-count
c4.. a16 r2 |
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "specific-notation, staff-notation"
\upper
}
\new Staff {
- \override Staff.StaffSymbol #'line-count = #4
+ \override Staff.StaffSymbol.line-count = #4
\lower
}
>>
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "paper-and-layout, staff-notation, tweaks-and-overrides"
}
\new Staff \with {
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
} {
\clef bass
c8 c c c c\f c c c
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
\relative c'' {
\times 2/3 { c8 c c }
\times 2/3 { c8 c c }
- \override TupletNumber #'text = #tuplet-number::calc-fraction-text
+ \override TupletNumber.text = #tuplet-number::calc-fraction-text
\times 2/3 { c8 c c }
- \override TupletNumber #'stencil = ##f
+ \override TupletNumber.stencil = ##f
\times 2/3 { c8 c c }
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.17
+%% Note: this file works from version 2.16.0
\version "2.16.0"
\header {
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "rhythms, vocal-music, ancient-notation, contexts-and-engravers, specific-notation"
stemOn = {
- \revert Staff.Stem #'transparent
- \revert Staff.Flag #'transparent
+ \revert Staff.Stem.transparent
+ \revert Staff.Flag.transparent
}
stemOff = {
- \override Staff.Stem #'transparent = ##t
- \override Staff.Flag #'transparent = ##t
+ \override Staff.Stem.transparent = ##t
+ \override Staff.Flag.transparent = ##t
}
\score {
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.20
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "headword"
\context Staff = lower {
\new Voice {
\clef bass
- \accidentalStyle "modern-cautionary"
+ \accidentalStyle modern-cautionary
<<
\Tenor
\Bass
}
\context {
\Voice
- \override StanzaNumber #'padding = #1.8
+ \override StanzaNumber.padding = #1.8
}
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, pitches, really-cool"
\score {
\new Staff \relative c' {
- \override NoteHead #'color = #color-notehead
+ \override NoteHead.color = #color-notehead
c8 b d dis ees f g aes
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "simultaneous-notes, syntax-and-expressions, text"
indent = 6.0\cm
\context {
\Score
- \override SystemStartBar #'collapse-height = #30
+ \override SystemStartBar.collapse-height = #30
}
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
(#:column (two num)))))))
\relative c' {
- \override Staff.TimeSignature #'stencil = #(compound-time "2" "3" "8")
+ \override Staff.TimeSignature.stencil = #(compound-time "2" "3" "8")
\time 5/8
\set Staff.beatStructure = #'(2 3)
c8 d e fis gis
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.19
+%% Note: this file works from version 2.16.0
\version "2.16.0"
\header {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
} % begin verbatim
consistentlyLeftAlignedBarNumbers = {
- \override Score.BarNumber #'break-visibility = #end-of-line-invisible
- \override Score.BarNumber #'self-alignment-X =
+ \override Score.BarNumber.break-visibility = #end-of-line-invisible
+ \override Score.BarNumber.self-alignment-X =
#(lambda (grob)
(let ((break-dir (ly:item-break-dir grob)))
(if (= break-dir RIGHT) RIGHT LEFT)))
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "contemporary-notation, expressive-marks, specific-notation"
\relative c'' {
\time 3/4
- \override Glissando #'style = #'zigzag
+ \override Glissando.style = #'zigzag
c4 c
\cadenzaOn
c4\glissando
creating-blank-staves.ly
cross-staff-stems.ly
defining-an-engraver-in-scheme--ambitus-engraver.ly
+displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.ly
engravers-one-by-one.ly
mensurstriche-layout-bar-lines-between-the-staves.ly
nesting-staves.ly
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
\paper { ragged-right = ##t }
\relative c'' {
- \override Hairpin #'to-barline = ##f
- \override Glissando #'breakable = ##t
+ \override Hairpin.to-barline = ##f
+ \override Glissando.breakable = ##t
% show hairpin
- \override Hairpin #'after-line-breaking = ##t
+ \override Hairpin.after-line-breaking = ##t
% hide text span
- \override TextSpanner #'after-line-breaking =
+ \override TextSpanner.after-line-breaking =
#ly:spanner::kill-zero-spanned-time
e2\<\startTextSpan
% show glissando
- \override Glissando #'after-line-breaking = ##t
+ \override Glissando.after-line-breaking = ##t
f2\glissando
\break
f,1\!\stopTextSpan
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
\relative c''' {
- \once \override TextScript #'script-priority = #-100
+ \once \override TextScript.script-priority = #-100
a2^\prall^\markup { \sharp }
- \once \override Script #'script-priority = #-100
+ \once \override Script.script-priority = #-100
a2^\prall^\markup { \sharp }
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
\new Voice {
\relative c' {
<< \music s4^"default" >>
- \override TupletBracket #'bracket-visibility = #'if-no-beam
+ \override TupletBracket.bracket-visibility = #'if-no-beam
<< \music s4^"'if-no-beam" >>
- \override TupletBracket #'bracket-visibility = ##t
+ \override TupletBracket.bracket-visibility = ##t
<< \music s4^"#t" >>
- \override TupletBracket #'bracket-visibility = ##f
+ \override TupletBracket.bracket-visibility = ##f
<< \music s4^"#f" >>
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, expressive-marks, tweaks-and-overrides"
\relative c'' {
- \once \override TextScript #'avoid-slur = #'inside
- \once \override TextScript #'outside-staff-priority = ##f
+ \once \override TextScript.avoid-slur = #'inside
+ \once \override TextScript.outside-staff-priority = ##f
c2(^\markup \tiny \override #'(baseline-skip . 1) {
\halign #-4
\center-column {
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.27
+%% Note: this file works from version 2.16.0
\version "2.16.0"
\header {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, expressive-marks, scheme-language, staff-notation, tweaks-and-overrides"
\relative c' {
% optional override to remove warnings for fingerings larger than 5
- \override Fingering #'text = #calc-finger-without-warning
+ \override Fingering.text = #calc-finger-without-warning
c1\ten
c1\fifty
c1-\finger #36
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
{
\key a \major
\set Score.markFormatter = #format-mark-box-letters
- \once \override Score.RehearsalMark #'outside-staff-priority = #5000
- \once \override Score.RehearsalMark #'self-alignment-X = #LEFT
- \once \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+ \once \override Score.RehearsalMark.outside-staff-priority = #5000
+ \once \override Score.RehearsalMark.self-alignment-X = #LEFT
+ \once \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\mark \markup { \bold { Senza denti } }
% the hidden measure and bar line
% \cadenzaOn turns off automatic calculation of bar numbers
\cadenzaOn
- \once \override Score.TimeSignature #'stencil = ##f
+ \once \override Score.TimeSignature.stencil = ##f
\time 1/16
s16 \bar ""
\cadenzaOff
\time 4/4
- \once \override Score.RehearsalMark #'self-alignment-X = #LEFT
+ \once \override Score.RehearsalMark.self-alignment-X = #LEFT
\mark \markup { \box \bold Intro }
d'1
\mark \default
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
\paper { ragged-right = ##f }
\relative c'' {
- \override TextSpanner #'(bound-details left text) = #"bla"
- \override TextSpanner #'(bound-details right text) = #"blu"
+ \override TextSpanner.bound-details.left.text = #"bla"
+ \override TextSpanner.bound-details.right.text = #"blu"
a4 \startTextSpan
b4 c
a4 \stopTextSpan
- \override TextSpanner #'style = #'line
- \once \override TextSpanner
- #'(bound-details left stencil-align-dir-y) = #CENTER
+ \override TextSpanner.style = #'line
+ \once \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
a4 \startTextSpan
b4 c
a4 \stopTextSpan
- \override TextSpanner #'style = #'dashed-line
- \override TextSpanner #'(bound-details left text) =
+ \override TextSpanner.style = #'dashed-line
+ \override TextSpanner.bound-details.left.text =
\markup { \draw-line #'(0 . 1) }
- \override TextSpanner #'(bound-details right text) =
+ \override TextSpanner.bound-details.right.text =
\markup { \draw-line #'(0 . -2) }
- \once \override TextSpanner #'(bound-details right padding) = #-2
+ \once \override TextSpanner.bound-details.right.padding = #-2
a4 \startTextSpan
b4 c
a4 \stopTextSpan
\set Staff.middleCPosition = #-13
- \override TextSpanner #'dash-period = #10
- \override TextSpanner #'dash-fraction = #0.5
- \override TextSpanner #'thickness = #10
+ \override TextSpanner.dash-period = #10
+ \override TextSpanner.dash-fraction = #0.5
+ \override TextSpanner.thickness = #10
a4 \startTextSpan
b4 c
a4 \stopTextSpan
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "chords, keyboards, tweaks-and-overrides, workaround"
avoidance then arise. If the stems from the lower staff were used in
the following example, it would be necessary to change the automatic
beam collision avoidance settings so that it doesn't detect collisions
-between staves using @code{\\override Staff.Beam #'collision-voice-only
+between staves using @code{\\override Staff.Beam.collision-voice-only
= ##t}
"
\relative c' {
<<
{ r4
- \override Stem #'cross-staff = ##t
- \override Stem #'length = #19 % this is in half-spaces,
+ \override Stem.cross-staff = ##t
+ \override Stem.length = #19 % this is in half-spaces,
% so it makes stems 9.5 staffspaces long
- \override Stem #'Y-offset = #-6 % stems are normally lengthened
+ \override Stem.Y-offset = #-6 % stems are normally lengthened
% upwards, so here we must lower the stem by the amount
% equal to the lengthening - in this case (19 - 7) / 2
% (7 is default stem length)
e e e }
{ s4
\change Staff = "bottom"
- \override NoteColumn #'ignore-collision = ##t
+ \override NoteColumn.ignore-collision = ##t
c, c c
}
>>
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.42
+%% Note: this file works from version 2.16.0
\version "2.16.0"
\header {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation, specific-notation, symbols-and-glyphs, tweaks-and-overrides"
\layout { ragged-right = ##t }
\new Staff \with { \consists "Custos_engraver" } \relative c' {
- \override Staff.Custos #'neutral-position = #4
+ \override Staff.Custos.neutral-position = #4
- \override Staff.Custos #'style = #'hufnagel
+ \override Staff.Custos.style = #'hufnagel
c1^"hufnagel" \break
<d a' f'>1
- \override Staff.Custos #'style = #'medicaea
+ \override Staff.Custos.style = #'medicaea
c1^"medicaea" \break
<d a' f'>1
- \override Staff.Custos #'style = #'vaticana
+ \override Staff.Custos.style = #'vaticana
c1^"vaticana" \break
<d a' f'>1
- \override Staff.Custos #'style = #'mensural
+ \override Staff.Custos.style = #'mensural
c1^"mensural" \break
<d a' f'>1
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
}
\new FretBoards {
% Set global properties of fret diagram
- \override FretBoards.FretBoard #'size = #'1.2
- \override FretBoard
- #'(fret-diagram-details finger-code) = #'in-dot
- \override FretBoard
- #'(fret-diagram-details dot-color) = #'white
+ \override FretBoards.FretBoard.size = #'1.2
+ \override FretBoard.fret-diagram-details.finger-code = #'in-dot
+ \override FretBoard.fret-diagram-details.dot-color = #'white
\chordmode {
c
- \once \override FretBoard #'size = #'1.0
- \once \override FretBoard
- #'(fret-diagram-details barre-type) = #'straight
- \once \override FretBoard
- #'(fret-diagram-details dot-color) = #'black
- \once \override FretBoard
- #'(fret-diagram-details finger-code) = #'below-string
+ \once \override FretBoard.size = #'1.0
+ \once \override FretBoard.fret-diagram-details.barre-type = #'straight
+ \once \override FretBoard.fret-diagram-details.dot-color = #'black
+ \once \override FretBoard.fret-diagram-details.finger-code = #'below-string
c'
- \once \override FretBoard
- #'(fret-diagram-details barre-type) = #'none
- \once \override FretBoard
- #'(fret-diagram-details number-type) = #'arabic
- \once \override FretBoard
- #'(fret-diagram-details orientation) = #'landscape
- \once \override FretBoard
- #'(fret-diagram-details mute-string) = #"M"
- \once \override FretBoard
- #'(fret-diagram-details label-dir) = #LEFT
- \once \override FretBoard
- #'(fret-diagram-details dot-color) = #'black
+ \once \override FretBoard.fret-diagram-details.barre-type = #'none
+ \once \override FretBoard.fret-diagram-details.number-type = #'arabic
+ \once \override FretBoard.fret-diagram-details.orientation = #'landscape
+ \once \override FretBoard.fret-diagram-details.mute-string = #"M"
+ \once \override FretBoard.fret-diagram-details.label-dir = #LEFT
+ \once \override FretBoard.fret-diagram-details.dot-color = #'black
c'
- \once \override FretBoard
- #'(fret-diagram-details finger-code) = #'below-string
- \once \override FretBoard
- #'(fret-diagram-details dot-radius) = #0.35
- \once \override FretBoard
- #'(fret-diagram-details dot-position) = #0.5
- \once \override FretBoard
- #'(fret-diagram-details fret-count) = #3
+ \once \override FretBoard.fret-diagram-details.finger-code = #'below-string
+ \once \override FretBoard.fret-diagram-details.dot-radius = #0.35
+ \once \override FretBoard.fret-diagram-details.dot-position = #0.5
+ \once \override FretBoard.fret-diagram-details.fret-count = #3
d
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
\new Voice = "mel" {
\textLengthOn
% Set global properties of fret diagram
- \override TextScript #'size = #'1.2
- \override TextScript
- #'(fret-diagram-details finger-code) = #'in-dot
- \override TextScript
- #'(fret-diagram-details dot-color) = #'white
+ \override TextScript.size = #'1.2
+ \override TextScript.fret-diagram-details.finger-code = #'in-dot
+ \override TextScript.fret-diagram-details.dot-color = #'white
%% C major for guitar, no barre, using defaults
% terse style
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations"
\relative c'' {
a4 b c b
- \override Stem #'neutral-direction = #up
+ \override Stem.neutral-direction = #up
a4 b c b
- \override Stem #'neutral-direction = #down
+ \override Stem.neutral-direction = #down
a4 b c b
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.31
+%% Note: this file works from version 2.16.0
\version "2.16.0"
\header {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings"
\set Staff.stringTunings = #cuatroTuning
% \override FretBoard
% #'(fret-diagram-details string-count) = #'4
- \override FretBoard
- #'(fret-diagram-details finger-code) = #'in-dot
+ \override FretBoard.fret-diagram-details.finger-code = #'in-dot
\primeros
}
\layout {
\context {
\Score
- \override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 1 16)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16)
}
}
\midi { }
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "staff-notation, tweaks-and-overrides"
\score {
\new StaffGroup <<
% Must be lower than the actual number of staff lines
- \override StaffGroup.SystemStartBracket #'collapse-height = #1
- \override Score.SystemStartBar #'collapse-height = #1
+ \override StaffGroup.SystemStartBracket.collapse-height = #1
+ \override Score.SystemStartBar.collapse-height = #1
\new Staff {
c'1
}
\null
\score {
\new PianoStaff <<
- \override PianoStaff.SystemStartBrace #'collapse-height = #1
- \override Score.SystemStartBar #'collapse-height = #1
+ \override PianoStaff.SystemStartBrace.collapse-height = #1
+ \override Score.SystemStartBar.collapse-height = #1
\new Staff {
c'1
}
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.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.16.0"
+
+\header {
+ lsrtags = "contexts-and-engravers"
+
+ texidoc = "
+In orchestral scores sometimes single or groups of instruments are
+silent for a while and their staves can be removed for that time (with
+@code{\\removeEmptyStaves}).
+
+
+When they play again it is often preferred to show the staves of all
+instruments of such a group. this can be done adding the
+@code{Keep_alive_together_engraver} in the grouper (e.g. a GrandStaff
+or a StaffGroup)
+
+
+In the example the violins are silent in the 2nd system and in the 3rd
+system. Only the first violin plays the last measure but the staff of
+the second violin is also displayed.
+
+"
+ doctitle = "Displaying a whole GrandStaff system if only one of its staves is alive"
+} % begin verbatim
+
+\score {
+ <<
+ \new StaffGroup = "StaffGroup_woodwinds"
+ <<
+ \new Staff = "Staff_flute" \with {
+ instrumentName = "Flute"
+ shortInstrumentName = "Fl"}
+ \relative { \repeat unfold 3 { c'4 c c c | c c c c | c c c c | \break }
+ }
+ >>
+ \new StaffGroup = "StaffGroup_Strings"
+ <<
+ \new GrandStaff = "GrandStaff_violins"
+ <<
+ \new Staff = "StaffViolinI" \with {
+ instrumentName = "Violin I"
+ shortInstrumentName = "Vi I"
+ }
+ \relative c'' {
+ a1 \repeat unfold 7 { s1 } \repeat unfold 12 a16 a4
+ }
+ \new Staff = "StaffViolinII" \with {
+ instrumentName = "Violin II"
+ shortInstrumentName = "Vi II"
+ }
+ \relative { e1 \repeat unfold 8 { s1 } }
+ >>
+ \new Staff = "Staff_cello" \with {
+ instrumentName = "Cello"
+ shortInstrumentName = "Ce"
+ }
+ \relative c { \clef bass \repeat unfold 9 { c1 }}
+ >>
+ >>
+}
+\layout {
+ \context {
+ \GrandStaff
+ \consists Keep_alive_together_engraver
+ }
+ \context {
+ \Staff
+ \RemoveEmptyStaves
+ }
+}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "chords, simultaneous-notes, workaround"
} % begin verbatim
fixA = {
- \once \override Stem #'length = #9
+ \once \override Stem.length = #9
}
fixB = {
- \once \override NoteHead #'X-offset = #1.7
- \once \override Stem #'rotation = #'(45 0 0)
- \once \override Stem #'extra-offset = #'(-0.2 . -0.2)
- \once \override Flag #'style = #'no-flag
- \once \override Accidental #'extra-offset = #'(4 . 0)
+ \once \override NoteHead.X-offset = #1.7
+ \once \override Stem.rotation = #'(45 0 0)
+ \once \override Stem.extra-offset = #'(-0.2 . -0.2)
+ \once \override Flag.style = #'no-flag
+ \once \override Accidental.extra-offset = #'(4 . 0)
}
\relative c' {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\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 @}
(format-ancestry (get-ancestry grob) 0)))
\relative c' {
- \once \override NoteHead #'before-line-breaking = #display-ancestry
+ \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
+ \once \override Accidental.before-line-breaking = #display-ancestry
+ \once \override Arpeggio.before-line-breaking = #display-ancestry
<f as c>4\arpeggio
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
\relative c'' {
- \override TextScript #'stencil =
+ \override TextScript.stencil =
#(make-stencil-boxer 0.1 0.3 ly:text-interface::print)
c'4^"foo"
- \override Stem #'stencil =
+ \override Stem.stencil =
#(make-stencil-boxer 0.05 0.25 ly:stem::print)
- \override Score.RehearsalMark #'stencil =
+ \override Score.RehearsalMark.stencil =
#(make-stencil-boxer 0.15 0.3 ly:text-interface::print)
b8
- \revert Stem #'stencil
+ \revert Stem.stencil
- \revert Flag #'stencil
+ \revert Flag.stencil
c4. c4
\mark "F"
c1
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations"
} % begin verbatim
circle =
-\once \override NoteHead #'stencil = #(lambda (grob)
+\once \override NoteHead.stencil = #(lambda (grob)
(let* ((note (ly:note-head::print grob))
(combo-stencil (ly:stencil-add
note
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
\circle \finger 2
}
}
- \override Score.BarNumber #'break-visibility = #all-visible
- \override Score.BarNumber #'stencil =
+ \override Score.BarNumber.break-visibility = #all-visible
+ \override Score.BarNumber.stencil =
#(make-stencil-circler 0.1 0.25 ly:text-interface::print)
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
|
e'4-2
r8
- \once \override Script #'script-priority = #-100
+ \once \override Script.script-priority = #-100
\afterGrace
f'8 ( \trill ^ \markup { \finger "3-2" }
{ e'16 [ f'16 ] }
\new Staff {
\key af \major
\clef treble
- \override Fingering #'direction = #down
+ \override Fingering.direction = #down
\set Staff.fingeringOrientations = #'(down)
\partial 8
<af' af>8 \staccato
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
\relative c' {
<c e g>2~ <c e g>
- \override TieColumn #'tie-configuration =
+ \override TieColumn.tie-configuration =
#'((0.0 . 1) (-2.0 . 1) (-4.0 . 1))
<c e g>2~ <c e g>
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "repeats, rhythms"
\relative c'' {
\repeat tremolo 8 { a32 f }
- \override Beam #'gap-count = #1
+ \override Beam.gap-count = #1
\repeat tremolo 8 { a32 f }
- \override Beam #'gap-count = #2
+ \override Beam.gap-count = #2
\repeat tremolo 8 { a32 f }
- \override Beam #'gap-count = #3
+ \override Beam.gap-count = #3
\repeat tremolo 8 { a32 f }
- \override Beam #'gap-count = #3
- \override Beam #'gap = #1.33
+ \override Beam.gap-count = #3
+ \override Beam.gap = #1.33
\repeat tremolo 8 { a32 f }
- \override Beam #'gap = #1
+ \override Beam.gap = #1
\repeat tremolo 8 { a32 f }
- \override Beam #'gap = #0.67
+ \override Beam.gap = #0.67
\repeat tremolo 8 { a32 f }
- \override Beam #'gap = #0.33
+ \override Beam.gap = #0.33
\repeat tremolo 8 { a32 f }
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
%\layout {
% \context {
% \Score
-% \override SpacingSpanner #'base-shortest-duration =
+% \override SpacingSpanner.base-shortest-duration =
% #(ly:make-moment 1 20)
% }
%}
\key g \major
\time 6/8
\partial 2
- \once \override TextScript #'staff-padding = #2
+ \once \override TextScript.staff-padding = #2
d'8 \staccato
^ \markup { \column {
RONDO
adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly
adding-parentheses-around-an-expressive-mark-or-chordal-note.ly
+adding-timing-marks-to-long-glissandi.ly
adjusting-the-shape-of-falls-and-doits.ly
alternative-breve-note.ly
asymmetric-slurs.ly
setting-the-minimum-length-of-hairpins.ly
showing-the-same-articulation-above-and-below-a-note-or-chord.ly
snap-pizzicato-or-bartok-pizzicato.ly
+using-a-tick-as-the-breath-mark-symbol.ly
using-arpeggiobracket-to-make-divisi-more-visible.ly
using-double-slurs-for-legato-chords.ly
using-the-whiteout-property.ly
--- /dev/null
+% 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.6
+\version "2.17.6"
+
+\header {
+ lsrtags = "staff-notation, tweaks-and-overrides"
+ texidoc = "
+A glissando which extends into several @code{\\alternative} blocks
+can be simulated by adding a hidden grace note with a glissando
+at the start of each @code{\\alternative} block. The grace note
+should be at the same pitch as the note which starts the initial
+glissando. This is implemented here with a music function which
+takes the pitch of the grace note as its argument.
+
+Note that in polyphonic music the grace note must be matched with
+corresponding grace notes in all other voices.
+"
+ doctitle = "Extending glissandi across repeats"
+} % begin verbatim
+
+
+repeatGliss = #(define-music-function (parser location grace)
+ (ly:pitch?)
+ #{
+ % the next two lines ensure the glissando is long enough
+ % to be visible
+ \once \override Glissando.springs-and-rods
+ = #ly:spanner::set-spacing-rods
+ \once \override Glissando.minimum-length = #3.5
+ \once \hideNotes
+ \grace $grace \glissando
+ #})
+
+\score {
+ \relative c'' {
+ \repeat volta 3 { c4 d e f\glissando }
+ \alternative {
+ { g2 d }
+ { \repeatGliss f g2 e }
+ { \repeatGliss f e2 d }
+ }
+ }
+}
+
+music = \relative c' {
+ \voiceOne
+ \repeat volta 2 {
+ g a b c\glissando
+ }
+ \alternative {
+ { d1 }
+ { \repeatGliss c e1 }
+ }
+}
+
+\score {
+ \new StaffGroup <<
+ \new Staff <<
+ \context Voice { \clef "G_8" \music }
+ >>
+ \new TabStaff <<
+ \context TabVoice { \clef "moderntab" \music }
+ >>
+ >>
+}
\ No newline at end of file
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
\new FiguredBass \figuremode {
\set figuredBassAlterationDirection = #RIGHT
\set figuredBassPlusDirection = #RIGHT
- \override BassFigureAlignment #'stacking-dir = #DOWN
+ \override BassFigureAlignment.stacking-dir = #DOWN
s8 |
s4 <6>4 <_+>4 <6>4 |
<6 4\+ 2>8 <6>8 <_+> s8 s2 |
\layout {
\context {
\Score
- \override RehearsalMark #'break-align-symbols = #'(time-signature)
- \override RehearsalMark #'self-alignment-X = #LEFT
- \override TimeSignature #'break-align-anchor-alignment = #LEFT
+ \override RehearsalMark.break-align-symbols = #'(time-signature)
+ \override RehearsalMark.self-alignment-X = #LEFT
+ \override TimeSignature.break-align-anchor-alignment = #LEFT
}
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "keyboards, tweaks-and-overrides"
\relative c'' {
c2\sostenutoOn c
c2\sostenutoOff c
- \once \override Staff.PianoPedalBracket #'shorten-pair = #'(-7 . -2)
+ \once \override Staff.PianoPedalBracket.shorten-pair = #'(-7 . -2)
c2\sostenutoOn c
c2\sostenutoOff c
- \once \override Staff.PianoPedalBracket #'edge-height = #'(0 . 3)
+ \once \override Staff.PianoPedalBracket.edge-height = #'(0 . 3)
c2\sostenutoOn c
c2\sostenutoOff c
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "symbols-and-glyphs, winds"
} % begin verbatim
centermarkup = {
- \once \override TextScript #'self-alignment-X = #CENTER
- \once \override TextScript #'X-offset =#(ly:make-simple-closure
+ \once \override TextScript.self-alignment-X = #CENTER
+ \once \override TextScript.X-offset =#(ly:make-simple-closure
`(,+
,(ly:make-simple-closure (list
ly:self-alignment-interface::centered-on-x-parent))
{\relative c'
{
g\open
- \once \override TextScript #'staff-padding = #-1.0 \centermarkup
+ \once \override TextScript.staff-padding = #-1.0 \centermarkup
g^\markup{\combine \musicglyph #"scripts.open" \musicglyph
#"scripts.tenuto"}
\centermarkup g^\markup{\combine \musicglyph #"scripts.open"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings, specific-notation, stylesheet, version-specific"
% Just handy :)
tupletOff = {
- \once \override TupletNumber #'stencil = ##f
- \once \override TupletBracket #'stencil = ##f
+ \once \override TupletNumber.stencil = ##f
+ \once \override TupletBracket.stencil = ##f
}
tupletsOff = {
- \override TupletNumber #'stencil = ##f
- \override TupletBracket #'bracket-visibility = #'if-no-beam
+ \override TupletNumber.stencil = ##f
+ \override TupletBracket.bracket-visibility = #'if-no-beam
}
tupletsOn = {
- \override TupletBracket #'bracket-visibility = #'default
- \revert TupletNumber #'stencil
+ \override TupletBracket.bracket-visibility = #'default
+ \revert TupletNumber.stencil
}
headsOff = {
- \override TabNoteHead #'transparent = ##t
- \override NoteHead #'transparent = ##t
- \override NoteHead #'no-ledgers = ##t
+ \override TabNoteHead.transparent = ##t
+ \override NoteHead.transparent = ##t
+ \override NoteHead.no-ledgers = ##t
}
headsOn = {
- \override TabNoteHead #'transparent = ##f
- \override NoteHead #'transparent = ##f
- \override NoteHead #'no-ledgers = ##f
+ \override TabNoteHead.transparent = ##f
+ \override NoteHead.transparent = ##f
+ \override NoteHead.no-ledgers = ##f
}
%%%%%%% Cut here ----- End 'flamenco.ly'
}
\tupletsOff
- \override Beam #'positions = #'(2 . 2)
+ \override Beam.positions = #'(2 . 2)
\times 2/3 {
a8^\markup{ \small p }
<e' a>^\strokeUpGolpe
}
\tupletsOn
- \once \override TextScript #'extra-offset = #'(0 . -1)
+ \once \override TextScript.extra-offset = #'(0 . -1)
<g, b f'>1_\golpe^\mUp
\bar "|."
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "contemporary-notation, winds"
slap =
#(define-music-function (parser location music) (ly:music?)
#{
- \override NoteHead #'stencil =
+ \override NoteHead.stencil =
#(lambda (grob)
(grob-interpret-markup grob
(markup #:musicglyph "scripts.sforzato")))
- \override NoteHead #'stem-attachment =
+ \override NoteHead.stem-attachment =
#(lambda (grob)
(let* ((thickness (ly:staff-symbol-line-thickness grob))
(stem (ly:grob-object grob 'stem))
0)
(/ thickness 2)))))
$music
- \revert NoteHead #'stencil
- \revert NoteHead #'stem-attachment
+ \revert NoteHead.stencil
+ \revert NoteHead.stem-attachment
#})
\relative c' {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "simultaneous-notes, tweaks-and-overrides"
\\
{
<b f'>2
- \once \override NoteColumn #'force-hshift = #1.7
+ \once \override NoteColumn.force-hshift = #1.7
<b f'>2
}
>>
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "vocal-music"
}
\addlyrics {
syl -- lab word word
- \override LyricHyphen #'minimum-distance = #1.0
+ \override LyricHyphen.minimum-distance = #1.0
syl -- lab word word
- \override LyricHyphen #'minimum-distance = #2.0
+ \override LyricHyphen.minimum-distance = #2.0
syl -- lab word word
- \revert LyricHyphen #'minimum-distance
+ \revert LyricHyphen.minimum-distance
syl -- lab word word
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "staff-notation, workaround"
R1
R1
- \override Score.MetronomeMark #'extra-spacing-width = #'(0 . 0)
+ \override Score.MetronomeMark.extra-spacing-width = #'(0 . 0)
\example
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
\new Voice = "mel" {
\textLengthOn
% Set global properties of fret diagram
- \override TextScript #'size = #1.2
- \override TextScript
- #'fret-diagram-details #'finger-code = #'below-string
- \override TextScript #'fret-diagram-details #'dot-color = #'black
+ \override TextScript.size = #1.2
+ \override TextScript.fret-diagram-details.finger-code = #'below-string
+ \override TextScript.fret-diagram-details.dot-color = #'black
%% A chord for ukulele
a'2^\markup {
}
% These chords will be in landscape orientation
- \override TextScript
- #'fret-diagram-details #'orientation = #'landscape
+ \override TextScript.fret-diagram-details.orientation = #'landscape
%% C major for guitar, barred on third fret
% verbose style
}
% These chords will be in opposing-landscape orientation
- \override TextScript #'fret-diagram-details
- #'orientation = #'opposing-landscape
+ \override TextScript.fret-diagram-details.orientation = #'opposing-landscape
%% C major for guitar, barred on third fret
% verbose style
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.18
+%% Note: this file works from version 2.17.6
% INSPIRATIONAL HEADER FOR LILYPOND DOCUMENTATION fretted-strings %
% Passage from Johann Kaspar Mertz "Opern Revue, Op. 8, no. 17" %
% on melodies from Bellini's "Norma" %
%*****************************************************************%
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
% define fingering offset
FO = #(define-music-function (parser location offsetX offsetY) (number? number?)
#{
- \once \override Voice.Fingering #'extra-offset = #(cons offsetX offsetY)
+ \once \override Voice.Fingering.extra-offset = #(cons offsetX offsetY)
#})
% markups
%% new section starts here in A minor
\set Score.beamExceptions = #'()
- \once \override TextScript #'staff-padding = #1.7
+ \once \override TextScript.staff-padding = #1.7
\times 2/3 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5
\times 2/3 { a,8\pdolce e' a c a e } % beg m. 6
\layout {
\context {
\Score
- \override Fingering #'staff-padding = #'()
- \override TupletNumber #'stencil = ##f
- \override TupletBracket #'bracket-visibility = ##f
+ \override Fingering.staff-padding = #'()
+ \override TupletNumber.stencil = ##f
+ \override TupletBracket.bracket-visibility = ##f
}
}
\midi { }
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings"
pinchedHarmonics = {
\textSpannerDown
- \override TextSpanner #'bound-details #'left #'text =
+ \override TextSpanner.bound-details.left.text =
\markup {\halign #-0.5 \teeny "PH" }
- \override TextSpanner #'style =
+ \override TextSpanner.style =
#'dashed-line
- \override TextSpanner #'dash-period = #0.6
- \override TextSpanner #'bound-details #'right #'attach-dir = #1
- \override TextSpanner #'bound-details #'right #'text =
+ \override TextSpanner.dash-period = #0.6
+ \override TextSpanner.bound-details.right.attach-dir = #1
+ \override TextSpanner.bound-details.right.text =
\markup { \draw-line #'(0 . 1) }
- \override TextSpanner #'bound-details #'right #'padding = #-0.5
+ \override TextSpanner.bound-details.right.padding = #-0.5
}
harmonics = {
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
snippetexamplenotes = { \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64 }
{
- \override Score.RehearsalMark #'self-alignment-X = #LEFT
+ \override Score.RehearsalMark.self-alignment-X = #LEFT
\time 1/4
\mark "Normal flags"
\snippetexamplenotes
\mark "Custom flag: inverted"
- \override Flag #'stencil = #inverted-flag
+ \override Flag.stencil = #inverted-flag
\snippetexamplenotes
\mark "Custom flag: weight"
- \override Flag #'stencil = #weight-flag
+ \override Flag.stencil = #weight-flag
\snippetexamplenotes
\mark "Revert to normal"
- \revert Flag #'stencil
+ \revert Flag.stencil
\snippetexamplenotes
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "pitches, really-cool, scheme-language"
(set! pitch (modulo (1+ pitch) 7)))))
oneNoteScore =
-#(define-music-function (parser location) ()
- (add-one-note-score parser)
- (make-music 'Music 'void #t))
+#(define-void-function (parser location) ()
+ (add-one-note-score parser))
%%%
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.12
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, staff-notation, tweaks-and-overrides"
\relative c' {
a2 \glissando
- \once \override NoteColumn #'glissando-skip = ##t
+ \once \override NoteColumn.glissando-skip = ##t
f''4 d,
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations"
\new Staff {
\relative c {
% this moves them up one staff space from the default position
- \override Score.GridLine #'extra-offset = #'(0.0 . 1.0)
+ \override Score.GridLine.extra-offset = #'(0.0 . 1.0)
\stemDown
\clef bass
- \once \override Score.GridLine #'thickness = #5.0
+ \once \override Score.GridLine.thickness = #5.0
c4
- \once \override Score.GridLine #'thickness = #1.0
+ \once \override Score.GridLine.thickness = #1.0
g'4
- \once \override Score.GridLine #'thickness = #3.0
+ \once \override Score.GridLine.thickness = #3.0
f4
- \once \override Score.GridLine #'thickness = #5.0
+ \once \override Score.GridLine.thickness = #5.0
e4
}
}
\Score
\consists "Grid_line_span_engraver"
% this moves them to the right half a staff space
- \override NoteColumn #'X-offset = #-0.5
+ \override NoteColumn.X-offset = #-0.5
}
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations"
\new Staff {
% hides staff and notes so that only the grid lines are visible
\hideNotes
- \override Staff.BarLine #'transparent = ##t
- \override Staff.StaffSymbol #'line-count = #0
- \override Staff.TimeSignature #'transparent = ##t
- \override Staff.Clef #'transparent = ##t
+ \override Staff.BarLine.transparent = ##t
+ \override Staff.StaffSymbol.line-count = #0
+ \override Staff.TimeSignature.transparent = ##t
+ \override Staff.Clef.transparent = ##t
% dummy notes to force regular note spacing
- \once \override Score.GridLine #'thickness = #4.0
+ \once \override Score.GridLine.thickness = #4.0
c8 c c
- \once \override Score.GridLine #'thickness = #3.0
+ \once \override Score.GridLine.thickness = #3.0
c8 c c
- \once \override Score.GridLine #'thickness = #4.0
+ \once \override Score.GridLine.thickness = #4.0
c8 c c
- \once \override Score.GridLine #'thickness = #3.0
+ \once \override Score.GridLine.thickness = #3.0
c8 c c
}
>>
\Score
\consists "Grid_line_span_engraver"
% center grid lines horizontally below note heads
- \override NoteColumn #'X-offset = #-0.5
+ \override NoteColumn.X-offset = #-0.5
}
\context {
\Staff
% set line length and positioning:
% two staff spaces above center line on hidden staff
% to four spaces below center line on visible staff
- \override GridPoint #'Y-extent = #'(2 . -4)
+ \override GridPoint.Y-extent = #'(2 . -4)
}
ragged-right = ##t
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.10
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "fretted-strings"
%% Hide fret number: useful to draw slide into/from a casual point of
%% the fretboard.
hideFretNumber = {
- \once \override TabNoteHead #'transparent = ##t
- \once \override NoteHead #'transparent = ##t
- \once \override Stem #'transparent = ##t
- \once \override Flag #'transparent = ##t
- \once \override NoteHead #'no-ledgers = ##t
- \once \override Glissando #'(bound-details left padding) = #0.3
+ \once \override TabNoteHead.transparent = ##t
+ \once \override NoteHead.transparent = ##t
+ \once \override Stem.transparent = ##t
+ \once \override Flag.transparent = ##t
+ \once \override NoteHead.no-ledgers = ##t
+ \once \override Glissando.bound-details.left.padding = #0.3
}
music= \relative c' {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
\relative c' {
c2\< c\!
- \override Hairpin #'style = #'dashed-line
+ \override Hairpin.style = #'dashed-line
c2\< c\!
- \override Hairpin #'style = #'dotted-line
+ \override Hairpin.style = #'dotted-line
c2\< c\!
- \override Hairpin #'style = #'line
+ \override Hairpin.style = #'line
c2\< c\!
- \override Hairpin #'style = #'trill
+ \override Hairpin.style = #'trill
c2\< c\!
- \override Hairpin #'style = #'zigzag
+ \override Hairpin.style = #'zigzag
c2\< c\!
- \revert Hairpin #'style
+ \revert Hairpin.style
c2\< c\!
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "contemporary-notation, percussion, real-music, rhythms"
\set Staff.instrumentName = #"Bb Sop."
\key g \major
\time #'(3 2 2 3 2 2 2 2 3 2 2) 25/8
- \override Staff.TimeSignature #'stencil =
+ \override Staff.TimeSignature.stencil =
#(custom-time-signature "3" "2" "2" "3" "2" "2"
"2" "2" "3" "2" "2" "8")
c8 c c d4 c8 c b c b a4 g fis8 e d c b' c d e4-^ fis8 g \break
}
drum = \new DrumStaff \drummode {
- \bar "|:" bd4.^\markup { Drums } sn4 bd \bar ":" sn4.
- bd4 sn \bar ":" bd sn bd4. sn4 bd \bar ":|"
+ \bar ".|:" bd4.^\markup { Drums } sn4 bd \bar ";" sn4.
+ bd4 sn \bar ";" bd sn bd4. sn4 bd \bar ":|."
}
{
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "pitches"
} % begin verbatim
\relative c'' {
- \override Accidental #'hide-tied-accidental-after-break = ##t
+ \override Accidental.hide-tied-accidental-after-break = ##t
cis1~ cis~
\break
cis
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks"
\relative c'' {
- \override DynamicTextSpanner #'style = #'none
+ \override DynamicTextSpanner.style = #'none
\crescTextCresc
c1\< | d | b | c\!
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "correction-wanted, expressive-marks, tweaks-and-overrides, version-specific"
To correctly align the @qq{sempre pp} horizontally, so that it is
aligned as if it were only the \\pp, there are several approaches:
-* Simply use @code{\\once\\override DynamicText #'X-offset = #-9.2}
+* Simply use @code{\\once\\override DynamicText.X-offset = #-9.2}
before the note with the dynamics to manually shift it to the correct
position. Drawback: This has to be done manually each time you use that
dynamic markup... * Add some padding (@code{#:hspace 7.1}) into the
\set Staff.instrumentName = \markup \column { Explicit shifting }
\relative c'' {
\key es \major
- \once \override DynamicText #'X-offset = #-9.2
+ \once \override DynamicText.X-offset = #-9.2
c4\semppK c\p c c
c4\ff c
- \once \override DynamicText #'X-offset = #-9.2
+ \once \override DynamicText.X-offset = #-9.2
c4\semppK c
}
>>
\relative c'' {
\key es \major
% Setting to ##f (false) gives the same result
- \override DynamicText #'X-offset = #0
+ \override DynamicText.X-offset = #0
c4\semppMII c\p c c | c\ff c c\semppMII c
}
>>
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings, specific-notation, tweaks-and-overrides"
{
a8:13
% THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME
- \once \override ChordNames.ChordName #'extra-offset = #'(10 . 0)
+ \once \override ChordNames.ChordName.extra-offset = #'(10 . 0)
b8:13 s2.
% THIS LINE IS THE SECOND METHOD
s4 s4 b4:13
\context Staff
{a8^\markup { \fret-diagram #"6-x;5-0;4-2;3-0;2-0;1-2;" }
% THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM
- \once \override TextScript #'extra-offset = #'(10 . 0)
+ \once \override TextScript.extra-offset = #'(10 . 0)
b4.~^\markup { \fret-diagram #"6-x;5-2;4-4;3-2;2-2;1-4;" } b4. a8\break
% HERE IS THE SECOND METHOD
<<
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, expressive-marks, staff-notation, tweaks-and-overrides"
\relative c'{
c d e f |
- \once \override Score.RehearsalMark #'extra-offset = #'(0 . -8.5)
- \once \override Score.RehearsalMark #'baseline-skip = #9
+ \once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
+ \once \override Score.RehearsalMark.baseline-skip = #9
\mark \markup \center-column { \circle 1 \box A }
g f e d |
- \once \override Score.RehearsalMark #'extra-offset = #'(0 . -8.5)
- \once \override Score.RehearsalMark #'baseline-skip = #9
+ \once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
+ \once \override Score.RehearsalMark.baseline-skip = #9
\mark \markup \center-column { \flat { \bold \small \italic Fine. } }
g f e d |
- \once \override Score.RehearsalMark #'extra-offset = #'(0 . -8.5)
- \once \override Score.RehearsalMark #'baseline-skip = #9
- \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible
+ \once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
+ \once \override Score.RehearsalMark.baseline-skip = #9
+ \override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
\mark \markup \center-column { \musicglyph #"scripts.ufermata" \box z }
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, expressive-marks, staff-notation, tweaks-and-overrides"
\new Staff {
<<
\new Voice \with {
- \consists "Mark_engraver"
+ \consists Mark_engraver
\consists "Staff_collecting_engraver"
}
{ c4 d e f
c4 d e f
}
\new Voice \with {
- \consists "Mark_engraver"
+ \consists Mark_engraver
\consists "Staff_collecting_engraver"
- \override RehearsalMark #'direction = #DOWN
+ \override RehearsalMark.direction = #DOWN
}
{ s4 s s s
\mark \markup { \circle 1 }
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.42
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "staff-notation, ancient-notation, really-cool"
incipit =
#(define-music-function (parser location incipit-music) (ly:music?)
#{
- \once \override Staff.InstrumentName #'self-alignment-X = #RIGHT
- \once \override Staff.InstrumentName #'self-alignment-Y = #UP
- \once \override Staff.InstrumentName #'Y-offset =
+ \once \override Staff.InstrumentName.self-alignment-X = #RIGHT
+ \once \override Staff.InstrumentName.self-alignment-Y = #UP
+ \once \override Staff.InstrumentName.Y-offset =
#(lambda (grob)
(+ 4 (system-start-text::calc-y-offset grob)))
- \once \override Staff.InstrumentName #'padding = #0.3
- \once \override Staff.InstrumentName #'stencil =
+ \once \override Staff.InstrumentName.padding = #0.3
+ \once \override Staff.InstrumentName.stencil =
#(lambda (grob)
(let* ((instrument-name (ly:grob-property grob 'long-text)))
(set! (ly:grob-property grob 'long-text)
{
{ \context MensuralStaff \with {
instrumentName = #instrument-name
- \override VerticalAxisGroup
- #'Y-extent = #'(-4 . 4)
+ \override VerticalAxisGroup.Y-extent = #'(-4 . 4)
} $incipit-music
}
\layout { $(ly:grob-layout grob)
\skip 1*8
% let finis bar go through all staves
- \override Staff.BarLine #'transparent = ##f
+ \override Staff.BarLine.transparent = ##f
% finis bar
\bar "|."
c'4 e'4.( d'8 c' b |
a4) b a2 |
b4.( c'8 d'4) c'4 |
- \once \override NoteHead #'transparent = ##t
+ \once \override NoteHead.transparent = ##t
c'1 |
b\breve |
}
a2 g4 e |
fis g4.( fis16 e fis4) |
g1 |
- \once \override NoteHead #'transparent = ##t
+ \once \override NoteHead.transparent = ##t
g1 |
g\breve |
}
R1 |
% two measures
r2 d'2. d'4 b e' |
- \once \override NoteHead #'transparent = ##t
+ \once \override NoteHead.transparent = ##t
e'1 |
d'\breve |
}
R1 |
R1 |
g2. e4 |
- \once \override NoteHead #'transparent = ##t
+ \once \override NoteHead.transparent = ##t
e1 |
g\breve |
}
\context {
\Score
%% no bar lines in staves or lyrics
- \override BarLine #'transparent = ##t
+ \override BarLine.transparent = ##t
}
%% the next two instructions keep the lyrics between the bar lines
\context {
\context {
\Voice
%% no slurs
- \override Slur #'transparent = ##t
+ \override Slur.transparent = ##t
%% Comment in the below "\remove" command to allow line
%% breaking also at those bar lines where a note overlaps
%% into the next measure. The command is commented out in this
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "keyboards, real-music"
\new PianoStaff <<
\set PianoStaff.connectArpeggios = ##t
- \override PianoStaff.Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket
+ \override PianoStaff.Arpeggio.stencil = #ly:arpeggio::brew-chord-bracket
\new Staff {
\relative c' {
\key b \major
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
\relative c'' {
- \override BreathingSign #'text = \markup {
+ \override BreathingSign.text = \markup {
\musicglyph #"scripts.caesura.straight"
}
c8 e4. \breathe g8. e16 c4
- \override BreathingSign #'text = \markup {
+ \override BreathingSign.text = \markup {
\musicglyph #"scripts.caesura.curved"
}
g8 e'4. \breathe g8. e16 c4
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "keyboards, percussion, fretted-strings, template, real-music"
%%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%%
sl = {
- \override NoteHead #'style = #'slash
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override NoteHead.style = #'slash
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
}
nsl = {
- \revert NoteHead #'style
- \revert Stem #'transparent
- \revert Flag #'transparent
+ \revert NoteHead.style
+ \revert Stem.transparent
+ \revert Flag.transparent
}
-crOn = \override NoteHead #'style = #'cross
-crOff = \revert NoteHead #'style
+crOn = \override NoteHead.style = #'cross
+crOff = \revert NoteHead.style
%% insert chord name style stuff here.
\context { \Staff \RemoveEmptyStaves }
\context {
\Score
- \override BarNumber #'padding = #3
- \override RehearsalMark #'padding = #2
+ \override BarNumber.padding = #3
+ \override RehearsalMark.padding = #2
skipBars = ##t
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "pitches, tweaks-and-overrides"
c1
\clef "treble"
c1
- \override Staff.Clef #'full-size-change = ##t
+ \override Staff.Clef.full-size-change = ##t
\clef "bass"
c1
\clef "treble"
c1
- \revert Staff.Clef #'full-size-change
+ \revert Staff.Clef.full-size-change
\clef "bass"
c1
\clef "treble"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
>>
\clef bass
<ds b! es'>4 ( ^ \markup \bold { Rall. }
- \override Script #'stencil = #(lambda (grob)
+ \override Script.stencil = #(lambda (grob)
(grob-interpret-markup grob fermataLong))
<ds' as'>8 ) \fermata
\noBeam
\clef treble
\slurUp
- \once \override Hairpin #'to-barline = ##f
+ \once \override Hairpin.to-barline = ##f
<as fs'>8 ( \pp \>
|
<gs b cs'>4. \! ) ^\markup \bold { a Tempo }
|
s4. \!
\slurUp
- \once \override Script #'direction = #UP
+ \once \override Script.direction = #UP
<a bs e'>8 ( \accent
|
<as! cs' gs'>4. )
- \once \override Hairpin #'to-barline = ##f
+ \once \override Hairpin.to-barline = ##f
<a' bs'>8 \ppp \>
|
s8 \!
\stemDown
- \once \override Script #'direction = #UP
+ \once \override Script.direction = #UP
\ottava #1
\voiceOne
- \once \override PianoStaff.Arpeggio #'padding = #0.8
+ \once \override PianoStaff.Arpeggio.padding = #0.8
<cs''' as''' cs''''>4. \arpeggio \fermata
\ottava #0
\bar "|."
cs'8
< ds as >8 ] )
|
- \once \override Script #'outside-staff-priority = #100
- \once \override TextScript #'outside-staff-priority = #500
+ \once \override Script.outside-staff-priority = #100
+ \once \override TextScript.outside-staff-priority = #500
<cs, gs,>4. \fermata _\markup \italic { ped. }
<fs, cs>8 (
|
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "connecting-notes, contemporary-notation, expressive-marks, fretted-strings, keyboards, specific-notation"
<c d f g>4\laissezVibrer r <c d f g>4.\laissezVibrer r8
<c d e f>4\laissezVibrer r
- \override LaissezVibrerTieColumn #'tie-configuration
+ \override LaissezVibrerTieColumn.tie-configuration
= #`((-7 . ,DOWN)
(-5 . ,DOWN)
(-3 . ,UP)
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
\relative c'' {
- \override TextSpanner #'bound-padding = #1.0
- \override TextSpanner #'style = #'line
- \override TextSpanner #'(bound-details right arrow) = ##t
- \override TextSpanner #'(bound-details left text) = #"fof"
- \override TextSpanner #'(bound-details right text) = #"gag"
- \override TextSpanner #'(bound-details right padding) = #0.6
-
- \override TextSpanner #'(bound-details right stencil-align-dir-y) = #CENTER
- \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER
-
- \override Glissando #'(bound-details right arrow) = ##t
- \override Glissando #'arrow-length = #0.5
- \override Glissando #'arrow-width = #0.25
+ \override TextSpanner.bound-padding = #1.0
+ \override TextSpanner.style = #'line
+ \override TextSpanner.bound-details.right.arrow = ##t
+ \override TextSpanner.bound-details.left.text = #"fof"
+ \override TextSpanner.bound-details.right.text = #"gag"
+ \override TextSpanner.bound-details.right.padding = #0.6
+
+ \override TextSpanner.bound-details.right.stencil-align-dir-y = #CENTER
+ \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
+
+ \override Glissando.bound-details.right.arrow = ##t
+ \override Glissando.arrow-length = #0.5
+ \override Glissando.arrow-width = #0.25
a8\startTextSpan gis a4 b\glissando b,
g'4 c\stopTextSpan c2
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "really-simple, text, vocal-music"
c1
}
\addlyrics {
- \once \override LyricText #'self-alignment-X = #LEFT
+ \once \override LyricText.self-alignment-X = #LEFT
"This is left-aligned"
- \once \override LyricText #'self-alignment-X = #CENTER
+ \once \override LyricText.self-alignment-X = #CENTER
"This is centered"
- \once \override LyricText #'self-alignment-X = #1
+ \once \override LyricText.self-alignment-X = #1
"This is right-aligned"
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
\time 2/4
<<
{
- \once \override Stem #'transparent = ##t
- \once \override Stem #'length = #8
+ \once \override Stem.transparent = ##t
+ \once \override Stem.length = #8
b8 ~ b\noBeam
- \once \override Stem #'transparent = ##t
- \once \override Stem #'length = #8
+ \once \override Stem.transparent = ##t
+ \once \override Stem.length = #8
g8 ~ g\noBeam
}
\\
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.15.15"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "staff-notation, tweaks-and-overrides"
glissandoSkipOn = {
- \override NoteColumn #'glissando-skip = ##t
- \override NoteHead #'transparent = ##t
- \override NoteHead #'no-ledgers = ##t
+ \override NoteColumn.glissando-skip = ##t
+ \override NoteHead.transparent = ##t
+ \override NoteHead.no-ledgers = ##t
}
\relative c'' {
- \override Glissando #'breakable = ##t
- \override Glissando #'after-line-breaking = ##t
+ \override Glissando.breakable = ##t
+ \override Glissando.after-line-breaking = ##t
f1\glissando |
\break
a4 r2. |
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, rhythms"
\relative c' {
\once \override
- Slur #'dash-definition = #'((0 0.3 0.1 0.75)
+ Slur.dash-definition = #'((0 0.3 0.1 0.75)
(0.3 0.6 1 1)
(0.65 1.0 0.4 0.75))
c4( d e f)
\once \override
- Slur #'dash-definition = #'((0 0.25 1 1)
+ Slur.dash-definition = #'((0 0.25 1 1)
(0.3 0.7 0.4 0.75)
(0.75 1.0 1 1))
c4( d e f)
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, really-cool, staff-notation, workaround"
} % begin verbatim
{
- \override Staff.StaffSymbol #'line-positions =
+ \override Staff.StaffSymbol.line-positions =
#'(-4 -2 -0.2 0 0.2 2 4)
d'4 e' f' g'
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "connecting-notes, rhythms, tweaks-and-overrides"
\relative c' {
\time 2/4
% from upper staff-line (position 2) to center (position 0)
- \override Beam #'positions = #'(2 . 0)
+ \override Beam.positions = #'(2 . 0)
c8 c
% from center to one above center (position 1)
- \override Beam #'positions = #'(0 . 1)
+ \override Beam.positions = #'(0 . 1)
c8 c
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "contemporary-notation, editorial-annotations, vocal-music, workaround"
speakOn = {
- \override Stem #'stencil =
+ \override Stem.stencil =
#(lambda (grob)
(let* ((x-parent (ly:grob-parent grob X))
(is-rest? (ly:grob? (ly:grob-object x-parent 'rest))))
}
speakOff = {
- \revert Stem #'stencil
- \revert Flag #'stencil
+ \revert Stem.stencil
+ \revert Flag.stencil
}
\score {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "text"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, repeats, staff-notation, workaround"
}
\context Voice = "foo" {
\set countPercentRepeats = ##t
- \override PercentRepeat #'transparent = ##t
- \override PercentRepeatCounter #'staff-padding = #1
+ \override PercentRepeat.transparent = ##t
+ \override PercentRepeatCounter.staff-padding = #1
\repeat percent 4 { s1 }
}
>>
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation, contexts-and-engravers, staff-notation, tweaks-and-overrides"
global = {
- \override Staff.BarLine #'transparent = ##t
+ \override Staff.BarLine.transparent = ##t
s1 s
% the final bar line is not interrupted
- \revert Staff.BarLine #'transparent
+ \revert Staff.BarLine.transparent
\bar "|."
}
\new StaffGroup \relative c'' {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "really-simple, rhythms, version-specific"
} % begin verbatim
-normalPos = \revert MultiMeasureRest #'staff-position
+normalPos = \revert MultiMeasureRest.staff-position
{
<<
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
\new Staff \relative c' <<
{ f2. f4
- \override Staff.NoteCollision #'prefer-dotted-right = ##f
+ \override Staff.NoteCollision.prefer-dotted-right = ##f
f2. f4
- \override Staff.NoteCollision #'prefer-dotted-right = ##t
+ \override Staff.NoteCollision.prefer-dotted-right = ##t
f2. f4
}
\\
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
\relative c' {
\stemDown
e4( a)
- \override Slur #'positions = #'(1 . 1)
+ \override Slur.positions = #'(1 . 1)
e4( a)
- \override Slur #'positions = #'(2 . 2)
+ \override Slur.positions = #'(2 . 2)
e4( a)
- \override Slur #'positions = #'(3 . 3)
+ \override Slur.positions = #'(3 . 3)
e4( a)
- \override Slur #'positions = #'(4 . 4)
+ \override Slur.positions = #'(4 . 4)
e4( a)
- \override Slur #'positions = #'(5 . 5)
+ \override Slur.positions = #'(5 . 5)
e4( a)
- \override Slur #'positions = #'(0 . 5)
+ \override Slur.positions = #'(0 . 5)
e4( a)
- \override Slur #'positions = #'(5 . 0)
+ \override Slur.positions = #'(5 . 0)
e4( a)
\stemUp
- \override Slur #'positions = #'(-5 . -5)
+ \override Slur.positions = #'(-5 . -5)
e4( a)
\stemDown
- \revert Slur #'positions
+ \revert Slur.positions
e4( a)
}
+++ /dev/null
-depth = ../../..
-
-EXTRA_DIST_FILES = README
-EXTRA_DIST_FILES += $(call src-wildcard,*.ly)
-
-include $(depth)/make/stepmake.make
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "staff-notation, vocal-music"
(string? string? ly:dir? ly:music?)
#{
\cueDuring $instrument #dir {
- \once \override TextScript #'self-alignment-X = #RIGHT
- \once \override TextScript #'direction = $dir
+ \once \override TextScript.self-alignment-X = #RIGHT
+ \once \override TextScript.direction = $dir
<>-\markup { \tiny #name }
$music
}
-\version "2.15.15"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, staff-notation, tweaks-and-overrides"
}
glissandoSkipOn = {
- \override NoteColumn #'glissando-skip = ##t
- \override NoteHead #'transparent = ##t
- \override NoteHead #'no-ledgers = ##t
+ \override NoteColumn.glissando-skip = ##t
+ \override NoteHead.transparent = ##t
+ \override NoteHead.no-ledgers = ##t
}
glissandoSkipOff = {
- \revert NoteColumn #'glissando-skip
- \revert NoteHead #'transparent
- \revert NoteHead #'no-ledgers
+ \revert NoteColumn.glissando-skip
+ \revert NoteHead.transparent
+ \revert NoteHead.no-ledgers
}
\relative c'' {
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation, symbols-and-glyphs"
\context VaticanaVoice <<
\transpose c c {
- \override NoteHead #'style = #'vaticana.punctum
+ \override NoteHead.style = #'vaticana.punctum
\key es \major
\clef "vaticana-fa2"
c1 des e f ges
- \override NoteHead #'style = #'vaticana.inclinatum
+ \override NoteHead.style = #'vaticana.inclinatum
a! b ces'
\bar "|"
% \break % 1 (8*1)
- \override NoteHead #'style = #'vaticana.quilisma
+ \override NoteHead.style = #'vaticana.quilisma
b! des'! ges! fes!
\breathe
\clef "vaticana-fa1"
- \override NoteHead #'style = #'vaticana.plica
+ \override NoteHead.style = #'vaticana.plica
es d
- \override NoteHead #'style = #'vaticana.reverse.plica
+ \override NoteHead.style = #'vaticana.reverse.plica
c d
\bar "|"
% \break %2 (8*1)
- \override NoteHead #'style = #'vaticana.punctum.cavum
+ \override NoteHead.style = #'vaticana.punctum.cavum
es f
- \override NoteHead #'style = #'vaticana.lpes
+ \override NoteHead.style = #'vaticana.lpes
g as
- \override NoteHead #'style = #'vaticana.upes
+ \override NoteHead.style = #'vaticana.upes
bes as
- \override NoteHead #'style = #'vaticana.vupes
+ \override NoteHead.style = #'vaticana.vupes
g f
- \override NoteHead #'style = #'vaticana.linea.punctum
- \once \override Staff.BarLine #'bar-extent = #'(-1 . 1) \bar "|"
+ \override NoteHead.style = #'vaticana.linea.punctum
+ \once \override Staff.BarLine.bar-extent = #'(-1 . 1) \bar "|"
% \break % 3 (8*1)
es d
- \override NoteHead #'style = #'vaticana.epiphonus
+ \override NoteHead.style = #'vaticana.epiphonus
c d
- \override NoteHead #'style = #'vaticana.cephalicus
+ \override NoteHead.style = #'vaticana.cephalicus
es f
- \override Staff.KeySignature #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
- \override Staff.Accidental #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
- \override Staff.Custos #'style = #'medicaea
- \override NoteHead #'style = #'medicaea.punctum
+ \override Staff.KeySignature.glyph-name-alist = #alteration-medicaea-glyph-name-alist
+ \override Staff.Accidental.glyph-name-alist = #alteration-medicaea-glyph-name-alist
+ \override Staff.Custos.style = #'medicaea
+ \override NoteHead.style = #'medicaea.punctum
\clef "medicaea-fa2"
ces des
\bar "|"
e! f! ges
\clef "medicaea-do2"
- \override NoteHead #'style = #'medicaea.inclinatum
+ \override NoteHead.style = #'medicaea.inclinatum
a! b! ces'
- \override NoteHead #'style = #'medicaea.virga
+ \override NoteHead.style = #'medicaea.virga
b! a!
\bar "|"
% \break % 5 (8*1)
ges fes
\clef "medicaea-fa1"
- \override NoteHead #'style = #'medicaea.rvirga
+ \override NoteHead.style = #'medicaea.rvirga
e des ces
- \override Staff.KeySignature #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
- \override Staff.Accidental #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
- \override Staff.Custos #'style = #'hufnagel
- \override NoteHead #'style = #'hufnagel.punctum
+ \override Staff.KeySignature.glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+ \override Staff.Accidental.glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+ \override Staff.Custos.style = #'hufnagel
+ \override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-fa2"
ces des es
\bar "|"
fes ges
\clef "hufnagel-do2"
- \override NoteHead #'style = #'hufnagel.lpes
+ \override NoteHead.style = #'hufnagel.lpes
as! bes! ces'
- \override NoteHead #'style = #'hufnagel.virga
+ \override NoteHead.style = #'hufnagel.virga
bes! as!
\bar "|"
% \break % 7 (8*1)
ges! fes!
\clef "hufnagel-do-fa"
- \override NoteHead #'style = #'hufnagel.punctum
+ \override NoteHead.style = #'hufnagel.punctum
es! des ces des! es! fes!
\bar "||"
% \break % 8 (8*1)
r2
\clef "mensural-g"
r4 r8 r16 r16
- \override NoteHead #'style = #'mensural
- \override Rest #'style = #'mensural
+ \override NoteHead.style = #'mensural
+ \override Rest.style = #'mensural
\clef "petrucci-f"
c8 b, c16 b, c32 b, c64 b, c64 b,
d8 e d16 e d32 e d64 e d64 e
}
\context {
\MensuralVoice
- \override NoteHead #'style = #'neomensural
- \override Rest #'style = #'neomensural
- \override Flag #'style = #'mensural
- \override Stem #'thickness = #1.0
+ \override NoteHead.style = #'neomensural
+ \override Rest.style = #'neomensural
+ \override Flag.style = #'mensural
+ \override Stem.thickness = #1.0
}
\context {
\MensuralStaff
- \revert BarLine #'transparent
- \override KeySignature #'glyph-name-alist = #alteration-mensural-glyph-name-alist
+ \revert BarLine.transparent
+ \override KeySignature.glyph-name-alist = #alteration-mensural-glyph-name-alist
clefGlyph = #"clefs.petrucci.c2"
}
\context {
\VaticanaStaff
- \revert BarLine #'transparent
- \override StaffSymbol #'thickness = #2.0
- \override KeySignature #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
- \override Custos #'neutral-position = #4
+ \revert BarLine.transparent
+ \override StaffSymbol.thickness = #2.0
+ \override KeySignature.glyph-name-alist = #alteration-vaticana-glyph-name-alist
+ \override Custos.neutral-position = #4
}
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "vocal-music, ancient-notation, template"
\Staff
\remove "Time_signature_engraver"
\remove "Bar_engraver"
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
}
\context {
\Voice
- \override Stem #'length = #0
+ \override Stem.length = #0
}
\context {
\Score
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "chords, fretted-strings"
(cons (make-music 'TextSpanEvent 'span-direction 1)
(ly:music-property last-element 'articulations))))))
#{
- \once \override TextSpanner #'font-size = #-2
- \once \override TextSpanner #'font-shape = #'upright
- \once \override TextSpanner #'staff-padding = #3
- \once \override TextSpanner #'style = #'line
- \once \override TextSpanner #'to-barline = ##f
- \once \override TextSpanner #'bound-details =
+ \once \override TextSpanner.font-size = #-2
+ \once \override TextSpanner.font-shape = #'upright
+ \once \override TextSpanner.staff-padding = #3
+ \once \override TextSpanner.style = #'line
+ \once \override TextSpanner.to-barline = ##f
+ \once \override TextSpanner.bound-details =
#`((left
(text . ,#{ \markup { \draw-line #'( 0 . -.5) } #})
(Y . 0)
(padding . 0.25)
(attach-dir . 2)))
%% uncomment this line for make full barred
- % \once \override TextSpanner #'bound-details #'left #'text = \markup { "B" #str }
+ % \once \override TextSpanner.bound-details.left.text = \markup { "B" #str }
$music
#})
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "text, tweaks-and-overrides, contexts-and-engravers"
\context {
\Voice
\consists #Text_align_engraver
- \override TextScript #'X-offset =
+ \override TextScript.X-offset =
#ly:self-alignment-interface::aligned-on-x-parent
- \override TextScript #'self-alignment-X = #CENTER
+ \override TextScript.self-alignment-X = #CENTER
}
}
\new Staff <<
\relative c'' {
- \override NoteColumn #'force-hshift = #3
+ \override NoteColumn.force-hshift = #3
c1-\markup { \arrow-head #Y #DOWN ##t }
}
\\
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, vocal-music, ancient-notation, contexts-and-engravers, specific-notation"
}
stemOn = {
- \revert Staff.Stem #'transparent
- \revert Staff.Flag #'transparent
+ \revert Staff.Stem.transparent
+ \revert Staff.Flag.transparent
}
stemOff = {
- \override Staff.Stem #'transparent = ##t
- \override Staff.Flag #'transparent = ##t
+ \override Staff.Stem.transparent = ##t
+ \override Staff.Flag.transparent = ##t
}
\score {
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
\context Staff = lower {
\new Voice {
\clef bass
- \accidentalStyle "modern-cautionary"
+ \accidentalStyle modern-cautionary
<<
\Tenor
\Bass
}
\context {
\Voice
- \override StanzaNumber #'padding = #1.8
+ \override StanzaNumber.padding = #1.8
}
}
}
--- /dev/null
+\version "2.17.6"
+
+\header {
+ lsrtags = "staff-notation, tweaks-and-overrides"
+ texidoc = "
+A glissando which extends into several @code{\alternative} blocks
+can be simulated by adding a hidden grace note with a glissando
+at the start of each @code{\alternative} block. The grace note
+should be at the same pitch as the note which starts the initial
+glissando. This is implemented here with a music function which
+takes the pitch of the grace note as its argument.
+
+Note that in polyphonic music the grace note must be matched with
+corresponding grace notes in all other voices.
+"
+ doctitle = "Extending glissandi across repeats"
+}
+
+repeatGliss = #(define-music-function (parser location grace)
+ (ly:pitch?)
+ #{
+ % the next two lines ensure the glissando is long enough
+ % to be visible
+ \once \override Glissando.springs-and-rods
+ = #ly:spanner::set-spacing-rods
+ \once \override Glissando.minimum-length = #3.5
+ \once \hideNotes
+ \grace $grace \glissando
+ #})
+
+\score {
+ \relative c'' {
+ \repeat volta 3 { c4 d e f\glissando }
+ \alternative {
+ { g2 d }
+ { \repeatGliss f g2 e }
+ { \repeatGliss f e2 d }
+ }
+ }
+}
+
+music = \relative c' {
+ \voiceOne
+ \repeat volta 2 {
+ g a b c\glissando
+ }
+ \alternative {
+ { d1 }
+ { \repeatGliss c e1 }
+ }
+}
+
+\score {
+ \new StaffGroup <<
+ \new Staff <<
+ \context Voice { \clef "G_8" \music }
+ >>
+ \new TabStaff <<
+ \context TabVoice { \clef "moderntab" \music }
+ >>
+ >>
+}
\ No newline at end of file
% on melodies from Bellini's "Norma" %
%*****************************************************************%
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
% define fingering offset
FO = #(define-music-function (parser location offsetX offsetY) (number? number?)
#{
- \once \override Voice.Fingering #'extra-offset = #(cons offsetX offsetY)
+ \once \override Voice.Fingering.extra-offset = #(cons offsetX offsetY)
#})
% markups
%% new section starts here in A minor
\set Score.beamExceptions = #'()
- \once \override TextScript #'staff-padding = #1.7
+ \once \override TextScript.staff-padding = #1.7
\times 2/3 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5
\times 2/3 { a,8\pdolce e' a c a e } % beg m. 6
\layout {
\context {
\Score
- \override Fingering #'staff-padding = #'()
- \override TupletNumber #'stencil = ##f
- \override TupletBracket #'bracket-visibility = ##f
+ \override Fingering.staff-padding = #'()
+ \override TupletNumber.stencil = ##f
+ \override TupletBracket.bracket-visibility = ##f
}
}
\midi { }
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
snippetexamplenotes = { \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64 }
{
- \override Score.RehearsalMark #'self-alignment-X = #LEFT
+ \override Score.RehearsalMark.self-alignment-X = #LEFT
\time 1/4
\mark "Normal flags"
\snippetexamplenotes
\mark "Custom flag: inverted"
- \override Flag #'stencil = #inverted-flag
+ \override Flag.stencil = #inverted-flag
\snippetexamplenotes
\mark "Custom flag: weight"
- \override Flag #'stencil = #weight-flag
+ \override Flag.stencil = #weight-flag
\snippetexamplenotes
\mark "Revert to normal"
- \revert Flag #'stencil
+ \revert Flag.stencil
\snippetexamplenotes
}
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, staff-notation, tweaks-and-overrides"
\relative c' {
a2 \glissando
- \once \override NoteColumn #'glissando-skip = ##t
+ \once \override NoteColumn.glissando-skip = ##t
f''4 d,
}
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings"
%% Hide fret number: useful to draw slide into/from a casual point of
%% the fretboard.
hideFretNumber = {
- \once \override TabNoteHead #'transparent = ##t
- \once \override NoteHead #'transparent = ##t
- \once \override Stem #'transparent = ##t
- \once \override Flag #'transparent = ##t
- \once \override NoteHead #'no-ledgers = ##t
- \once \override Glissando #'(bound-details left padding) = #0.3
+ \once \override TabNoteHead.transparent = ##t
+ \once \override NoteHead.transparent = ##t
+ \once \override Stem.transparent = ##t
+ \once \override Flag.transparent = ##t
+ \once \override NoteHead.no-ledgers = ##t
+ \once \override Glissando.bound-details.left.padding = #0.3
}
music= \relative c' {
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "staff-notation, ancient-notation, really-cool"
incipit =
#(define-music-function (parser location incipit-music) (ly:music?)
#{
- \once \override Staff.InstrumentName #'self-alignment-X = #RIGHT
- \once \override Staff.InstrumentName #'self-alignment-Y = #UP
- \once \override Staff.InstrumentName #'Y-offset =
+ \once \override Staff.InstrumentName.self-alignment-X = #RIGHT
+ \once \override Staff.InstrumentName.self-alignment-Y = #UP
+ \once \override Staff.InstrumentName.Y-offset =
#(lambda (grob)
(+ 4 (system-start-text::calc-y-offset grob)))
- \once \override Staff.InstrumentName #'padding = #0.3
- \once \override Staff.InstrumentName #'stencil =
+ \once \override Staff.InstrumentName.padding = #0.3
+ \once \override Staff.InstrumentName.stencil =
#(lambda (grob)
(let* ((instrument-name (ly:grob-property grob 'long-text)))
(set! (ly:grob-property grob 'long-text)
{
{ \context MensuralStaff \with {
instrumentName = #instrument-name
- \override VerticalAxisGroup
- #'Y-extent = #'(-4 . 4)
+ \override VerticalAxisGroup.Y-extent = #'(-4 . 4)
} $incipit-music
}
\layout { $(ly:grob-layout grob)
\skip 1*8
% let finis bar go through all staves
- \override Staff.BarLine #'transparent = ##f
+ \override Staff.BarLine.transparent = ##f
% finis bar
\bar "|."
c'4 e'4.( d'8 c' b |
a4) b a2 |
b4.( c'8 d'4) c'4 |
- \once \override NoteHead #'transparent = ##t
+ \once \override NoteHead.transparent = ##t
c'1 |
b\breve |
}
a2 g4 e |
fis g4.( fis16 e fis4) |
g1 |
- \once \override NoteHead #'transparent = ##t
+ \once \override NoteHead.transparent = ##t
g1 |
g\breve |
}
R1 |
% two measures
r2 d'2. d'4 b e' |
- \once \override NoteHead #'transparent = ##t
+ \once \override NoteHead.transparent = ##t
e'1 |
d'\breve |
}
R1 |
R1 |
g2. e4 |
- \once \override NoteHead #'transparent = ##t
+ \once \override NoteHead.transparent = ##t
e1 |
g\breve |
}
\context {
\Score
%% no bar lines in staves or lyrics
- \override BarLine #'transparent = ##t
+ \override BarLine.transparent = ##t
}
%% the next two instructions keep the lyrics between the bar lines
\context {
\context {
\Voice
%% no slurs
- \override Slur #'transparent = ##t
+ \override Slur.transparent = ##t
%% Comment in the below "\remove" command to allow line
%% breaking also at those bar lines where a note overlaps
%% into the next measure. The command is commented out in this
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "keyboards, percussion, fretted-strings, template, real-music"
%%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%%
sl = {
- \override NoteHead #'style = #'slash
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override NoteHead.style = #'slash
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
}
nsl = {
- \revert NoteHead #'style
- \revert Stem #'transparent
- \revert Flag #'transparent
+ \revert NoteHead.style
+ \revert Stem.transparent
+ \revert Flag.transparent
}
-crOn = \override NoteHead #'style = #'cross
-crOff = \revert NoteHead #'style
+crOn = \override NoteHead.style = #'cross
+crOff = \revert NoteHead.style
%% insert chord name style stuff here.
\context { \Staff \RemoveEmptyStaves }
\context {
\Score
- \override BarNumber #'padding = #3
- \override RehearsalMark #'padding = #2
+ \override BarNumber.padding = #3
+ \override RehearsalMark.padding = #2
skipBars = ##t
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
\time 2/4
<<
{
- \once \override Stem #'transparent = ##t
- \once \override Stem #'length = #8
+ \once \override Stem.transparent = ##t
+ \once \override Stem.length = #8
b8 ~ b\noBeam
- \once \override Stem #'transparent = ##t
- \once \override Stem #'length = #8
+ \once \override Stem.transparent = ##t
+ \once \override Stem.length = #8
g8 ~ g\noBeam
}
\\
-\version "2.15.15"
+\version "2.17.6"
\header {
lsrtags = "staff-notation, tweaks-and-overrides"
}
glissandoSkipOn = {
- \override NoteColumn #'glissando-skip = ##t
- \override NoteHead #'transparent = ##t
- \override NoteHead #'no-ledgers = ##t
+ \override NoteColumn.glissando-skip = ##t
+ \override NoteHead.transparent = ##t
+ \override NoteHead.no-ledgers = ##t
}
\relative c'' {
- \override Glissando #'breakable = ##t
- \override Glissando #'after-line-breaking = ##t
+ \override Glissando.breakable = ##t
+ \override Glissando.after-line-breaking = ##t
f1\glissando |
\break
a4 r2. |
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
% Multi-measure rests by default are set under the fourth line
R1
% They can be moved using an override
- \override MultiMeasureRest #'staff-position = #-2
+ \override MultiMeasureRest.staff-position = #-2
R1
- \override MultiMeasureRest #'staff-position = #0
+ \override MultiMeasureRest.staff-position = #0
R1
- \override MultiMeasureRest #'staff-position = #2
+ \override MultiMeasureRest.staff-position = #2
R1
- \override MultiMeasureRest #'staff-position = #3
+ \override MultiMeasureRest.staff-position = #3
R1
- \override MultiMeasureRest #'staff-position = #6
+ \override MultiMeasureRest.staff-position = #6
R1
- \revert MultiMeasureRest #'staff-position
+ \revert MultiMeasureRest.staff-position
\break
% In two Voices, odd-numbered voices are under the top line
% Separating multi-measure rests in more than two voices
% requires an override
<< { R1 } \\ { R1 } \\
- \once \override MultiMeasureRest #'staff-position = #0
+ \once \override MultiMeasureRest.staff-position = #0
{ R1 }
>>
% in all voices to avoid multiple instances being printed
\compressFullBarRests
<<
- \revert MultiMeasureRest #'staff-position
+ \revert MultiMeasureRest.staff-position
{ R1*3 }
\\
- \revert MultiMeasureRest #'staff-position
+ \revert MultiMeasureRest.staff-position
{ R1*3 }
>>
}
--- /dev/null
+\version "2.17.6"
+
+\header {
+ lsrtags = "repeats, tweaks-and-overrides"
+
+ texidoc = "
+A @code{.|:} bar line can be printed at the beginning of a piece, by
+overriding the relevant property:
+
+"
+ doctitle = "Printing a repeat sign at the beginning of a piece"
+}
+
+
+\relative c'' {
+ \once \override Score.BreakAlignment.break-align-orders =
+ #(make-vector 3 '(instrument-name
+ left-edge
+ ambitus
+ breathing-sign
+ clef
+ key-signature
+ time-signature
+ staff-bar
+ custos))
+ \once \override Staff.TimeSignature.space-alist =
+ #'((first-note . (fixed-space . 2.0))
+ (right-edge . (extra-space . 0.5))
+ ;; free up some space between time signature
+ ;; and repeat bar line
+ (staff-bar . (extra-space . 1)))
+ \bar ".|:"
+ c1
+ d1
+ d4 e f g
+}
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
startAcciaccaturaMusic = {
<>(
- \override Flag #'stroke-style = #"grace"
+ \override Flag.stroke-style = #"grace"
\slurDashed
}
stopAcciaccaturaMusic = {
- \revert Flag #'stroke-style
+ \revert Flag.stroke-style
\slurSolid
<>)
}
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "template, real-music, specific-notation"
bes1
}
-NoStem = { \override Stem #'transparent = ##t \override Flag #'transparent = ##t }
-NoNoteHead = \override NoteHead #'transparent = ##t
-ZeroBeam = \override Beam #'positions = #'(0 . 0)
+NoStem = { \override Stem.transparent = ##t \override Flag.transparent = ##t }
+NoNoteHead = \override NoteHead.transparent = ##t
+ZeroBeam = \override Beam.positions = #'(0 . 0)
staffTabLine = \new Staff \with {
\remove "Time_signature_engraver"
\remove "Clef_engraver"
} {
- \override Staff.StaffSymbol #'line-positions = #'(0)
+ \override Staff.StaffSymbol.line-positions = #'(0)
% Shows one horizontal line. The vertical line (simulating a bar-line) is simulated with a gridline
\set Staff.midiInstrument = #"choir aahs"
\key c \major
{
% disable the following line to see the the noteheads while writing the song
\NoNoteHead
- \override NoteHead #'no-ledgers = ##t
+ \override NoteHead.no-ledgers = ##t
% The beam between 8th-notes is used to draw the push-line
%How to fast write the push-lines:
\consists "Grid_point_engraver"
gridInterval = #(ly:make-moment 4 4) % 4/4 - tact. How many beats per bar
% The following line has to be adjusted O-F-T-E-N.
- \override GridPoint #'Y-extent = #'(-2 . -21)
+ \override GridPoint.Y-extent = #'(-2 . -21)
}
\context {
\ChoirStaff
staffAccordionMel =
\new Staff \with { \remove "Clef_engraver" } {
- \accidentalStyle "forget" %Set the accidentals (Vorzeichen) for each note,
+ \accidentalStyle forget %Set the accidentals (Vorzeichen) for each note,
%do not remember them for the rest of the measure.
\time 4/4
\set Staff.instrumentName="Accordion"
AltOn =
#(define-music-function (parser location mag) (number?)
- #{ \override Stem #'length = #(* 7.0 mag)
- \override NoteHead #'font-size =
+ #{ \override Stem.length = #(* 7.0 mag)
+ \override NoteHead.font-size =
#(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #})
AltOff = {
- \revert Stem #'length
- \revert NoteHead #'font-size
+ \revert Stem.length
+ \revert NoteHead.font-size
}
BassRhytm = {s4 s8 | c2 c2 | c2 s8 }
\new Staff = staffbass \with { \remove "Clef_engraver" } {
% This is not a RhythmicStaff because it must be possible to append lyrics.
- \override Score.GridLine #'extra-offset = #'( 13.0 . 0.0 ) % x.y
- \override Staff.StaffSymbol #'line-positions = #'( 0 )
+ \override Score.GridLine.extra-offset = #'( 13.0 . 0.0 ) % x.y
+ \override Staff.StaffSymbol.line-positions = #'( 0 )
% Shows one horizontal line. The vertical line (simulating a bar-line) is simulated by a grid
% Search for 'grid' in this page to find all related functions
\time 4/4
-\version "2.16.0"
+\version "2.17.6"
\include "catalan.ly"
\header {
\key mib \major
\time 2/4
R2^\markup { \italic Comodo } |
- r8 \once \override TextScript #'padding = #2.0
+ r8 \once \override TextScript.padding = #2.0
sib16-.^\markup {\dynamic p \italic grazioso} do-. mib( re)-. do-. sib-. |
re8-. r8 re4->( |
re8) do16-. re-. mib( re) do-. re-. |
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, text, fretted-strings, tweaks-and-overrides, scheme-language"
stringNumberSpanner =
#(define-music-function (parser location StringNumber) (string?)
#{
- \override TextSpanner #'style = #'solid
- \override TextSpanner #'font-size = #-5
- \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER
- \override TextSpanner #'(bound-details left text) = \markup { \circle \number #StringNumber }
+ \override TextSpanner.style = #'solid
+ \override TextSpanner.font-size = #-5
+ \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
+ \override TextSpanner.bound-details.left.text = \markup { \circle \number #StringNumber }
#})
--- /dev/null
+\version "2.17.6"
+
+\header {
+ lsrtags = "expressive-marks"
+
+ texidoc = "
+Vocal and wind music frequently uses a tick mark as a breathing sign. This
+indicates a breath that subtracts a little time from the previous note rather
+than causing a short pause, which is indicated by the comma breath mark. The
+mark can be moved up a little to take it away from the stave.
+"
+ doctitle = "Using a tick as the breath mark symbol"
+}
+
+\relative c'' {
+ c2
+ \breathe
+ d2
+ \override BreathingSign.Y-offset = #2.6
+ \override BreathingSign.text =
+ \markup { \musicglyph #"scripts.tickmark" }
+ c2
+ \breathe
+ d2
+}
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
\time 2/4
\testnotes
- \override Flag #'stencil = #modern-straight-flag
+ \override Flag.stencil = #modern-straight-flag
\testnotes
- \override Flag #'stencil = #old-straight-flag
+ \override Flag.stencil = #old-straight-flag
\testnotes
- \revert Flag #'stencil
+ \revert Flag.stencil
\testnotes
}
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
}
\relative c'' {
- \override Flag #'stroke-style = #"grace"
+ \override Flag.stroke-style = #"grace"
c8( d2) e8( f4)
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
} % begin verbatim
\relative c'' {
- \once \override TupletNumber #'text =
+ \once \override TupletNumber.text =
#(tuplet-number::non-default-tuplet-denominator-text 7)
\times 2/3 { c4. c4. c4. c4. }
- \once \override TupletNumber #'text =
+ \once \override TupletNumber.text =
#(tuplet-number::non-default-tuplet-fraction-text 12 7)
\times 2/3 { c4. c4. c4. c4. }
- \once \override TupletNumber #'text =
+ \once \override TupletNumber.text =
#(tuplet-number::append-note-wrapper
(tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
\times 2/3 { c4. c4. c4. c4. }
- \once \override TupletNumber #'text =
+ \once \override TupletNumber.text =
#(tuplet-number::append-note-wrapper
tuplet-number::calc-denominator-text "4")
\times 2/3 { c8 c8 c8 c8 c8 c8 }
- \once \override TupletNumber #'text =
+ \once \override TupletNumber.text =
#(tuplet-number::append-note-wrapper
tuplet-number::calc-fraction-text "4")
\times 2/3 { c8 c8 c8 c8 c8 c8 }
- \once \override TupletNumber #'text =
+ \once \override TupletNumber.text =
#(tuplet-number::fraction-with-notes "4." "8")
\times 2/3 { c4. c4. c4. c4. }
- \once \override TupletNumber #'text =
+ \once \override TupletNumber.text =
#(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
\times 2/3 { c4. c4. c4. c4. }
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.31
+%% Note: this file works from version 2.16.0
\version "2.16.0"
\header {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "vocal-music"
\layout {
\context {
\Lyrics
- \override VerticalAxisGroup #'staff-affinity = ##f
- \override VerticalAxisGroup #'staff-staff-spacing =
+ \override VerticalAxisGroup.staff-affinity = ##f
+ \override VerticalAxisGroup.staff-staff-spacing =
#'((basic-distance . 0)
(minimum-distance . 2)
(padding . 2))
}
\context {
\Staff
- \override VerticalAxisGroup #'staff-staff-spacing =
+ \override VerticalAxisGroup.staff-staff-spacing =
#'((basic-distance . 0)
(minimum-distance . 2)
(padding . 2))
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "really-simple, scheme-language, text, titles"
\score {
\new Lyrics {
- \override Score.RehearsalMark #'self-alignment-X = #LEFT
+ \override Score.RehearsalMark.self-alignment-X = #LEFT
\mark #(string-append "Processed with LilyPond version " (lilypond-version))
s2
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "spacing"
\mark "B" \label #'markB
d2 d
d2 d
- \once \override Score.RehearsalMark #'break-visibility =
+ \once \override Score.RehearsalMark.break-visibility =
#begin-of-line-invisible
\mark "C" \label #'markC
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, version-specific"
% Permit line breaks within tuplets
\remove "Forbid_line_break_engraver"
% Allow beams to be broken at line breaks
- \override Beam #'breakable = ##t
+ \override Beam.breakable = ##t
}
}
\relative c'' {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
% RH Voice 2
\new Voice {
\voiceTwo
- \override Staff.DynamicLineSpanner #'staff-padding = #2.5
+ \override Staff.DynamicLineSpanner.staff-padding = #2.5
<e'' b'>2 \p
<ds'' a'>4
<cs'' gs'>4
<bs' fs'>2
e'2
|
- \once \override TextScript #'staff-padding = #2.5
+ \once \override TextScript.staff-padding = #2.5
<b'! a'>2 _ \markup \italic { cresc. }
b'4
<e'' cs''>4
% LH Staff
\new Staff {
- \override Staff.SustainPedalLineSpanner #'staff-padding = #5
+ \override Staff.SustainPedalLineSpanner.staff-padding = #5
<gs' e'>2 ( \sustainOn
<fs' ds' b>4 \sustainOff
<e' cs'>4
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
\relative c' {
<c e g b>1\arpeggio
- \once \override Arpeggio #'positions = #'(-5 . 0)
+ \once \override Arpeggio.positions = #'(-5 . 0)
<c e g b>1\arpeggio
- \once \override Arpeggio #'positions = #'(0 . 5)
+ \once \override Arpeggio.positions = #'(0 . 5)
<c e g b>1\arpeggio
- \once \override Arpeggio #'positions = #'(-5 . 5)
+ \once \override Arpeggio.positions = #'(-5 . 5)
<c e g b>1\arpeggio
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations"
\relative c' {
\set fingeringOrientations = #'(left)
<c-1 d-2 a'-5>4
- <c-1 d-\tweak #'extra-offset #'(0 . 0.7)-2 a'-5>4
+ <c-1 d-\tweak extra-offset #'(0 . 0.7)-2 a'-5>4
\set fingeringOrientations = #'(down)
<c-1 d-2 a'-5>4
- <c-1 d-\tweak #'extra-offset #'(-1.2 . 0)-2 a'-5>4
+ <c-1 d-\tweak extra-offset #'(-1.2 . 0)-2 a'-5>4
\set fingeringOrientations = #'(down right up)
<c-1 d-2 a'-5>4
- <c-1 d-\tweak #'extra-offset #'(-1 . 1.2)-2 a'-5>4
+ <c-1 d-\tweak extra-offset #'(-1 . 1.2)-2 a'-5>4
\set fingeringOrientations = #'(up)
<c-1 d-2 a'-5>4
- <c-1 d-\tweak #'extra-offset #'(-1.2 . 0)-2 a'-5>4
+ <c-1 d-\tweak extra-offset #'(-1.2 . 0)-2 a'-5>4
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
f8[ e]
\grace {
f8[ e]
- \override Stem #'no-stem-extend = ##f
+ \override Stem.no-stem-extend = ##f
f8[ e]
- \revert Stem #'no-stem-extend
+ \revert Stem.no-stem-extend
}
f8[ e]
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
\relative c'' {
<<
- \override Score.SpacingSpanner #'strict-grace-spacing = ##t
+ \override Score.SpacingSpanner.strict-grace-spacing = ##t
\new Staff \new Voice {
\afterGrace c4 { c16[ c8 c16] }
c8[ \grace { b16[ d] } c8]
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.14
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
% Multi-measure rests by default are set under the fourth line
R1
% They can be moved using an override
- \override MultiMeasureRest #'staff-position = #-2
+ \override MultiMeasureRest.staff-position = #-2
R1
- \override MultiMeasureRest #'staff-position = #0
+ \override MultiMeasureRest.staff-position = #0
R1
- \override MultiMeasureRest #'staff-position = #2
+ \override MultiMeasureRest.staff-position = #2
R1
- \override MultiMeasureRest #'staff-position = #3
+ \override MultiMeasureRest.staff-position = #3
R1
- \override MultiMeasureRest #'staff-position = #6
+ \override MultiMeasureRest.staff-position = #6
R1
- \revert MultiMeasureRest #'staff-position
+ \revert MultiMeasureRest.staff-position
\break
% In two Voices, odd-numbered voices are under the top line
% Separating multi-measure rests in more than two voices
% requires an override
<< { R1 } \\ { R1 } \\
- \once \override MultiMeasureRest #'staff-position = #0
+ \once \override MultiMeasureRest.staff-position = #0
{ R1 }
>>
% in all voices to avoid multiple instances being printed
\compressFullBarRests
<<
- \revert MultiMeasureRest #'staff-position
+ \revert MultiMeasureRest.staff-position
{ R1*3 }
\\
- \revert MultiMeasureRest #'staff-position
+ \revert MultiMeasureRest.staff-position
{ R1*3 }
>>
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "breaks, repeats, symbols-and-glyphs, workaround"
}
% Set segno sign as rehearsal mark and adjust size if needed
- % \once \override Score.RehearsalMark #'font-size = #3
+ % \once \override Score.RehearsalMark.font-size = #3
\mark \markup { \musicglyph #"scripts.segno" }
\repeat unfold 2 {
c4 c c c
}
% Set coda sign as rehearsal mark and adjust size if needed
- \once \override Score.RehearsalMark #'font-size = #4
+ \once \override Score.RehearsalMark.font-size = #4
\mark \markup { \musicglyph #"scripts.coda" }
\repeat unfold 2 {
c4 c c c
\bar "||"
% Set segno sign as rehearsal mark and adjust size if needed
- \once \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible
- % \once \override Score.RehearsalMark #'font-size = #3
+ \once \override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
+ % \once \override Score.RehearsalMark.font-size = #3
\mark \markup { \musicglyph #"scripts.segno" }
% Here begins the trickery!
% text line-aligned
% ==================
% Move text to the desired position
- % \once \override TextScript #'extra-offset = #'( 2 . -3.5 )
+ % \once \override TextScript.extra-offset = #'( 2 . -3.5 )
% | s1*0^\markup { D.S. al Coda } }
% text center-aligned
% ====================
% Move text to the desired position
- % \once \override TextScript #'extra-offset = #'( 6 . -5.0 )
+ % \once \override TextScript.extra-offset = #'( 6 . -5.0 )
% | s1*0^\markup { \center-column { D.S. "al Coda" } }
% text and symbols center-aligned
s1
\bar ""
}
- \once \override TextScript #'extra-offset = #'( 0 . -3.0 )
- \once \override TextScript #'word-space = #1.5
+ \once \override TextScript.extra-offset = #'( 0 . -3.0 )
+ \once \override TextScript.word-space = #1.5
<>^\markup { \center-column { "D.S. al Coda" \line { \musicglyph #"scripts.coda" \musicglyph #"scripts.tenuto" \musicglyph #"scripts.coda"} } }
% Increasing the unfold counter will expand the staff-free space
\break
% Show up, you clef and key!
- \once \override Staff.KeySignature #'break-visibility = #end-of-line-invisible
- \once \override Staff.Clef #'break-visibility = #end-of-line-invisible
+ \once \override Staff.KeySignature.break-visibility = #end-of-line-invisible
+ \once \override Staff.Clef.break-visibility = #end-of-line-invisible
% Set coda sign as rehearsal mark and adjust size and position
% Put the coda sign ontop of the (treble-)clef dependend on coda's line-position
% Coda NOT on new line, use this:
- % \once \override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )
+ % \once \override Score.RehearsalMark.extra-offset = #'( -2 . 1.75 )
% Coda on new line, use this:
- \once \override Score.RehearsalMark #'extra-offset = #'( -4.5 . 0 )
+ \once \override Score.RehearsalMark.extra-offset = #'( -4.5 . 0 )
- \once \override Score.RehearsalMark #'font-size = #5
+ \once \override Score.RehearsalMark.font-size = #5
\mark \markup { \musicglyph #"scripts.coda" }
% The coda
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, expressive-marks, tweaks-and-overrides"
\relative c'' {
- \override TextScript #'avoid-slur = #'inside
- \override TextScript #'outside-staff-priority = ##f
+ \override TextScript.avoid-slur = #'inside
+ \override TextScript.outside-staff-priority = ##f
c2(^\markup { \halign #-10 \natural } d4.) c8
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
\times 2/3 { c'16 c'16 c'16 }
\times 2/3 { c'16 c'16 c'16 }
\times 2/3 { c'16 c'16 c'16 }
- \override Score.RehearsalMark #'break-visibility = #'#(#t #t #t)
- \override Score.RehearsalMark #'direction = #DOWN
- \override Score.RehearsalMark #'self-alignment-X = #RIGHT
+ \override Score.RehearsalMark.break-visibility = #'#(#t #t #t)
+ \override Score.RehearsalMark.direction = #DOWN
+ \override Score.RehearsalMark.self-alignment-X = #RIGHT
% due to issue 2362 the following line is commented
% \mark "Composed Feb 2007 - Feb 2008"
% and a shorter mark is used.
\new Staff {
\set tupletFullLength = ##t
- \override TupletBracket #'full-length-to-extent = ##f
+ \override TupletBracket.full-length-to-extent = ##f
\time 1/8
\times 2/3 { c'16 c'16 c'16 }
\times 2/3 { c'16 c'16 c'16 }
\times 2/3 { c'16 c'16 c'16 }
- \override Score.RehearsalMark #'break-visibility = #'#(#t #t #t)
- \override Score.RehearsalMark #'direction = #DOWN
- \override Score.RehearsalMark #'self-alignment-X = #RIGHT
+ \override Score.RehearsalMark.break-visibility = #'#(#t #t #t)
+ \override Score.RehearsalMark.direction = #DOWN
+ \override Score.RehearsalMark.self-alignment-X = #RIGHT
% due to issue 2362 the following line is commented
% \mark "Composed Feb 2007 - Feb 2008"
% and a shorter mark is used.
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.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.16.0"
+% 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.6
+\version "2.17.6"
\header {
lsrtags = "repeats, tweaks-and-overrides"
texidoc = "
-A @code{|:} bar line can be printed at the beginning of a piece, by
+A @code{.|:} bar line can be printed at the beginning of a piece, by
overriding the relevant property:
"
} % begin verbatim
+
\relative c'' {
- \once \override Score.BreakAlignment #'break-align-orders =
+ \once \override Score.BreakAlignment.break-align-orders =
#(make-vector 3 '(instrument-name
left-edge
ambitus
time-signature
staff-bar
custos))
- \once \override Staff.TimeSignature #'space-alist =
+ \once \override Staff.TimeSignature.space-alist =
#'((first-note . (fixed-space . 2.0))
(right-edge . (extra-space . 0.5))
;; free up some space between time signature
;; and repeat bar line
(staff-bar . (extra-space . 1)))
- \bar "|:"
+ \bar ".|:"
c1
d1
d4 e f g
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
\relative c' {
- \override Score.BarNumber #'break-visibility = #end-of-line-invisible
+ \override Score.BarNumber.break-visibility = #end-of-line-invisible
\set Score.currentBarNumber = #11
% Permit first bar number to be printed
\bar ""
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
\relative c' {
% Prevent bar numbers at the end of a line and permit them elsewhere
- \override Score.BarNumber #'break-visibility = #end-of-line-invisible
+ \override Score.BarNumber.break-visibility = #end-of-line-invisible
\set Score.barNumberVisibility = #(every-nth-bar-number-visible 4)
% Increase the size of the bar number by 2
- \override Score.BarNumber #'font-size = #2
+ \override Score.BarNumber.font-size = #2
% Draw a box round the following bar number(s)
- \override Score.BarNumber #'stencil
+ \override Score.BarNumber.stencil
= #(make-stencil-boxer 0.1 0.25 ly:text-interface::print)
\repeat unfold 5 { c1 }
% Draw a circle round the following bar number(s)
- \override Score.BarNumber #'stencil
+ \override Score.BarNumber.stencil
= #(make-stencil-circler 0.1 0.25 ly:text-interface::print)
\repeat unfold 4 { c1 } \bar "|."
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks"
\relative c'' {
- \override Hairpin #'circled-tip = ##t
+ \override Hairpin.circled-tip = ##t
c2\< c\!
c4\> c\< c2\!
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "text"
\relative c'' {
g2 c
d,2 a'
- \once \override Score.RehearsalMark #'break-visibility = #end-of-line-visible
- \once \override Score.RehearsalMark #'self-alignment-X = #RIGHT
+ \once \override Score.RehearsalMark.break-visibility = #end-of-line-visible
+ \once \override Score.RehearsalMark.self-alignment-X = #RIGHT
\mark "D.C. al Fine"
\break
g2 b,
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, rhythms, tweaks-and-overrides"
{
% Metronome marks below the staff
- \override Score.MetronomeMark #'direction = #DOWN
+ \override Score.MetronomeMark.direction = #DOWN
\tempo 8. = 120
c''1
% Rehearsal marks below the staff
- \override Score.RehearsalMark #'direction = #DOWN
+ \override Score.RehearsalMark.direction = #DOWN
\mark \default
c''1
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "contemporary-notation, percussion, real-music, really-cool, rhythms"
\remove "Timing_translator"
\remove "Default_bar_line_engraver"
\remove "Bar_number_engraver"
- \override SpacingSpanner #'uniform-stretching = ##t
- \override SpacingSpanner #'strict-note-spacing = ##t
+ \override SpacingSpanner.uniform-stretching = ##t
+ \override SpacingSpanner.strict-note-spacing = ##t
proportionalNotationDuration = #(ly:make-moment 1 64)
}
\context {
Bassklarinette = \new Staff \with {
\consists "Bar_number_engraver"
barNumberVisibility = #(every-nth-bar-number-visible 2)
- \override BarNumber #'break-visibility = #end-of-line-invisible
+ \override BarNumber.break-visibility = #end-of-line-invisible
} <<
\global {
\bar "|"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "spacing, tweaks-and-overrides"
\relative c'' <<
- \override Score.SpacingSpanner #'strict-note-spacing = ##t
+ \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
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "staff-notation, text, vocal-music"
texidoc = "
Lyrics can be moved vertically to place them inside the staff. The
-lyrics are moved with @code{\\override LyricText #'extra-offset = #'(0
+lyrics are moved with @code{\\override LyricText.extra-offset = #'(0
. dy)} and there are similar commands to move the extenders and
hyphens. The offset needed is established with trial and error.
\new Voice = "voc" \relative c' { \stemDown a bes c8 b c4 }
>>
\new Lyrics \with {
- \override LyricText #'extra-offset = #'(0 . 8.6)
- \override LyricExtender #'extra-offset = #'(0 . 8.6)
- \override LyricHyphen #'extra-offset = #'(0 . 8.6)
+ \override LyricText.extra-offset = #'(0 . 8.6)
+ \override LyricExtender.extra-offset = #'(0 . 8.6)
+ \override LyricHyphen.extra-offset = #'(0 . 8.6)
} \lyricsto "voc" { La la -- la __ _ la }
>>
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "staff-notation"
original = \relative c'' {
c8 d s2
- \once \override NoteColumn #'ignore-collision = ##t
+ \once \override NoteColumn.ignore-collision = ##t
es8 gis8
}
\new Voice {
s4
\set fontSize = #-4
- \override Stem #'length-fraction = #(magstep -4)
+ \override Stem.length-fraction = #(magstep -4)
\quoteDuring #"quoteMe" { \skip 2. }
}
>>
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "winds"
% range chart for paetzold contrabass recorder
centermarkup = {
- \once \override TextScript #'self-alignment-X = #CENTER
- \once \override TextScript #'X-offset =#(ly:make-simple-closure
+ \once \override TextScript.self-alignment-X = #CENTER
+ \once \override TextScript.X-offset =#(ly:make-simple-closure
`(,+
,(ly:make-simple-closure (list
ly:self-alignment-interface::centered-on-x-parent))
\score {
\new Staff \with {
\remove "Time_signature_engraver"
- \override Stem #'stencil = ##f
- \override Flag #'stencil = ##f
+ \override Stem.stencil = ##f
+ \override Flag.stencil = ##f
\consists "Horizontal_bracket_engraver"
}
{
gis'1*1/4
\stemDown a'4^\markup{1)}
\centermarkup
- \once \override TextScript #'padding = #2
+ \once \override TextScript.padding = #2
bes'1*1/4_\markup{\override #'(baseline-skip . 1.7) \column
{ \fontsize #-5 \slashed-digit #0 \finger 1 \finger 2 \finger 3 \finger 4
\finger 5 \finger 6 \finger 7} }
b'1*1/4
c''4^\markup{1)}
\centermarkup
- \once \override TextScript #'padding = #2
+ \once \override TextScript.padding = #2
cis''1*1/4
deh''1*1/4
\centermarkup
- \once \override TextScript #'padding = #2
- \once \override Staff.HorizontalBracket #'direction = #UP
+ \once \override TextScript.padding = #2
+ \once \override Staff.HorizontalBracket.direction = #UP
e''1*1/4_\markup{\override #'(baseline-skip . 1.7) \column
{ \fontsize #-5 \slashed-digit #0 \finger 1 \finger 2 \finger 4
\finger 5} }\startGroup
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "rhythms"
startAcciaccaturaMusic = {
<>(
- \override Flag #'stroke-style = #"grace"
+ \override Flag.stroke-style = #"grace"
\slurDashed
}
stopAcciaccaturaMusic = {
- \revert Flag #'stroke-style
+ \revert Flag.stroke-style
\slurSolid
<>)
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
\new StaffGroup <<
\new Staff {
e1 | e
- \once \override Staff.BarLine #'allow-span-bar = ##f
+ \once \override Staff.BarLine.allow-span-bar = ##f
e1 | e | e
}
\new Staff {
c1 | c | c
- \once \override Staff.BarLine #'allow-span-bar = ##f
+ \once \override Staff.BarLine.allow-span-bar = ##f
c1 | c
}
\new Staff {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "breaks, staff-notation, tweaks-and-overrides"
\context {
\Staff \RemoveEmptyStaves
% To use the setting globally, uncomment the following line:
- % \override VerticalAxisGroup #'remove-first = ##t
+ % \override VerticalAxisGroup.remove-first = ##t
}
}
\new StaffGroup <<
\new Staff {
% To use the setting globally, comment this line,
% uncomment the line in the \layout block above
- \override Staff.VerticalAxisGroup #'remove-first = ##t
+ \override Staff.VerticalAxisGroup.remove-first = ##t
R1 \break
R
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
\key df \major
\time 2/4
\set Score.currentBarNumber = #9
- \bar "|:"
+ \bar ".|:"
<af ef c>4 (
<af gf c>8..
<af ef c>32
\oneVoice
r8
\clef bass
- \bar ":|"
+ \bar ":|."
}
\new Staff = LH {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation, rhythms, symbols-and-glyphs, tweaks-and-overrides"
\new Staff \relative c {
\cadenzaOn
- \override Staff.Rest #'style = #'mensural
+ \override Staff.Rest.style = #'mensural
r\maxima^\markup \typewriter { mensural }
r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128
\bar ""
- \override Staff.Rest #'style = #'neomensural
+ \override Staff.Rest.style = #'neomensural
r\maxima^\markup \typewriter { neomensural }
r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128
\bar ""
- \override Staff.Rest #'style = #'classical
+ \override Staff.Rest.style = #'classical
r\maxima^\markup \typewriter { classical }
r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
\bar ""
- \override Staff.Rest #'style = #'default
+ \override Staff.Rest.style = #'default
r\maxima^\markup \typewriter { default }
r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
% Macro to print single slash
rs = {
- \once \override Rest #'stencil = #ly:percent-repeat-item-interface::beat-slash
- \once \override Rest #'thickness = #0.48
- \once \override Rest #'slope = #1.7
+ \once \override Rest.stencil = #ly:percent-repeat-item-interface::beat-slash
+ \once \override Rest.thickness = #0.48
+ \once \override Rest.slope = #1.7
r4
}
% Function to print a specified number of slashes
comp = #(define-music-function (parser location count) (integer?)
#{
- \override Rest #'stencil = #ly:percent-repeat-item-interface::beat-slash
- \override Rest #'thickness = #0.48
- \override Rest #'slope = #1.7
+ \override Rest.stencil = #ly:percent-repeat-item-interface::beat-slash
+ \override Rest.thickness = #0.48
+ \override Rest.slope = #1.7
\repeat unfold $count { r4 }
- \revert Rest #'stencil
+ \revert Rest.stencil
#}
)
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
\layout {
\context {
\Score
- \override SpacingSpanner #'base-shortest-duration =
+ \override SpacingSpanner.base-shortest-duration =
#(ly:make-moment 1 40)
- %\override SpacingSpanner #'strict-grace-spacing = ##t
+ %\override SpacingSpanner.strict-grace-spacing = ##t
}
}
}
<e''! e'>16
<f'' f'>16 ] )
- \once \override TextScript #'padding = #3.8
+ \once \override TextScript.padding = #3.8
<g'' g'>16 ( \staccato -\markup { \italic cresc. }
<a'' a'>16 ) \staccato
<bf'' bf'>32 (
|
- \once \override DynamicLineSpanner #'padding = #2
+ \once \override DynamicLineSpanner.padding = #2
b''32 ( \p \>
c'''32
d'''32
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.20
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "template, real-music, specific-notation"
bes1
}
-NoStem = { \override Stem #'transparent = ##t \override Flag #'transparent = ##t }
-NoNoteHead = \override NoteHead #'transparent = ##t
-ZeroBeam = \override Beam #'positions = #'(0 . 0)
+NoStem = { \override Stem.transparent = ##t \override Flag.transparent = ##t }
+NoNoteHead = \override NoteHead.transparent = ##t
+ZeroBeam = \override Beam.positions = #'(0 . 0)
staffTabLine = \new Staff \with {
\remove "Time_signature_engraver"
\remove "Clef_engraver"
} {
- \override Staff.StaffSymbol #'line-positions = #'(0)
+ \override Staff.StaffSymbol.line-positions = #'(0)
% Shows one horizontal line. The vertical line (simulating a bar-line) is simulated with a gridline
\set Staff.midiInstrument = #"choir aahs"
\key c \major
{
% disable the following line to see the the noteheads while writing the song
\NoNoteHead
- \override NoteHead #'no-ledgers = ##t
+ \override NoteHead.no-ledgers = ##t
% The beam between 8th-notes is used to draw the push-line
%How to fast write the push-lines:
\consists "Grid_point_engraver"
gridInterval = #(ly:make-moment 4 4) % 4/4 - tact. How many beats per bar
% The following line has to be adjusted O-F-T-E-N.
- \override GridPoint #'Y-extent = #'(-2 . -21)
+ \override GridPoint.Y-extent = #'(-2 . -21)
}
\context {
\ChoirStaff
staffAccordionMel =
\new Staff \with { \remove "Clef_engraver" } {
- \accidentalStyle "forget" %Set the accidentals (Vorzeichen) for each note,
+ \accidentalStyle forget %Set the accidentals (Vorzeichen) for each note,
%do not remember them for the rest of the measure.
\time 4/4
\set Staff.instrumentName="Accordion"
AltOn =
#(define-music-function (parser location mag) (number?)
- #{ \override Stem #'length = #(* 7.0 mag)
- \override NoteHead #'font-size =
+ #{ \override Stem.length = #(* 7.0 mag)
+ \override NoteHead.font-size =
#(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #})
AltOff = {
- \revert Stem #'length
- \revert NoteHead #'font-size
+ \revert Stem.length
+ \revert NoteHead.font-size
}
BassRhytm = {s4 s8 | c2 c2 | c2 s8 }
\new Staff = staffbass \with { \remove "Clef_engraver" } {
% This is not a RhythmicStaff because it must be possible to append lyrics.
- \override Score.GridLine #'extra-offset = #'( 13.0 . 0.0 ) % x.y
- \override Staff.StaffSymbol #'line-positions = #'( 0 )
+ \override Score.GridLine.extra-offset = #'( 13.0 . 0.0 ) % x.y
+ \override Staff.StaffSymbol.line-positions = #'( 0 )
% Shows one horizontal line. The vertical line (simulating a bar-line) is simulated by a grid
% Search for 'grid' in this page to find all related functions
\time 4/4
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
\key c \minor
<<
{
- \revert Stem #'direction
+ \revert Stem.direction
\change Staff = down
\set subdivideBeams = ##t
g16.[
\clef bass
\key c \minor
\set subdivideBeams = ##f
- \override Stem #'french-beaming = ##t
- \override Beam #'beam-thickness = #0.3
- \override Stem #'thickness = #4.0
+ \override Stem.french-beaming = ##t
+ \override Beam.beam-thickness = #0.3
+ \override Stem.thickness = #4.0
g'16[ b16 fis16 g16]
<<
\makeClusters {
}
\\
{
- \override Staff.Arpeggio #'arpeggio-direction = #DOWN
+ \override Staff.Arpeggio.arpeggio-direction = #DOWN
<cis, e, gis, b, cis>4\arpeggio
}
>>
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "pitches, tweaks-and-overrides"
} % begin verbatim
\new Staff {
- \override Score.BreakAlignment #'break-align-orders =
+ \override Score.BreakAlignment.break-align-orders =
#'#((left-edge ambitus breathing-sign clef staff-bar
key-cancellation key-signature time-signature custos)
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
\relative c'' {
e4\< e2.
e1\!
- \override Hairpin #'to-barline = ##f
+ \override Hairpin.to-barline = ##f
e4\< e2.
e1\!
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "repeats"
\relative c'' {
\repeat volta 1 { c1 }
- \set Score.doubleRepeatType = #":|:"
+ \set Score.doubleRepeatType = #":..:"
\repeat volta 1 { c1 }
\set Score.doubleRepeatType = #":|.|:"
\repeat volta 1 { c1 }
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks"
\relative c'' {
c4\< c\! d\> e\!
- \override Hairpin #'minimum-length = #5
+ \override Hairpin.minimum-length = #5
<< f1 { s4 s\< s\> s\! } >>
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides, version-specific"
chord, 'add-stem-support would be required. So, the solution is to
write the note as a chord and add the articulations inside the <...>.
The direction will always be above, but one can tweak this via a
-\\tweak: @code{<c-\\tweak #'direction #DOWN-\\fermata^\\fermata>}
+\\tweak: @code{<c-\\tweak direction #DOWN-\\fermata^\\fermata>}
"
doctitle = "Showing the same articulation above and below a note or chord"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
\layout {
\context {
\Score
- \override SpacingSpanner #'base-shortest-duration =
+ \override SpacingSpanner.base-shortest-duration =
#(ly:make-moment 1 18)
- \override NonMusicalPaperColumn #'line-break-system-details =
+ \override NonMusicalPaperColumn.line-break-system-details =
#'((alignment-distances . (12)))
}
}
trillFlat =
-\once \override TrillSpanner #'(bound-details left text) = \markup {
+\once \override TrillSpanner.bound-details.left.text = \markup {
\concat {
\musicglyph #"scripts.trill"
\translate #'(-0.5 . 1.9)
% RH voice 2
\new Voice {
\voiceTwo
- \override Voice.TrillSpanner #'direction = #DOWN
+ \override Voice.TrillSpanner.direction = #DOWN
d''4.~ \f \startTrillSpan
d''8.~ |
d''4.~ d''8.~ |
d''4.~ \startTrillSpan
d''8. ~ |
d''4.~ d''8.~ |
- \once \override NoteColumn #'ignore-collision = ##t
+ \once \override NoteColumn.ignore-collision = ##t
\hideNotes
d''8. \stopTrillSpan
s4. |
<<
\new Voice {
\voiceOne
- \override Voice.TrillSpanner #'direction = #UP
+ \override Voice.TrillSpanner.direction = #UP
f'4.~ \startTrillSpan
f'8.~ |
f'4.~ f'8.~ |
}
\new Voice {
\voiceTwo
- \override Voice.TrillSpanner #'direction = #DOWN
+ \override Voice.TrillSpanner.direction = #DOWN
bf8.[ bf8. bf8.] |
bf8.[ bf8. bf8.] |
bf8.
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings"
c'8\3(\glissando d'8\3)
c'8\3\glissando d'8\3
\hideNotes
- \grace { g16\3\glissando }
+ \grace { g16\glissando }
\unHideNotes
c'4\3
\afterGrace d'4\3\glissando {
\stemDown \hideNotes
- g16\3 }
+ g16 }
\unHideNotes
}
\layout {
\context {
\Score
- \override Glissando #'minimum-length = #4
- \override Glissando #'springs-and-rods =
+ \override Glissando.minimum-length = #4
+ \override Glissando.springs-and-rods =
#ly:spanner::set-spacing-rods
- \override Glissando #'thickness = #2
+ \override Glissando.thickness = #2
}
}
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.32
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\include "catalan.ly"
\header {
\key mib \major
\time 2/4
R2^\markup { \italic Comodo } |
- r8 \once \override TextScript #'padding = #2.0
+ r8 \once \override TextScript.padding = #2.0
sib16-.^\markup {\dynamic p \italic grazioso} do-. mib( re)-. do-. sib-. |
re8-. r8 re4->( |
re8) do16-. re-. mib( re) do-. re-. |
adding-an-extra-staff.ly
adding-indicators-to-staves-which-get-split-after-a-break.ly
adding-orchestral-cues-to-a-vocal-score.ly
+adding-timing-marks-to-long-glissandi.ly
alternative-bar-numbering.ly
changing-the-number-of-lines-in-a-staff.ly
changing-the-staff-size.ly
creating-double-digit-fingerings.ly
cross-staff-stems.ly
display-bracket-with-only-one-staff-in-a-system.ly
+extending-glissandi-across-repeats.ly
forcing-measure-width-to-adapt-to-metronomemarks-width.ly
glissandi-can-skip-grobs.ly
how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly
incipit.ly
inserting-score-fragments-above-a-staff,-as-markups.ly
letter-tablature-formatting.ly
+making-glissandi-breakable.ly
making-some-staff-lines-thicker-than-the-others.ly
measure-counter.ly
mensurstriche-layout-bar-lines-between-the-staves.ly
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings"
\tabFullNotation
g16 b d g b d g b
\stemDown
- \override Beam #'concaveness = #10000
+ \override Beam.concaveness = #10000
g,,16 b d g b d g b
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "contemporary-notation, rhythms"
g'16[^\markup { beams over rests } f' r d']
% N.B. use Score.Stem to set for the whole score.
- \override Staff.Stem #'stemlet-length = #0.75
+ \override Staff.Stem.stemlet-length = #0.75
c'16[^\markup { stemlets over rests } d' r f']
g'16[^\markup { stemlets and no rests } f'
- \once \override Rest #'transparent = ##t
+ \once \override Rest.transparent = ##t
r16 d']
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.28
+%% Note: this file works from version 2.16.0
\version "2.16.0"
\header {
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.20
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, text, fretted-strings, tweaks-and-overrides, scheme-language"
stringNumberSpanner =
#(define-music-function (parser location StringNumber) (string?)
#{
- \override TextSpanner #'style = #'solid
- \override TextSpanner #'font-size = #-5
- \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER
- \override TextSpanner #'(bound-details left text) = \markup { \circle \number #StringNumber }
+ \override TextSpanner.style = #'solid
+ \override TextSpanner.font-size = #-5
+ \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
+ \override TextSpanner.bound-details.left.text = \markup { \circle \number #StringNumber }
#})
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "simultaneous-notes, tweaks-and-overrides"
} % begin verbatim
-ignore = \override NoteColumn #'ignore-collision = ##t
+ignore = \override NoteColumn.ignore-collision = ##t
\relative c' {
<<
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "paper-and-layout"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
\layout {
\context {
\Score
- \override SpacingSpanner #'base-shortest-duration =
+ \override SpacingSpanner.base-shortest-duration =
#(ly:make-moment 1 20)
}
}
\key af \major
\time 3/4
- \once \override TextScript #'staff-padding = #4
+ \once \override TextScript.staff-padding = #4
<c'' af'>4. (
_ \markup { \dynamic p \italic { con amabilità } }
<af' ef'>8 )
|
- \once \override TextScript #'staff-padding = #4
+ \once \override TextScript.staff-padding = #4
ef''8. (
_ \markup { \italic { tranqu. } }
d''16 )
>>
\oneVoice
- \once \override TextScript #'staff-padding = #4
+ \once \override TextScript.staff-padding = #4
df''32
_ \markup { \italic dolce }
c''32
|
\break
- \overrideProperty "Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((alignment-distances . (12)))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((alignment-distances . (12)))
c''4. (
^ \markup \italic { cantabile, con intimissimo sentimento,
|
- \override Staff.SustainPedalLineSpanner #'outside-staff-priority = #1000
- \override Staff.SustainPedalLineSpanner #'staff-padding = #7
- \once \override TextScript #'padding = #2
+ \override Staff.SustainPedalLineSpanner.outside-staff-priority = #1000
+ \override Staff.SustainPedalLineSpanner.staff-padding = #7
+ \once \override TextScript.padding = #2
af16 \sustainOn
^ \markup \italic { non staccato }
_ \markup \italic { molto \concat { \dynamic { p } , } sempre tranquillo
|
- \override Staff.SustainPedalLineSpanner #'staff-padding = #4
+ \override Staff.SustainPedalLineSpanner.staff-padding = #4
df'16 \sustainOn
<bf' g' ef'>16
<bf' g' ef'>16
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "specific-notation, staff-notation, tweaks-and-overrides"
\relative c'' {
- \override Staff.TimeSignature #'stencil = #(lambda (grob)
+ \override Staff.TimeSignature.stencil = #(lambda (grob)
(parenthesize-stencil (ly:time-signature::print grob) 0.1 0.4 0.4 0.1 ))
\time 2/4
a4 b8 c
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "specific-notation, staff-notation, tweaks-and-overrides"
\relative c'' {
- \override Staff.TimeSignature #'stencil = #(lambda (grob)
+ \override Staff.TimeSignature.stencil = #(lambda (grob)
(bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1))
\time 2/4
a4 b8 c
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
texidoc = "
Sometimes, a time signature should not print the whole fraction (e.g.
7/4), but only the numerator (7 in this case). This can be easily done
-by using @code{\\override Staff.TimeSignature #'style = #'single-digit}
+by using @code{\\override Staff.TimeSignature.style = #'single-digit}
to change the style permanently. By using @code{\\revert
-Staff.TimeSignature #'style}, this setting can be reversed. To apply
+Staff.TimeSignature.style}, this setting can be reversed. To apply
the single-digit style to only one time signature, use the
@code{\\override} command and prefix it with a @code{\\once}.
\time 3/4
c4 c c
% Change the style permanently
- \override Staff.TimeSignature #'style = #'single-digit
+ \override Staff.TimeSignature.style = #'single-digit
\time 2/4
c4 c
\time 3/4
c4 c c
% Revert to default style:
- \revert Staff.TimeSignature #'style
+ \revert Staff.TimeSignature.style
\time 2/4
c4 c
% single-digit style only for the next time signature
- \once \override Staff.TimeSignature #'style = #'single-digit
+ \once \override Staff.TimeSignature.style = #'single-digit
\time 5/4
c4 c c c c
\time 2/4
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation, specific-notation, tweaks-and-overrides, workaround"
\key g \major
\time 4/4
%make the staff lines invisible on staves
- \override Staff.BarLine #'transparent = ##t
+ \override Staff.BarLine.transparent = ##t
\skip 1*8 % the actual music
% let finis bar go through all staves
- \override Staff.BarLine #'transparent = ##f
+ \override Staff.BarLine.transparent = ##f
% finis bar
\bar "|."
}
c'4 e'4.( d'8 c' b |
a4) b a2 |
b4.( c'8 d'4) c'4 |
- \once \override NoteHead #'transparent = ##t c'1 |
+ \once \override NoteHead.transparent = ##t c'1 |
b\breve |
}
}
a2 g4 e |
fis g4.( fis16 e fis4) |
g1 |
- \once \override NoteHead #'transparent = ##t g1 |
+ \once \override NoteHead.transparent = ##t g1 |
g\breve |
}
}
R1 |
R1 |
r2 d'2. d'4 b e' | % two bars
- \once \override NoteHead #'transparent = ##t e'1 |
+ \once \override NoteHead.transparent = ##t e'1 |
d'\breve |
}
}
R1 |
R1 |
g2. e4 |
- \once \override NoteHead #'transparent = ##t e1 |
+ \once \override NoteHead.transparent = ##t e1 |
g\breve |
}
}
\score {
{
\set Staff.instrumentName = #"Discantus "
- \override NoteHead #'style = #'neomensural
- \override Rest #'style = #'neomensural
- \override Staff.TimeSignature #'style = #'neomensural
+ \override NoteHead.style = #'neomensural
+ \override Rest.style = #'neomensural
+ \override Staff.TimeSignature.style = #'neomensural
\cadenzaOn
\clef "neomensural-c1"
\key f \major
\score {
{
\set Staff.instrumentName = #"Altus "
- \override NoteHead #'style = #'neomensural
- \override Rest #'style = #'neomensural
- \override Staff.TimeSignature #'style = #'neomensural
+ \override NoteHead.style = #'neomensural
+ \override Rest.style = #'neomensural
+ \override Staff.TimeSignature.style = #'neomensural
\cadenzaOn
\clef "neomensural-c3"
\key f \major
\score {
{
\set Staff.instrumentName = #"Tenor "
- \override NoteHead #'style = #'neomensural
- \override Rest #'style = #'neomensural
- \override Staff.TimeSignature #'style = #'neomensural
+ \override NoteHead.style = #'neomensural
+ \override Rest.style = #'neomensural
+ \override Staff.TimeSignature.style = #'neomensural
\cadenzaOn
\clef "neomensural-c4"
\key f \major
\score {
{
\set Staff.instrumentName = #"Bassus "
- \override NoteHead #'style = #'neomensural
- \override Rest #'style = #'neomensural
- \override Staff.TimeSignature #'style = #'neomensural
+ \override NoteHead.style = #'neomensural
+ \override Rest.style = #'neomensural
+ \override Staff.TimeSignature.style = #'neomensural
\cadenzaOn
\clef "bass"
\key f \major
\context {
\Score
% no bars in staves
- \override BarLine #'transparent = ##t
+ \override BarLine.transparent = ##t
}
% the next three instructions keep the lyrics between the bar lines
\context {
\Lyrics
\consists "Bar_engraver"
- \override BarLine #'transparent = ##t
+ \override BarLine.transparent = ##t
}
\context {
\StaffGroup
\context {
\Voice
% no slurs
- \override Slur #'transparent = ##t
+ \override Slur.transparent = ##t
% Comment in the below "\remove" command to allow line
% breaking also at those barlines where a note overlaps
% into the next bar. The command is commented out in this
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
+adding-timing-marks-to-long-glissandi.ly
adjusting-grace-note-spacing.ly
altering-the-length-of-beamed-stems.ly
alternative-bar-numbering.ly
drawing-circles-around-various-objects.ly
dynamics-custom-text-spanner-postfix.ly
dynamics-text-spanner-postfix.ly
+extending-glissandi-across-repeats.ly
fine-tuning-pedal-brackets.ly
forcing-horizontal-shift-of-notes.ly
fret-diagrams-explained-and-developed.ly
keep-change-clefs-full-sized.ly
line-arrows.ly
making-an-object-invisible-with-the-transparent-property.ly
+making-glissandi-breakable.ly
manually-controlling-beam-positions.ly
mensurstriche-layout-bar-lines-between-the-staves.ly
moving-dotted-notes-in-polyphony.ly
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
accel = \markup \tiny \italic \bold "accel..."
ritar = \markup \tiny \italic \bold "ritar..."
-ignore = \override NoteColumn #'ignore-collision = ##t
+ignore = \override NoteColumn.ignore-collision = ##t
%%
%% Shifting Notes
%%
-shift = \once \override NoteColumn #'force-hshift = #0.9
-shifta = \once \override NoteColumn #'force-hshift = #1.2
-shiftb = \once \override NoteColumn #'force-hshift = #1.4
+shift = \once \override NoteColumn.force-hshift = #0.9
+shifta = \once \override NoteColumn.force-hshift = #1.2
+shiftb = \once \override NoteColumn.force-hshift = #1.4
%%
%%
% aniente = "a niente"
-aniente = \once \override Hairpin #'circled-tip = ##t
+aniente = \once \override Hairpin.circled-tip = ##t
%%
%% Tuplets
%%
-tupletbp = \once \override Staff.TupletBracket #'padding = #2.25
+tupletbp = \once \override Staff.TupletBracket.padding = #2.25
%%
%% Flag [Note Head - Stem]
%%
-noflag = \once \override Flag #'style = #'no-flag
+noflag = \once \override Flag.style = #'no-flag
%%%
%%% Functions
\voiceOne
\set Score.markFormatter = #format-mark-box-numbers
- \override Score.VoltaBracket #'font-name = #"sans"
- \override Score.VoltaBracket #'extra-offset = #'(0 . 1)
- \override SpacingSpanner #'uniform-stretching = ##t
+ \override Score.VoltaBracket.font-name = #"sans"
+ \override Score.VoltaBracket.extra-offset = #'(0 . 1)
+ \override SpacingSpanner.uniform-stretching = ##t
%% Measure 1
%% Measure 6
\time 5/8
- \once \override Beam #'grow-direction = #RIGHT % \featherDurations #(ly:make-moment 2 3)
+ \once \override Beam.grow-direction = #RIGHT % \featherDurations #(ly:make-moment 2 3)
{ d16 \staccato
[ d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato]
}
\new Staff \ViolinSolo
>>
- \override Score.Rest #'transparent = ##t
- \set Score.defaultBarType = "empty"
+ \override Score.Rest.transparent = ##t
+ \set Score.defaultBarType = "-"
>>
\layout {
--- /dev/null
+% 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.6
+\version "2.17.6"
+
+\header {
+ lsrtags = "expressive-marks"
+
+ texidoc = "
+Vocal and wind music frequently uses a tick mark as a breathing sign. This
+indicates a breath that subtracts a little time from the previous note rather
+than causing a short pause, which is indicated by the comma breath mark. The
+mark can be moved up a little to take it away from the stave.
+"
+ doctitle = "Using a tick as the breath mark symbol"
+} % begin verbatim
+
+
+\relative c'' {
+ c2
+ \breathe
+ d2
+ \override BreathingSign.Y-offset = #2.6
+ \override BreathingSign.text =
+ \markup { \musicglyph #"scripts.tickmark" }
+ c2
+ \breathe
+ d2
+}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
\time 2/4
\testnotes
- \override Flag #'stencil = #modern-straight-flag
+ \override Flag.stencil = #modern-straight-flag
\testnotes
- \override Flag #'stencil = #old-straight-flag
+ \override Flag.stencil = #old-straight-flag
\testnotes
- \revert Flag #'stencil
+ \revert Flag.stencil
\testnotes
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
\header {
lsrtags = "rhythms"
\relative c'' {
- \override Flag #'stroke-style = #"grace"
+ \override Flag.stroke-style = #"grace"
c8( d2) e8( f4)
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "devel, scheme-language, tweaks-and-overrides"
\relative c' {
%% display grobs for each note head:
- %\override NoteHead #'before-line-breaking = #display-grobs
+ %\override NoteHead.before-line-breaking = #display-grobs
<c
%% or just for one:
- \tweak #'before-line-breaking #display-grobs
+ \tweak before-line-breaking #display-grobs
es
g>1\arpeggio
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, really-cool, scheme-language, tweaks-and-overrides"
(cons 0 1.3125)
(cons -.75 .75))
-myNoteHeads = \override NoteHead #'stencil = \parallelogram
-normalNoteHeads = \revert NoteHead #'stencil
+myNoteHeads = \override NoteHead.stencil = \parallelogram
+normalNoteHeads = \revert NoteHead.stencil
\relative c'' {
\myNoteHeads
g4 d'
\normalNoteHeads
- <f, \tweak #'stencil \parallelogram b e>4 d
+ <f, \tweak stencil \parallelogram b e>4 d
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "really-simple, tweaks-and-overrides"
\time 2/4
\set fingeringOrientations = #'(right)
<
- \tweak #'font-size #3 c
- \tweak #'color #red d-\tweak #'font-size #8 -4
- \tweak #'style #'cross g
- \tweak #'duration-log #2 a
+ \tweak font-size #3 c
+ \tweak color #red d-\tweak font-size #8 -4
+ \tweak style #'cross g
+ \tweak duration-log #2 a
>2
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, expressive-marks"
} % begin verbatim
{
- \override Score.StaffSymbol #'layer = #4
- \override Staff.TimeSignature #'layer = #3
+ \override Score.StaffSymbol.layer = #4
+ \override Staff.TimeSignature.layer = #3
b'2 b'~
- \once \override Staff.TimeSignature #'whiteout = ##t
+ \once \override Staff.TimeSignature.whiteout = ##t
\time 3/4
b' r4
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "spacing, tweaks-and-overrides, workaround"
{
\music
\break
- \override DynamicLineSpanner #'staff-padding = #2.0
- \override DynamicLineSpanner #'Y-extent = #'(-1.5 . 1.5)
- \override TextScript #'Y-extent = #'(-1.5 . 1.5)
+ \override DynamicLineSpanner.staff-padding = #2.0
+ \override DynamicLineSpanner.Y-extent = #'(-1.5 . 1.5)
+ \override TextScript.Y-extent = #'(-1.5 . 1.5)
\music
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks"
\relative c' {
- \override DynamicLineSpanner #'staff-padding = #4
+ \override DynamicLineSpanner.staff-padding = #4
c2\p f\mf
g2\< b4\> c\!
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "spacing, tweaks-and-overrides, vocal-music"
\new Staff \with {
alignAboveContext = #"3"
fontSize = #-2
- \override StaffSymbol #'staff-space = #(magstep -2)
+ \override StaffSymbol.staff-space = #(magstep -2)
\remove "Time_signature_engraver"
} {
\times 4/6 {
- \override TextScript #'padding = #3
+ \override TextScript.padding = #3
c8[^"ossia above" d e d e f]
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "vocal-music"
dropLyrics =
{
- \override LyricText #'extra-offset = #'(0 . -5)
- \override LyricHyphen #'extra-offset = #'(0 . -5)
- \override LyricExtender #'extra-offset = #'(0 . -5)
+ \override LyricText.extra-offset = #'(0 . -5)
+ \override LyricHyphen.extra-offset = #'(0 . -5)
+ \override LyricExtender.extra-offset = #'(0 . -5)
}
raiseLyrics =
{
- \revert LyricText #'extra-offset
- \revert LyricHyphen #'extra-offset
- \revert LyricExtender #'extra-offset
+ \revert LyricText.extra-offset
+ \revert LyricHyphen.extra-offset
+ \revert LyricExtender.extra-offset
}
skipFour = \repeat unfold 4 { \skip 8 }
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "automatic-notation, keyboards, template, vocal-music"
\new ChoirStaff <<
\new Lyrics = "sopranos" \with {
% This is needed for lyrics above a staff
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff = "women" <<
\new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
\new Lyrics = "altos"
\new Lyrics = "tenors" \with {
% This is needed for lyrics above a staff
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff = "men" <<
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "contexts-and-engravers, template, vocal-music"
\context { \Staff
% these lines prevent empty staves from being printed
\RemoveEmptyStaves
- \override VerticalAxisGroup #'remove-first = ##t
+ \override VerticalAxisGroup.remove-first = ##t
}
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "really-simple, template, vocal-music"
\new ChoirStaff <<
\new Lyrics = "sopranos" \with {
% this is needed for lyrics above a staff
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff = "women" <<
\new Voice = "sopranos" {
\new Lyrics = "altos"
\new Lyrics = "tenors" \with {
% this is needed for lyrics above a staff
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff = "men" <<
\clef bass
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
\layout {
\context {
\Score
- \override PaperColumn #'keep-inside-line = ##t
- \override NonMusicalPaperColumn #'keep-inside-line = ##t
+ \override PaperColumn.keep-inside-line = ##t
+ \override NonMusicalPaperColumn.keep-inside-line = ##t
}
}
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
+ \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 "||"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
\header {
lsrtags = "headword"
\new StaffGroup <<
\new Staff \relative c'' {
\set Staff.instrumentName = "Flauto I,II"
- \once \override Score.RehearsalMark #'self-alignment-X = #-1
- \once \override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
- \once \override Score.TimeSignature #'break-align-anchor-alignment = #LEFT
- \once \override Score.RehearsalMark #'padding = #4
+ \once \override Score.RehearsalMark.self-alignment-X = #-1
+ \once \override Score.RehearsalMark.break-align-symbols = #'(time-signature)
+ \once \override Score.TimeSignature.break-align-anchor-alignment = #LEFT
+ \once \override Score.RehearsalMark.padding = #4
\mark \markup \large \bold {Moderato assai}
\key d \major
\time 2/4
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.14.0
+%% Note: this file works from version 2.16.0
\version "2.16.0"
\header {
+++ /dev/null
-depth = ../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-LATEX_FILES =$(call src-wildcard,*.latex)
-EXTRA_DIST_FILES = $(LATEX_FILES)
-
-include $(depth)/make/stepmake.make
-
-
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.6"
@node Running lilypond
heads remaining the default black in the lower staff.
@lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
\new Staff { a }
@end lilypond
@lilypond[quote,verbatim,relative=2]
\new Staff {
- \override Staff.NoteHead #'color = #red
+ \override Staff.NoteHead.color = #red
a
}
@end lilypond
staff by inserting
@example
-\override VerticalAxisGroup #'staff-affinity = ##f
+\override VerticalAxisGroup.staff-affinity = ##f
@end example
@noindent
convert-ly [@var{option}]@dots{} @var{filename}@dots{}
@end example
-
The following options can be given:
@table @code
+@item -d,--diff-version-update
+update the @code{\version} to the latest or, if this is greater, do
+nothing.
+
@item -e,--edit
Apply the conversions direct to the input file, modifying it
in-place.
will guess this, on the basis of @code{\version} strings in the file.
E.g. @option{--from=2.10.25}
+@item -h, --help
+Print usage help.
+
+@item -l @var{loglevel}, --loglevel=@var{loglevel}
+Set the output verbosity to @var{loglevel}. Possible values, in upper
+case, are @code{PROGRESS} (the default), @code{NONE}, @code{WARNING},
+@code{ERROR} and @code{DEBUG}.
+
@item -n,--no-version
Normally, @command{convert-ly} adds a @code{\version} indicator
to the output. Specifying this option suppresses this.
@item -s, --show-rules
Show all known conversions and exit.
-@item --to=@var{to-patchlevel}
-Set the goal version of the conversion. It defaults to the latest
-available version. E.g. @option{--to=2.12.2}
+@item -t, --to=@var{to-patchlevel}
+Explicitly set which @code{\version} to convert to, otherwise the
+default is the most current value.
-@item -h, --help
-Print usage help.
-
-@item -l @var{loglevel}, --loglevel=@var{loglevel}
-Set the output verbosity to @var{loglevel}. Possible values are @code{NONE},
-@code{ERROR}, @code{WARNING}, @code{PROGRESS} (default) and @code{DEBUG}.
+@example
+convert-ly --to=2.14.1 myfile.ly
+@end example
@end table
+++ /dev/null
-depth = ../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-SUBDIRS = server
-include $(depth)/make/stepmake.make
-
-#OUT_BIB_FILES = $(addprefix $(outdir)/, $(BIB_FILES))
-BIB_FILES = $(call src-wildcard,*.bib)
-EXTRA_DIST_FILES += $(BIB_FILES) $(call src-wildcard,*.bst)
-
@subheading Announcements
Announcements and news by version:
+@uref{http://lilypond.org/doc/v2.16/Documentation/web/index#Lilypond-2_002e16_002e0-released_0021-August-24_002c-2012-1,v2.16},
@uref{http://lilypond.org/doc/v2.14/Documentation/web/index#LilyPond-2_002e14_002e0-released_0021-June-6_002c-2011,v2.14},
@miscLink{announce-v2.12,v2.12},
@miscLink{announce-v2.10,v2.10},
@miscLink{ANNOUNCE-0.1,v0.1}
Descriptive list of changes by version:
+@uref{http://lilypond.org/doc/v2.16/Documentation/changes/index.html,v2.16},
@uref{http://lilypond.org/doc/v2.14/Documentation/changes/index.html,v2.14},
@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS,v2.12},
@uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/NEWS,v2.10},
@divEnd
+@divClass{column-center-bottom}
+@subheading Thanks
+
+Thanks to developers, contributors, bug hunters and suggestions for
+@miscLink{THANKS-2.16,v2.16},
+@miscLink{THANKS-2.14,v2.14},
+@miscLink{THANKS-2.12,v2.12},
+@miscLink{THANKS-2.10,v2.10},
+@miscLink{THANKS-2.8,v2.8},
+@miscLink{THANKS-2.6,v2.6},
+@miscLink{THANKS-2.4,v2.4},
+@miscLink{THANKS-2.2,v2.2},
+@miscLink{THANKS-2.0,v2.0},
+@miscLink{THANKS-1.8,v1.8}
+
+@divEnd
+
@divClass{column-center-bottom}
@subheading Changelogs
@item
@sourceimage{logo-windows,,,}
@downloadStableWindows
-For Windows 2000, XP, Vista and Windows 7.
+For Windows 2000, XP, Vista, Windows 7 and 8.
@end itemize
@c used for news about the upcoming release; see CG 10.2
+@newsItem
+@subsubheading LilyPond 2.17.8 released! @emph{December 1, 2012}
+
+We are happy to announce the release of LilyPond 2.17.8. This
+release contains the usual number of bugfixes and 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.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.7 released! @emph{November 17, 2012}
+
+We are happy to announce the release of LilyPond 2.17.7. This
+release contains the usual number of bugfixes and 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.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading The LilyPond Report #28. @emph{November 12, 2012}
+
+The @uref{http://news.lilynet.net/?The-LilyPond-Report-28, October
+issue of the @emph{LilyPond Report}} focuses on the
+@uref{http://news.lilynet.net/?LilyPond-meeting-in-Waltrop,
+meeting of LilyPond developers and users} in Waltrop, Germany last
+August. Of course, there are also some musings on LilyPond
+triggered by the release of 2.16.0 and 2.17.0 occuring from that
+venue.
+
+There are also two monthly financial reports from David Kastrup
+whose work on LilyPond is
+@uref{http://news.lilynet.net/?The-LilyPond-Report-24#an_urgent_request_for_funding,
+solely paid for} by financial contributions from other developer
+and users (thank you!), and a report about experiences from
+@uref{http://scorio.com, a web-based music typesetting service}
+using LilyPond internally.
+
+Come @uref{http://news.lilynet.net/?The-LilyPond-Report-28, read
+LilyPond Report 28} now; comments and contributions are warmly
+encouraged!
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.16.1 released! @emph{November 9, 2012}
+
+We are happy to announce the release of LilyPond 2.16.1. This has a number of
+updates to the previous stable version, and should cause no problems. We
+recommend that everybody upgrade to this version.
+@newsEnd
+
@newsItem
@subsubheading Lilypond 2.16.0 released! @emph{August 24, 2012}
-We are proud to announce the release of GNU LilyPond 2.16.0.
+We are proud to announce the release of GNU LilyPond 2.16.1.
LilyPond is a music engraving program, devoted to producing the
highest-quality sheet music possible. It brings the aesthetics of
traditionally engraved music to computer printouts.
@newsEnd
-@newsItem
-@subsubheading Lilypond 2.15.95 released! @emph{August 11, 2012}
-
-We are excited to announce the release of LilyPond 2.15.95.
-With this release, development on version 2.15 is frozen for the
-upcoming 2.16 stable release and only open to bug fixes.
-
-All users are urged to try this version to ensure the best
-quality of the upcoming stable release. If you discover any
-problems, please send us @ref{Bug reports}.
-
-New features since 2.14.2 are listed in the @qq{Changes} manual
-on the website section about @ref{Development}.
-
-@newsEnd
-
-
-@newsItem
-@subsubheading LilyPond 2.15.42 released! @emph{August 02, 2012}
-
-We are happy to announce the release of LilyPond 2.15.42. This
-release contains the usual number of bugfixes.
-
-It is strongly recommended that normal users do @strong{not} use
-this release, and instead use the stable 2.14 version. Please
-note that due to a few Critical bugs, this is not the next release
-candidate.
-
-@newsEnd
-
-
-@newsItem
-@subsubheading The LilyPond Report #27. @emph{August 2, 2012}
-
-The @emph{LilyPond Report} is back, with some interesting insights on
-new Scheme-related features recently added by our community’s only paid
-developer David Kastrup (thanks to your
-@uref{http://lilypond.org/sponsoring.html, continuing donations}). Also
-to be found in this issue are an overview of some lesser-known LilyPond
-companion projects, and a handful of more shallow factoids.
-Come
-@uref{http://news.lilynet.net/?The-LilyPond-Report-27, read
-LilyPond Report 27} now; comments and contributions are
-warmly encouraged!
-
-@newsEnd
* don't duplicate entries from news-front.itexi
@end ignore
+@newsItem
+@subsubheading LilyPond 2.16.1 released! @emph{November 9, 2012}
+
+We are happy to announce the release of LilyPond 2.16.1. This has a number of
+updates to the previous stable version, and should cause no problems. We
+recommend that everybody upgrade to this version.
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.6 released! @emph{November 3, 2012}
+
+We are happy to announce the release of LilyPond 2.17.6. This
+release contains the usual number of bugfixes and 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.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.5 released! @emph{October 20, 2012}
+
+We are happy to announce the release of LilyPond 2.17.5. This
+release contains the usual number of bugfixes and 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.16 version.
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.4 released! @emph{October 6, 2012}
+
+We are happy to announce the release of LilyPond 2.17.4. This
+release contains the usual number of bugfixes. It is strongly
+recommended that normal users do @strong{not} use this release,
+and instead use the stable 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.3 released! @emph{September 23, 2012}
+
+We are happy to announce the release of LilyPond 2.17.3. This
+release contains the usual number of bugfixes. It is strongly
+recommended that normal users do @strong{not} use this release,
+and instead use the stable 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.2 released! @emph{September 10, 2012}
+
+We are happy to announce the release of LilyPond 2.17.2. This
+release contains the usual number of bugfixes. It is strongly
+recommended that normal users do @strong{not} use this release,
+and instead use the stable 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.1 released! @emph{August 28, 2012}
+
+We are happy to announce the release of LilyPond 2.17.1. This
+release contains the usual number of bugfixes. It is strongly
+recommended that normal users do @strong{not} use this release,
+and instead use the stable 2.16 version.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading LilyPond 2.17.0 released! @emph{August 26, 2012}
+
+We are happy to announce the release of LilyPond 2.17.0. This
+release contains the usual number of bugfixes. It is strongly
+recommended that normal users do @strong{not} use this release,
+and instead use the stable 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading Lilypond 2.16.0 released! @emph{August 24, 2012}
+
+We are proud to announce the release of GNU LilyPond 2.16.0.
+LilyPond is a music engraving program, devoted to producing the
+highest-quality sheet music possible. It brings the aesthetics of
+traditionally engraved music to computer printouts.
+
+Many improvements have been made in the past year since the previous
+main stable version. A few major improvements are:
+
+@itemize
+@item
+Support for kievan square notation
+@item
+User and programming interfaces have greatly improved
+@item
+Music functions have become quite more versatile
+@end itemize
+
+A full list of new features is given in:
+
+@example
+@uref{http://lilypond.org/doc/v2.16/Documentation/changes/index.html}
+@end example
+
+Happy music typesetting! LilyPond 2.16 was brought to you by...
+
+Main development team:
+
+Bertrand Bordage, Trevor Daniels, Colin Hall, Phil Holmes, Ian Hulin,
+Reinhold Kainhofer, David Kastrup, Jonathan Kulp, Werner Lemberg,
+John Mandereau, Patrick McCarty, Joe Neeman, Han-Wen Nienhuys,
+Jan Nieuwenhuizen, Graham Percival, Mark Polesky, Neil Puttock,
+Mike Solomon, Carl Sorensen, Francisco Vila, Valentin Villenave,
+Jan Warchoł
+
+Programming contributors:
+
+Aleksandr Andreev, Sven Axelsson, Peter Chubb, Karin Hoethker,
+Marc Hohl, David Nalesnik, Justin Ohmie, Benkő Pál, Julien Rioux, Patrick Schmidt,
+Adam Spiers, Heikki Taurainen, Piers Titus van der Torren,
+Jan-Peter Voigt, Janek Warchol
+
+Documentation contributors:
+
+James Lowe, Pavel Roskin, Alberto Simoes, Stefan Weil
+
+Bug squad:
+
+Colin Campbell, Eluze, Phil Holmes, Marek Klein, Ralph Palmer,
+James Lowe
+
+Support:
+
+Colin Campbell, Christian Hitz, Phil Holmes
+
+Translation contributors:
+
+Jean-Charles Malahieude, Till Paala, Yoshiki Sawada
+
+@newsEnd
+
+@newsItem
+@subsubheading Lilypond 2.15.95 released! @emph{August 11, 2012}
+
+We are excited to announce the release of LilyPond 2.15.95.
+With this release, development on version 2.15 is frozen for the
+upcoming 2.16 stable release and only open to bug fixes.
+
+All users are urged to try this version to ensure the best
+quality of the upcoming stable release. If you discover any
+problems, please send us @ref{Bug reports}.
+
+New features since 2.14.2 are listed in the @qq{Changes} manual
+on the website section about @ref{Development}.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading LilyPond 2.15.42 released! @emph{August 02, 2012}
+
+We are happy to announce the release of LilyPond 2.15.42. This
+release contains the usual number of bugfixes.
+
+It is strongly recommended that normal users do @strong{not} use
+this release, and instead use the stable 2.14 version. Please
+note that due to a few Critical bugs, this is not the next release
+candidate.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading The LilyPond Report #27. @emph{August 2, 2012}
+
+The @emph{LilyPond Report} is back, with some interesting insights on
+new Scheme-related features recently added by our community’s only paid
+developer David Kastrup (thanks to your
+@uref{http://lilypond.org/sponsoring.html, continuing donations}). Also
+to be found in this issue are an overview of some lesser-known LilyPond
+companion projects, and a handful of more shallow factoids.
+
+Come
+@uref{http://news.lilynet.net/?The-LilyPond-Report-27, read
+LilyPond Report 27} now; comments and contributions are
+warmly encouraged!
+
+@newsEnd
@newsItem
@subsubheading Release candidate withdrawn @emph{July 11, 2012}
+++ /dev/null
-depth=../../..
-LOCALSTEPMAKE_TEMPLATES = ly
-include $(depth)/make/stepmake.make
-
-EXTRA_DIST_FILES = favicon.ico robots.txt tweets.xml
-EXTRA_DIST_FILES += lilypond.org.htaccess website-dir.htaccess
-
#RedirectMatch ^/development /doc/development
#old# default doc dir
-RedirectMatch ^/doc/*$ /doc/v2.14
+RedirectMatch ^/doc/*$ /doc/v2.16
# make attempt at `latest' symlink avoid ^v catch-all doc fix rule below
-RedirectMatch ^/doc//*latest/*(.*)$ /doc/v2.15/$1
-RedirectMatch ^/doc//*development/*(.*)$ /doc/v2.15/$1
-RedirectMatch ^/doc//*stable/*(.*)$ /doc/v2.14/$1
-RedirectMatch ^/doc//*([^v].*)$ /doc/v2.14/$1
-RedirectMatch ^(/Documentation.*)$ /doc/v2.14$1
+RedirectMatch ^/doc//*latest/*(.*)$ /doc/v2.17/$1
+RedirectMatch ^/doc//*development/*(.*)$ /doc/v2.17/$1
+RedirectMatch ^/doc//*stable/*(.*)$ /doc/v2.16/$1
+RedirectMatch ^/doc//*([^v].*)$ /doc/v2.16/$1
+RedirectMatch ^(/Documentation.*)$ /doc/v2.16$1
RedirectMatch ^/index$ /
# fix root calculation: no double slashes
Disallow: /doc/v2.9/
Disallow: /doc/v2.10/
Disallow: /doc/v2.11/
+Disallow: /doc/v2.12/
Disallow: /doc/v2.13/
+Disallow: /doc/v2.14/
+Disallow: /doc/v2.15/
<tweets>
-<tweet>
-<a target="_blank"
-href="http://www.inadiutorium.xf.cz">
-Project</a> in adiutorium provides chants to the catholic Divine
-Office in the Czech language. We use LilyPond for the typesetting.
-</tweet>
-<tweet>
-28/07/2012 : Christophe Rousset et les Talens Lyriques interprètent Phaëton
-de Lully au
-<a
-href="http://festivalbeaune.pagesperso-orange.fr/2012/o120728.htm"
-target="_blank"
->
-festival
-de Beaune</a>,
-en utilisant un <a
-href="http://nicolas.sceaux.free.fr/index.php/2009/05/03/39"
-target="_blank"
->
-matériel créé avec LilyPond.
-</a>
-</tweet>
-<tweet>
-28/07/2012 : Christophe Rousset et les Talens Lyriques interprètent Phaëton
-de Lully au
-<a
-href="http://festivalbeaune.pagesperso-orange.fr/2012/o120728.htm"
-target="_blank"
->
-festival
-de Beaune</a>,
-en utilisant un <a
-href="http://nicolas.sceaux.free.fr/index.php/2009/05/03/39"
-target="_blank"
->
-matériel créé avec LilyPond</a>.
-</tweet>
-<tweet>
-2012.07.28: Christophe Rousset and Les Talens Lyriques play Phaëton by Lully
-at the
-<a
-href="http://festivalbeaune.pagesperso-orange.fr/2012/o120728.htm"
-target="_blank"
->
-Beaune festival</a>, using
-<a
-href="http://nicolas.sceaux.free.fr/index.php/2009/05/03/39"
-target="_blank"
->
-music typeset with LilyPond</a>.
-</tweet>
-<tweet>
-Schumann - <a target="_blank"
-href="http://superbonus.project.free.fr/spip.php?article50">
-Album pour la Jeunesse</a>, Op. 68.
-Currently in French or German, with or without
-fingering. LilyPond typeset and freely downloadable!
-</tweet>
+ <tweet>
+ Nov 6, at Xinghai Conservatory of Music in Guangzhou, China, a premiere of
+ James Harkins's new piece for sheng and electronics, typeset in
+ lilypond.
+ </tweet>
</tweets>
ISOLANG = zh
depth = ../..
-# SUBDIRS = web learning notation texidocs usage included essay extending
-SUBDIRS = web texidocs included
STEPMAKE_TEMPLATES = documentation texinfo
LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
NO_PDF_FILES = 1
+++ /dev/null
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
version that you are working on. See TRANSLATION for details.
we depend on an external entity here, which we cannot control. Suppose
-we go from 2.16.x to 2.17.x and put the documentation under "v2.17".
+we go from 2.15.x to 2.17.x and put the documentation under "v2.17".
For some time, Google won't have the new location in its index, so the
-search would get nothing. It would be better to keep "v2.16" in the
-search for a while and have a redirection from "v2.16" to "v2.17".
+search would get nothing. It would be better to keep "v2.15" in the
+search for a while and have a redirection from "v2.15" to "v2.17".
-->
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org/doc/v2.16 '
+ onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org/doc/v2.16 '
+ onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org/doc/v2.16 '
+ onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Google 搜索">
<input type="text" name="brute_query" onfocus="this.value=''" value="搜索">
+++ /dev/null
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
+++ /dev/null
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
flower lily \
mf ly \
tex ps scm \
- po make \
+ po \
elisp vim \
input \
- stepmake $(documentation-dir)
+ $(documentation-dir)
## this convoluted construction is necessary, since we don't know the
documentation-dir=$(if $(findstring no,$(DOCUMENTATION)),,Documentation)
SCRIPTS = configure autogen.sh smart-autogen.sh smart-configure.sh
-README_FILES = COPYING COPYING.FDL DEDICATION ROADMAP THANKS HACKING \
+README_FILES = COPYING COPYING.FDL DEDICATION ROADMAP HACKING \
LICENSE LICENSE.DOCUMENTATION
TOPDOC_FILES = AUTHORS INSTALL README NEWS
TOPDOC_TXT_FILES = $(addprefix $(top-build-dir)/Documentation/topdocs/$(outdir)/,$(addsuffix .txt,$(TOPDOC_FILES)))
RELEASE_FILES = ChangeLog RELEASE-COMMIT
RELEASE_OUT_FILES = $(RELEASE_FILES:%=$(outdir)/%)
OUT_DIST_FILES += $(RELEASE_OUT_FILES)
-EXTRA_DIST_FILES = VERSION .gitignore .mailmap \
- $(README_FILES) $(SCRIPTS) $(IN_FILES)
INSTALLATION_DIR=$(local_lilypond_datadir)
INSTALLATION_FILES=$(config_make) VERSION
-
+GENERATED_BUILD_FILES=configure aclocal.m4 autogen.sh
# bootstrap stepmake:
#
STEPMAKE_TEMPLATES=toplevel po install
.PHONY: test info website
-local-dist: refresh-release-files dist-toplevel-txt-files
+dist: local-dist $(GENERATED_BUILD_FILES) top-doc refresh-release-files .gitfilelist
+ @cd $(top-src-dir) && \
+ if test -n "`find . -name .git`" -a '(' -n "`git diff HEAD | head -1`" \
+ -o -n "`git status | grep -i untracked`" ')'; \
+ then echo "*** dist must been rolled on a clean git tree;"; \
+ echo "uncommitted changes or untracked files detected, aborting."; \
+ exit 1; fi
+ rm -rf $(distdir)
+ $(MAKE) local-dist $(distdir)
+ chmod -R a+r $(distdir)
+ chmod a+x `find $(distdir) -type d -print`
+ $(LN) $(TOPDOC_TXT_FILES) $(distdir)
+ $(LN) $(GENERATED_BUILD_FILES:%=$(src-dir)/%) .gitfilelist $(distdir)
+ cd $(top-src-dir) && xargs $(buildscript-dir)/mass-link hard . $(distdir) <$(top-build-dir)/.gitfilelist
+ if test -n "`find $(top-src-dir) -name .git`"; then \
+ COMMIT_DATE=`git --git-dir=$(top-src-dir)/.git log -1 --format=%cD`; \
+ find $(distdir) | xargs touch -d "$$COMMIT_DATE"; fi
+ (cd ./$(depth)/$(outdir); $(TAR) -cf - --owner=0 --group=0 $(DIST_NAME) | gzip -9 > $(DIST_NAME).tar.gz)
+ rm -rf $(distdir)
+
+ifneq ($(shell find $(top-src-dir) -name .git),)
+.gitfilelist: $(top-src-dir)/.git/index
+ cd $(top-src-dir) && git ls-files >$(top-build-dir)/$@
+local-clean-filelist:
+ rm -f .gitfilelist
+else
+.gitfilelist: $(src-dir)/.gitfilelist
+ cp $< $@
+local-clean-filelist:
+endif
all: $(outdir)/VERSION
top-doc: python-modules
-local-clean: local-clean-ChangeLog
+local-clean: local-clean-ChangeLog local-clean-filelist
local-clean-ChangeLog:
rm -f ChangeLog
-dist-toplevel-txt-files: top-doc
- -mkdir -p $(distdir)
- ln $(TOPDOC_TXT_FILES) $(distdir)
- ln $(top-src-dir)/stepmake/aclocal.m4 $(distdir)
-
info:
$(foreach d, $(INFO_DIRECTORIES),$(MAKE) -C $(d) out=www info && ) true
$(MAKE) -C input/regression/abc2ly out=test local-test
$(MAKE) -C input/regression/lilypond-book out=test local-test
-ifndef BASELINE_COMMIT
-BASELINE_COMMIT:=HEAD
-endif
-
-ifdef LILYPOND_BASELINES
-BASELINE_ARCHIVE:=$(LILYPOND_BASELINES)/baseline-$(shell git rev-list -1 $(BASELINE_COMMIT)).tar.gz
-
-test-baseline: $(BASELINE_ARCHIVE)
- tar xzf $(BASELINE_ARCHIVE)
- $(MAKE) test-snippets-clean
-
-$(BASELINE_ARCHIVE):
- $(MAKE) test-baseline-create
- tar czf $(BASELINE_ARCHIVE) input/regression/out-test-baseline \
- input/regression/midi/out-test-baseline \
- input/regression/musicxml/out-test-baseline \
- input/regression/abc2ly/out-test-baseline \
- input/regression/lilypond-book/out-test-baseline
-else
-test-baseline: test-baseline-create
- $(MAKE) test-snippets-clean
-endif
-
-test-baseline-create:
+test-baseline:
@if test -d .git ; then \
- $(if $(shell git diff $(BASELINE_COMMIT)), echo "commit before base lining" && false,true) ; \
+ $(if $(shell git diff), echo "commit before base lining" && false,true) ; \
fi
$(MAKE)
$(MAKE) test
$(MAKE) out=test -C input/regression/musicxml local-test-baseline
$(MAKE) out=test -C input/regression/abc2ly local-test-baseline
$(MAKE) out=test -C input/regression/lilypond-book local-test-baseline
+ $(MAKE) test-snippets-clean
+
local-check: test
rm -rf $(RESULT_DIR)
|
| SCRIPTS:
|
+|-- config/ Autoconf helpers for configure script
|-- python/ Python modules, MIDI module
| `-- auxiliar/ Python modules for build/maintenance
|-- scripts/ End-user scripts (--> lilypond/usr/bin/)
+++ /dev/null
-Release 2.16
-************
-
-For information about the various official or semi-official positions,
-check out <URL:http://lilypond.org/authors.html>
-
-The following are registered as having authored changes to the
-repository of LilyPond since 2.14.2:
-
-Adam Spiers
-Alberto Simoes
-Aleksandr Andreev
-Anthony Fok
-Arnold Theresius
-Benkő Pál
-Bertrand Bordage
-Carl D. Sorensen
-Choan Gálvez
-Colin Campbell
-Daisuke Yamashita
-David Kastrup
-David Nalesnik
-Dénes Harmath
-Federico Bruni
-Francisco Vila
-Frédéric Bron
-Graham Breed
-Graham Percival
-Han-Wen Nienhuys
-Heikki Tauriainen
-Ian Hulin
-James Lowe
-Jan Nieuwenhuizen
-Jan-Peter Voigt
-Janek Warchoł
-Jean-Charles Malahieude
-Joe Neeman
-John Mandereau
-Joseph Wakeling
-Julien Rioux
-Karin Hoethker
-Keith OHara
-Marc Hohl
-Markus Oehme
-Matthias Kilian
-Michael Welsh Duggan
-Mike Solomon
-Neil Puttock
-Nicolas Sceaux
-Patrick McCarty
-Patrick Schmidt
-Pavel Roskin
-Peter Chubb
-Phil Holmes
-Piers Titus van der Torren
-Reinhold Kainhofer
-Rodolfo Zitellini
-Seafire
-Stefan Weil
-Sven Axelsson
-Thomas Morley
-Till Rettig
-Trevor Daniels
-Valentin Villenave
-Werner Lemberg
-Wol
-Yoshiki Sawada
-Łukasz Czerwiński
-
-
-Release 2.13
-************
-
-DEVELOPMENT TEAM
-
-Han-Wen Nienhuys - Core development
-Jan Nieuwenhuizen - Core development
-Graham Percival - Release Meister
-Valentin Villenave - LSR Editor and Bug Meister
-Mats Bengtsson - Support Guru
-John Mandereau - Translation Meister
-Trevor Daniels - Documentation Editor
-
-CONTRIBUTORS
-
-Carl Sorensen - Fret diagrams
-Jonathan Kulp - Documentation Patches
-Ralph Palmer - Documentation Indexing
-
-TRANSLATORS
-
-Francisco Vila
-Jean-Charles Malahieude
-Till Rettig
-Yoshiki Sawada
-
-FROGS
-
-Carl Sorensen - Frog meister
-Andrew Hawryluk
-Andrew Wilson
-Marek Klein
-Ian Hulin
-Frédéric Bron
-Hajo Dezelski
-Kieren MacMillan
-
-
-BUG HUNTERS/SUGGESTIONS
-
-Chris Liddell
-Chris Snyder
-David Kastrup
-Karim Haddad
-Mark Polesky
-Martin Tarenskeen
-Michael Käppler
-Nick Payne
-
-
-Release 2.12
-************
-
-
-DEVELOPMENT TEAM
-
-Han-Wen Nienhuys - Core development
-Jan Nieuwenhuizen - Core development
-Joe Neeman - Core development
-Graham Percival - Documentation Editor and Bug Meister
-Valentin Villenave - LSR Editor and Bug Meister
-Mats Bengtsson - Support Guru
-John Mandereau - Translation Meister
-
-
-CONTRIBUTORS
-
-Rune Zedeler
-Maximilian Albert
-Milan Zamazal
-Reinhold Kainhofer - musicxml2ly development
-Erlend Aasland
-Stan Sanderson - Regression Checker
-Neil Puttock
-
-
-GRAND DOCUMENTATION PROJECT
-
-Trevor Daniels - Assistant Documentation Editor
-Andrew Hawryluk - NR work
-Carl Sorensen - NR work
-Eyolf Østrem - NR work
-Francisco Vila - NR work
-Jay Hamilton - NR work
-Jonathan Kulp - NR work
-Joseph Harfouch - NR work
-Patrick McCarty - NR work
-Ralph Palmer - NR work
-Till Rettig - NR work
-Kurt Kroon - Glossary Updates, NR work
-Alard de Boer - Formatting
-Michael Rasmussen - Formatting
-Trevor Bača - Inspirational Headwords
-Reinhold Kainhofer - Technical Aid
-Neil Puttock - Snippet Editor, Technical Aid
-
-
-TRANSLATORS
-
-Clytie Siddall
-Damien Heurtebise
-Francisco Vila
-Heikki Junes
-Jean-Charles Malahieude
-John Mandereau
-Matthieu Jacquot
-Nicolas Klutchnikoff
-Till Rettig
-Valentin Villenave
-
-
-SPONSORS
-
-Mike Amundsen
-Trevor Bača
-
-
-BUG HUNTERS/SUGGESTIONS
-
-Adam James Wilson
-Alard de Boer
-Alex Rolex
-Andy Haupt
-Arvid Grøtting
-Bertalan Fodor
-Benjamin Drung
-Cameron Horsburgh
-Carl Sorensen
-Christian Hitz
-Christian Herzberg
-David Bobroff
-David Griffel
-Daniel Hulme
-Daniel Johnson
-Dominic Neumann
-Eduardo Vieira
-Frédéric Chiasson
-Georg Dummer
-Georg Romstorfer
-Gilles Thibault
-Hernán J. González
-Hu Haipeng
-Jay Anderson
-James Kilfinger
-Jean-Marie Mouchel
-Jean-Yves Baudais
-Jesús Guillermo Andrade
-Jonathan Henkelman
-Kazuhiro Suzuki
-Kevin Dalley
-Laura Conrad
-Luc Wehli
-Maarten Hijzelendoorn
-Marc Lanoiselée
-Mark Polesky
-Matthieu Jacquot
-Matthijs Frankeno
-Martijn Vromans
-Marnen Laibow-Koser
-Maximilian Albert
-Mirosław Doroszewski
-Mike Coleman
-Neil Puttock
-Nicolas Mayencourt
-Nicolas Sceaux
-Orm Finnendahl
-Peter Budny
-Phillip Kirlin
-Pierre-Emmanuel Brame
-Ralph Palmer
-Renaud Flavigny
-Rick Hansen
-Risto Vääräniemi
-Robin Bannister
-Roland Goretzki
-Rune Zedeler
-Ruud van Silfhout
-Sean Reed
-Steven Weber
-Tomas Sauer
-Thomas Scharkowski
-Trevor Bača
-Vivian Barty-Taylor
-Werner Lemberg
-Wilbert Berendsen
-William Oram
-Yota Moteuchi
-Zack Charter
-Zoltan Selyem
-
-
-
-Release 2.10
-************
-
-
-DEVELOPMENT TEAM
-
-Han-Wen Nienhuys - Core development
-Jan Nieuwenhuizen - Core development
-Graham Percival - Documentation Editor and Bug Meister
-John Mandereau - Translation Meister
-Mats Bengtsson - Support Guru
-
-
-CONTRIBUTORS
-
-Angelo Contardi
-David Feuer
-Erik Sandberg
-Erlend Aasland
-Guido Amoruso
-Heikki Junes
-Joe Neeman
-John Mandereau
-
-
-TRANSLATORS
-
-Frédéric Chiasson
-Gauvain Pocentek
-Jean-Charles Malahieude
-John Mandereau
-Ludovic Sardain
-Nicolas Grandclaude
-Valentin Villenave
-
-
-SPONSORS
-
-Andrew Sidwell
-Anthony Youngman
-Chris Sawer
-David Griffel
-Jamie Bullock
-Kieren MacMillan
-Michael Meixner
-Paul Scott
-Rick Hansen
-Steve Doonan
-Trent Johnston
-Trevor Bača
-Vivian Barty-Taylor
-William Wilson
-
-DOCUMENTATION HELPERS
-
-Cameron Horsburgh
-Dave Luttinen
-Eduardo Vieira
-Erlend Aasland
-Geoff Horton
-Juergen Reuter
-
-
-BUG HUNTERS/SUGGESTIONS
-
-Albert Frantz
-Arvid Grøtting
-Anthony Youngman
-Aurèle Duda
-Ben Hoefer
-Bernie Arai
-Cameron Horsburgh
-Charles Cave
-Christian Hitz
-Christopher Ellis
-Claude Routhier
-Colin Wilding
-Daniel Tonda Castillo
-David Rogers
-Francisco Vila
-Harald Wellmann
-Henrik Frisk
-Hernán J. González
-Johannes Schindelin
-John Williams
-J. Leung
-Karim Haddad
-Karl Hammar
-Keith Packard
-Kieren MacMillan
-Lee T. Wilkirson
-Lieke van der Meer
-Luc Wehli
-Manuzhai
-Mark Dewey
-Marcus Macauley
-Markus Schneider
-Matti Aaltonen
-Michael Meixner
-Michael Welsh Duggan
-Milan Zamazal
-Orm Finnendahl
-Paul Scott
-Phillip Kirlin
-Quentin Spencer
-Rainer Typke
-Rick Hansen
-Rutger Helmers
-Ruud van Silfhout
-Sietse Brouwer
-Stephen Carter
-Stephen Kress
-Thies Albrecht
-Toine Schreurs
-Trent Johnston
-Trevor Bača
-Trevor Daniels
-Vaclav Smilauer
-Vicente Solsona Dellá
-Victor Eijkhout
-Villum Sejersen
-Werner Lemberg
-Will Oram
-Zoltan V. Laszlo
-
-Release 2.8
-***********
-
-DEVELOPMENT TEAM
-
-Han-Wen Nienhuys - Core development
-Jan Nieuwenhuizen - Core development
-Erik Sandberg - Bug Meister
-Pedro Kroger - Build Meister
-Graham Percival - Documentation Editor
-Mats Bengtsson - Support Guru
-
-CONTRIBUTORS
-
-Erlend Aasland
-Heikki Junes
-Joe Neeman
-Johannes Schindelin
-Nicolas Sceaux
-Werner Lemberg
-Yoshinobu Ishizaki
-
-
-SPONSORS
-
-Aaron Mehl
-Basil Crow
-Bertalan Fodor
-Christian Ebert
-Henrik Frisk
-Jay Hamilton
-Jamie Bullock
-John Mandereau
-D. Josiah Boothby
-Kieren MacMillan
-Kris Shaffer
-Mark van den Borre
-Mike Rolish
-Muziekacademie Lede
-Nancho Alvarez
-Nicolas Sceaux
-Sean Reed
-Steve Doonan
-Sven Axelsson
-Trent Johnston
-Trevor Bača
-Vicente Solsona Dellá
-Yoshinobu Ishizaki
-
-
-BUG HUNTERS/SUGGESTIONS
-
-Alan Stern
-Andrea Valle
-Bertalan Fodor
-Bob Broadus
-Bruce Fairchild
-Cameron Horsburgh
-Chris Sawer
-Christian Ebert
-Christian Hitz
-Darius Blasband
-David Bobroff
-David Raleigh Arnold
-Donald Axel
-Don Blaheta
-Dunstan Vavasour
-Edward Neeman
-Eduardo Vieira
-Ernesto Gancedo
-François Vion
-Frédéric Bron
-Geoff Horton
-Gianluca D.
-Hans Forbrich
-Hoang Nguyen
-Joe Neeman
-Jordi Nadal
-Jukka Akkanen
-Kieren Richard MacMillan
-Lambros Lambrou
-Laura Conrad
-Libero Mureddu
-Marcus Macauley
-Mark Steinheuser
-Matevž Jekovec
-Michael Kiermaier
-Michael Welsh Duggan
-Milan Zamazal
-Nicolas Mayencourt
-Orm Finnendahl
-Patrick K Welton
-Paul Scott
-Ralph Little
-Richard Schoeller
-Robert Vlasaty
-Roman Kurakin
-Russell Lang
-Scott Russell
-Sean Reed
-Seng Liang
-Steve Doonan
-Steven Weber
-Sven Axelsson
-Thomas Scharkowski
-Thomas Bushnell BSG
-Toine Schreurs
-Trent Johnston
-Trevor Bača
-Vicente Solsona Dellá
-Vincenzo Colonnella
-Werner Lemberg
-Will Oram
-Wolfgang Hoffmann
-
-Release 2.6
-***********
-
-DEVELOPMENT TEAM
-
-Han-Wen Nienhuys - Core development
-Jan Nieuwenhuizen - Core development
-Erik Sandberg - Bug Meister
-Pedro Kroger - Build Meister
-Graham Percival - Documentation Editor
-
-CONTRIBUTORS
-
-Andreas Scherer
-Arno Waschk
-Bertalan Fodor
-Carl Sorensen
-Christian Hitz
-David Jedlinsky
-Erlend Aasland
-Heikki Junes
-John Williams
-Jonatan Liljedahl
-Jürgen Reuter
-Mats Bengtsson
-Matthias Neeracher
-Mathieu Giraud
-Nicolas Sceaux
-Pal Benko
-Sebastiano Vigna
-Tatsuya Ono
-Vicente Solsona Della
-Werner Lemberg
-Yuval Harel
-
-TRANSLATORS
-
-Abel Cheung
-John Mandereau
-Olcay Yıldırım
-Roland Stigge
-Steven Michael Murphy
-
-
-WEBSITE TRANSLATORS
-
-Gauvain Pocentek
-Jean-Charles Malahieude
-John Mandereau
-Tineke de Munnik
-
-
-SPONSORS
-
-Bertalan Fodor
-Chris Sawer
-Gunther Strube
-Hans Forbrich
-Jonathan Walther
-Marcus Macauley
-Steve Doonan
-
-BUG HUNTERS/SUGGESTIONS
-
-Alexandre Beneteau
-Andreas Scherer
-Anthony W. Youngman
-Antti Kaihola
-Arjan Bos
-David Bobroff
-Bernard Hurley
-Bruce Fairchild
-Bruce McIntyre
-Daniel Johnson
-David Rogers
-Dylan Nicholson
-Ed Jackson
-Erik Ronström
-Fernando Pablo Lopez-Lezcano
-Gilles Sadowski
-Pothárn Imre
-Jack O'Quin
-Jeff Smith
-Johannes Schindelin
-John Mandereau
-Jose Miguel Pasini
-Josiah Boothby
-Juergen Reuter
-Karl Hammar
-Laura Conrad
-Olivier Guéry
-Paul Scott
-Richard Schoeller
-Rob Platt
-Roman Stöckl-Schmidt
-Russ Jorgensen
-Simon Bailey
-Stephen McCarthy
-Sven Axelsson
-Tapio Tuovila
-Tom Cato Amundsen
-Tyler Eaves
-Will Oram
-Wolfgang Hoffmann
-
-
-Release 2.4
-***********
-
-DEVELOPMENT TEAM
-
-Han-Wen Nienhuys - Core development
-Jan Nieuwenhuizen - Core development
-Erik Sandberg - Bug Meister
-Pedro Kroger - Build Meister
-Graham Percival - Documentation Editor
-
-
-CONTRIBUTORS
-
-Carl Sorensen
-David Svoboda
-Guy Gascoigne-Piggford
-Heikki Junes
-Hendrik Maryns
-Kristof Bastiaensen
-Lisa Opus Goldstein
-Mats Bengtsson
-Michael Welsh Duggan
-Peter Lutek
-Werner Lemberg
-
-BUG HUNTERS/SUGGESTIONS
-
-
-Antti Kaihola
-Bertalan Fodor
-Brian Clements
-Christian Hitz
-Christoph Ludwig
-Christophe Papazian
-Daniel Berjón Díez
-Dave Phillips
-David Bobroff
-David Brandon
-Doug Asherman
-Ed Jackson
-Fernando Pablo Lopez-Lezcano
-Heinz Stolba
-Jack O'Quin
-Jefferson dos Santos Felix
-Karl Hammar
-Marco Gusy
-Martin Norbäck
-Matthias Neeracher
-Maurizio Tomasi
-Michael Kiermaier
-Pascal Legris
-Peter Rosenbeck
-Russ Ross
-Stephen Pollei
-Thomas Scharlowski
-Will Oram
-Yuval Harel
-
-
-Release 2.2
-***********
-
-HEAD HACKERS
-
-Han-Wen Nienhuys
-Jan Nieuwenhuizen
-
-CONTRIBUTORS
-
-David Bobroff
-Edward Sanford Sutton
-Heikki Junes
-Nicolas Sceaux
-
-BUG HUNTERS/SUGGESTIONS
-
-Alexandre Beneteau
-Andrew McNabb
-Atte Andre Jensen
-Bertalan Fodor
-Bruce McIntyre
-Dave Symonds
-David Bobroff
-Darius
-Delma Avers
-Doug Linhardt
-Eric Wurbel
-Erik Sandberg
-Ferenc Wagner
-Hans Forbrich
-John Williams
-José Luis Cruz
-Jürgen Reuter
-Kieren Richard MacMillan
-Laurent Martelli
-Mats Bengtsson
-Matthias Kilian
-Nancho Alvarez
-Nick Busigin
-Nicolas Sceaux
-Olivier Guéry
-Patrick Atamaniuk
-Paul Scott
-Pawel D
-Pedro Kroger
-Ray McKinney
-Reuben Thomas
-Robert Vlasaty
-Stef Epardaud
-Thomas Willhalm
-Thomas Scharkowski
-Tom Bäckström
-Werner Lemberg
-Will Oram
-
-
-Release 2.0
-***********
-
-HEAD HACKERS
-
-Han-Wen Nienhuys
-Jan Nieuwenhuizen
-
-CONTRIBUTORS
-
-Mats Bengtsson
-Heikki Junes
-Jürgen Reuter
-
-BUG HUNTERS/SUGGESTIONS
-
-Antonio Palama
-Benjamin Milde
-Daniel Berjon Diez
-David Bobroff
-David Rayleigh Arnold
-Erik Ronstroem
-Fabio dos Santos
-Fodor Bertalan
-Frederic Bron
-Graham Percival
-Ian Bailey-Mortimer
-John Williams
-Josza Marton
-Marco Caliari
-Matthieu Amiguet
-Michael Welsh Duggan
-Patrick Atamaniuk
-Paul Scott
-Pedro Kroeger
-Peter Lutek
-Richard Schoeller
-Thorkil Wolvendans
-Werner Trobin
-
-
-Release 1.8
-***********
-
-HEAD HACKERS
-
-Han-Wen Nienhuys
-Jan Nieuwenhuizen
-
-CONTRIBUTORS
-
-Graham Percival
-Heikki Junes
-Jügen Reuter
-Kim Shrier
-Rune Zedeler
-Werner Lemberg
-
-
-BUG HUNTERS
-
-Amelie Zapf
-Andrew Schaaf
-Atte Andre Jensen
-Bob Harrington
-Chris Jackson
-Chris Sawer
-David Bobroff
-Erik Sandberg
-Fernando Pablo Lopez-Lezcano
-Hans Kieserman
-Jeremie Lumbroso
-John Potelle
-John Williams
-Karl Berry
-Karl-Johan Karlsson
-Klaus Zimmermann
-Koblinger Egmont
-Paul Scott
-Pedro Kroger
-Richard Shann
-Roland Stigge
-Ryan O'Neil
-Simon Bailey
-Simon Weatherill
-Stanislav Brabec
-Thomas Rijniers
-Werner Lemberg
-Yotam Medini
-
-
-#Local variables:
-#coding: utf-8
-#End:
-
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
-MINOR_VERSION=16
-PATCH_LEVEL=1
+MINOR_VERSION=17
+PATCH_LEVEL=9
MY_PATCH_LEVEL=
-VERSION_STABLE=2.16.0
-VERSION_DEVEL=2.17.4
+VERSION_STABLE=2.16.1
+VERSION_DEVEL=2.17.8
--- /dev/null
+dnl aclocal.m4 -*-shell-script-*-
+dnl StepMake subroutines for configure.in
+
+
+### mostly interal macros
+
+# Get full path of executable ($1)
+AC_DEFUN(STEPMAKE_GET_EXECUTABLE, [
+ ## which doesn't work in ash, if /usr/bin/which isn't installed
+ ## type -p doesn't work in ash
+ ## command -v doesn't work in zsh
+ ## command -v "$1" 2>&1
+ ## this test should work in ash, bash, pdksh (ksh), zsh
+ type -p $1 2>/dev/null | tail -n 1 | awk '{print $NF}'
+])
+
+
+# Get version string from executable ($1)
+AC_DEFUN(STEPMAKE_GET_VERSION, [
+ ## "$1" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
+ ##
+ ## ARG.
+ ## Workaround for broken Debian gcc version string:
+ ## gcc (GCC) 3.1.1 20020606 (Debian prerelease)
+ ##
+ ## -V: Workaround for python
+
+ changequote(<<, >>)#dnl
+
+ ## Assume and hunt for dotted version multiplet.
+ ## use eval trickery, because we cannot use multi-level $() instead of ``
+ ## for compatibility reasons.
+
+ ## grab the first version number in --version output.
+ eval _ver=\"\`("$1" --version || "$1" -V) 2>&1 |
+ grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+ head -n 1 |
+ tr ' ' '\n' |
+ sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' |
+ grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+ head -n 1\`\"
+
+ if test -z "$_ver"; then
+ ## If empty, try date [fontforge]
+ eval _ver=\"\`("$1" --version || "$1" -V) 2>&1 | grep '[0-9]\{6,8\}' \
+ | head -n 1 \
+ | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\"
+ fi
+ echo "$_ver"
+ changequote([, ])#dnl
+])
+
+# Calculate simplistic numeric version from version string ($1)
+# As yet, we have no need for something more elaborate.
+AC_DEFUN(STEPMAKE_NUMERIC_VERSION, [
+ echo "$1" | awk -F. '
+ {
+ if ([$]3) {three = [$]3}
+ else {three = 0}
+ }
+ {printf "%.0f\n", [$]1*1000000 + [$]2*1000 + three}'
+])
+
+
+# Add item ($2) to list ($1, one of 'OPTIONAL', 'REQUIRED')
+AC_DEFUN(STEPMAKE_ADD_ENTRY, [
+ eval "$1"=\"`eval echo \"'$'$1\" \"$2\"`\"
+])
+
+# Check if tested program ($2) was found ($1).
+# If not, add entry to missing-list ($3, one of 'OPTIONAL', 'REQUIRED').
+# We could abort here if a 'REQUIRED' program is not found
+AC_DEFUN(STEPMAKE_OPTIONAL_REQUIRED, [
+ STEPMAKE_CHECK_SEARCH_RESULT($1)
+ if test $? -ne 0; then
+ STEPMAKE_ADD_ENTRY($3, $2)
+ if test "$3" = "REQUIRED"; then
+ command="echo ERROR: $2 not found"
+ # abort configure process here?
+ else
+ command="- echo $2 not found"
+ fi
+ eval "$1"='$command'
+ false
+ else
+ true
+ fi
+])
+
+
+# Return if tested proram ($1) was found (true) or not (false).
+AC_DEFUN(STEPMAKE_CHECK_SEARCH_RESULT, [
+ r="`eval echo '$'"$1"`"
+ if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"$1"`' : '.*\(echo\)' > /dev/null; then
+ true
+ else
+ ##STEPMAKE_WARN(cannot find $2. $3)
+ false
+ fi
+])
+
+
+# Check version of program ($1)
+# If version ($4: optional argument, supply if version cannot be
+# parsed using --version or -V ) is smaller than requested ($3), add
+# entry to missing-list ($2, one of 'OPTIONAL', 'REQUIRED').
+AC_DEFUN(STEPMAKE_CHECK_VERSION, [
+ r="`eval echo '$'"$1"`"
+ AC_MSG_CHECKING([$r version])
+ exe=`STEPMAKE_GET_EXECUTABLE($r)`
+ if test -n "$4"; then
+ ver="$4"
+ else
+ ver=`STEPMAKE_GET_VERSION($exe)`
+ fi
+ num=`STEPMAKE_NUMERIC_VERSION($ver)`
+ req=`STEPMAKE_NUMERIC_VERSION($3)`
+ AC_MSG_RESULT([$ver])
+ if test "$num" -lt "$req"; then
+ STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
+ fi
+ vervar="`echo $1 | tr '[a-z]' '[A-Z]'`_VERSION"
+ eval `echo $vervar=$num`
+## AC_SUBST(`eval echo $vervar`)
+])
+
+# Check version of program ($1)
+# If version is greater than or equals unsupported ($3),
+# add entry to unsupported list ($2, 'UNSUPPORTED')
+AC_DEFUN(STEPMAKE_CHECK_VERSION_UNSUPPORTED, [
+ r="`eval echo '$'"$1"`"
+ AC_MSG_CHECKING([$r version])
+ exe=`STEPMAKE_GET_EXECUTABLE($r)`
+ ver=`STEPMAKE_GET_VERSION($exe)`
+ num=`STEPMAKE_NUMERIC_VERSION($ver)`
+ sup=`STEPMAKE_NUMERIC_VERSION($3)`
+ AC_MSG_RESULT([$ver])
+ if test "$num" -ge "$sup"; then
+ STEPMAKE_ADD_ENTRY($2, ["$r < $3 (installed: $ver)"])
+ fi
+])
+
+### Macros to build configure.in
+
+
+AC_DEFUN(STEPMAKE_BIBTEX2HTML, [
+ STEPMAKE_PROGS(BIBTEX2HTML, bibtex2html bib2html, $1)
+ if test "$BIBTEX2HTML" = "bib2html"; then
+ BIBTEX2HTML_FLAGS='$< $(@)'
+ else
+ BIBTEX2HTML_FLAGS='-o $(@D)/$(*F) $<'
+ fi
+ AC_SUBST(BIBTEX2HTML)
+ AC_SUBST(BIBTEX2HTML_FLAGS)
+])
+
+
+AC_DEFUN(STEPMAKE_BISON, [
+ # ugh, automake: we want (and check for) bison
+ AC_PROG_YACC
+
+ STEPMAKE_PROGS(BISON, bison, $1)
+
+ # urg. should test functionality rather than version.
+ if test "$BISON" = "bison" -a -n "$2"; then
+ STEPMAKE_CHECK_VERSION(BISON, $1, $2)
+ fi
+])
+
+AC_DEFUN(STEPMAKE_COMPILE_BEFORE, [
+ # -O is necessary to get inlining
+ CFLAGS=${CFLAGS-""}
+ CXXFLAGS=${CXXFLAGS-$CFLAGS}
+ LDFLAGS=${LDFLAGS-""}
+ optimise_b=yes
+ profile_b=no
+ debug_b=yes
+ pipe_b=yes
+
+ AC_ARG_ENABLE(debugging,
+ [AS_HELP_STRING([--enable-debugging],
+ [compile with debugging info. Default: on])],
+ [debug_b=$enableval])
+
+ AC_ARG_ENABLE(optimising,
+ [AS_HELP_STRING([--enable-optimising],
+ [compile with optimising. Default: on])],
+ [optimise_b=$enableval])
+
+ AC_ARG_ENABLE(profiling,
+ [AS_HELP_STRING([--enable-profiling],
+ [compile with gprof support. Default: off])],
+ [profile_b=$enableval])
+
+ AC_ARG_ENABLE(pipe,
+ [AS_HELP_STRING([--enable-pipe],
+ [compile with -pipe. Default: on])],
+ [pipe_b=$enableval])
+
+ if test "$optimise_b" = yes; then
+ AC_DEFINE(NDEBUG)
+ DEFINES="$DEFINES -DNDEBUG"
+ OPTIMIZE=" -O2 -finline-functions"
+ fi
+
+ if test $profile_b = yes; then
+ EXTRA_LIBS="-pg"
+ OPTIMIZE="$OPTIMIZE -pg"
+ fi
+
+ if test $debug_b = yes; then
+ OPTIMIZE="$OPTIMIZE -g"
+ fi
+])
+
+AC_DEFUN(STEPMAKE_COMPILE, [
+
+ AC_REQUIRE([STEPMAKE_COMPILE_BEFORE])
+ AC_REQUIRE([AC_PROG_CC])
+
+ STEPMAKE_OPTIONAL_REQUIRED(CC, cc, $1)
+ LD='$(CC)'
+ AC_SUBST(LD)
+
+ # If -pipe requested, test if it works and add to CFLAGS.
+ if test "$pipe_b" = yes; then
+ save_cflags="$CFLAGS"
+ CFLAGS=" -pipe $CFLAGS";
+ AC_CACHE_CHECK([whether compiler understands -pipe],
+ [stepmake_cv_cflags_pipe],
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[/* -pipe test */]])],
+ [stepmake_cv_cflags_pipe=yes],
+ [stepmake_cv_cflags_pipe=no]))
+ CFLAGS=$save_cflags
+ if test $stepmake_cv_cflags_pipe = yes; then
+ OPTIMIZE="$OPTIMIZE -pipe"
+ fi
+ fi
+
+ CFLAGS="$CFLAGS $OPTIMIZE"
+ CPPFLAGS=${CPPFLAGS-""}
+
+ AC_MSG_CHECKING([for IEEE-conformance compiler flags])
+ save_cflags="$CFLAGS"
+ case "$host" in
+ alpha*-*-*)
+ dnl should do compile test?
+ AC_MSG_RESULT(-mieee)
+ CFLAGS=" -mieee $CFLAGS"
+ ;;
+ *)
+ AC_MSG_RESULT([none])
+ ;;
+ esac
+
+ AC_SUBST(cross_compiling)
+ AC_SUBST(CFLAGS)
+ AC_SUBST(CPPFLAGS)
+ AC_SUBST(LDFLAGS)
+ AC_SUBST(DEFINES)
+ AC_SUBST(EXTRA_LIBS)
+])
+
+AC_DEFUN(STEPMAKE_CXX, [
+ AC_PROG_CXX
+ STEPMAKE_OPTIONAL_REQUIRED(CXX, c++, $1)
+
+ CXXFLAGS="$CXXFLAGS $OPTIMIZE"
+ LD='$(CXX)'
+
+ AC_SUBST(CXX)
+ AC_SUBST(CXXFLAGS)
+ AC_SUBST(LD)
+])
+
+
+AC_DEFUN(STEPMAKE_CXXTEMPLATE, [
+ AC_CACHE_CHECK([whether explicit instantiation is needed],
+ stepmake_cv_need_explicit_instantiation,
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ template <class T> struct foo { static int baz; };
+ template <class T> int foo<T>::baz = 1;
+ ]], [[ return foo<int>::baz; ]])],[stepmake_cv_need_explicit_instantiation=no],[stepmake_cv_need_explicit_instantiation=yes]))
+ if test x"$stepmake_cv_need_explicit_instantiation"x = x"yes"x; then
+ AC_DEFINE(NEED_EXPLICIT_INSTANTIATION)
+ fi
+])
+
+AC_DEFUN(STEPMAKE_GXXCODEGENBUG, [
+ AC_MSG_CHECKING([options for known g++ bugs])
+ case "$GXX:$CXX_VERSION" in
+ yes:400600[[0-2]])
+ AC_MSG_RESULT([-fno-optimize-sibling-calls (tail call bug)])
+ CXXFLAGS="$CXXFLAGS -fno-optimize-sibling-calls"
+ ;;
+ yes:400700?)
+ AC_MSG_RESULT([-fno-tree-vrp (comparison bug)])
+ CXXFLAGS="$CXXFLAGS -fno-tree-vrp"
+ ;;
+ *) AC_MSG_RESULT([none])
+ esac
+ AC_SUBST(CXXFLAGS)
+])
+
+
+AC_DEFUN(STEPMAKE_DATADIR, [
+ if test "$datadir" = "\${prefix}/share"; then
+ datadir='${prefix}/share'
+ fi
+ presome=${prefix}
+ if test "$prefix" = "NONE"; then
+ presome=${ac_default_prefix}
+ fi
+
+ build_package_datadir=$ugh_ugh_autoconf250_builddir/out$CONFIGSUFFIX/share/$package
+
+ DATADIR=`echo ${datadir} | sed "s!\\\${datarootdir}!${prefix}/share!"`
+ DATADIR=`echo ${DATADIR} | sed "s!\\\${prefix}!$presome!"`
+ BUILD_PACKAGE_DATADIR=`echo ${build_package_datadir} | sed "s!\\\${prefix}!$presome!"`
+
+ AC_SUBST(datadir)
+ AC_SUBST(datarootdir)
+ AC_SUBST(build_package_datadir)
+ AC_DEFINE_UNQUOTED(DATADIR, ["${DATADIR}"])
+ AC_DEFINE_UNQUOTED(BUILD_PACKAGE_DATADIR, ["${BUILD_PACKAGE_DATADIR}"])
+])
+
+## ugh: cut & paste programming from datadir.
+AC_DEFUN(STEPMAKE_LIBDIR, [
+
+ if test "$libdir" = "\${exec_prefix}/lib"; then
+ libdir='${exec_prefix}/lib'
+ fi
+ presome=$exec_prefix
+ build_package_libdir=$ugh_ugh_autoconf250_builddir/out$CONFIGSUFFIX/lib/$package
+
+ LIBDIR=`echo ${libdir} | sed "s!\\\${exec_prefix}!$presome!"`
+ BUILD_PACKAGE_LIBDIR=`echo ${build_package_libdir} | sed "s!\\\${exec_prefix}!$presome!"`
+
+ AC_SUBST(libdir)
+ AC_SUBST(build_package_libdir)
+ AC_DEFINE_UNQUOTED(LIBDIR, ["${LIBDIR}"])
+ AC_DEFINE_UNQUOTED(BUILD_PACKAGE_LIBDIR, ["${BUILD_PACKAGE_LIBDIR}"])
+])
+
+
+AC_DEFUN(STEPMAKE_PREFIX_EXPAND_FIXUP, [
+ # undo expanding of explicit --infodir=/usr/share
+ # to ease install-time override with prefix=...
+ strip=`echo $includedir | eval sed s@^$prefix@@`
+ if test "$includedir" = "`eval echo $prefix$strip`"; then
+ includedir='${prefix}'$strip''
+ fi
+ strip=`echo $libdir | eval sed s@^$exec_prefix@@`
+ if test "$libdir" = "`eval echo $exec_prefix$strip`"; then
+ libdir='${exec_prefix}'$strip''
+ fi
+ strip=`echo $infodir | eval sed s@^$datarootdir@@`
+ if test "$infodir" = "`eval echo $datarootdir$strip`"; then
+ infodir='${datarootdir}'$strip''
+ fi
+ strip=`echo $mandir | eval sed s@^$datarootdir@@`
+ if test "$mandir" = "`eval echo $datarootdir$strip`"; then
+ mandir='${datarootdir}'$strip''
+ fi
+])
+
+
+AC_DEFUN(STEPMAKE_END, [
+ STEPMAKE_PREFIX_EXPAND_FIXUP
+
+ AC_SUBST(OPTIONAL)
+ AC_SUBST(REQUIRED)
+
+ AC_CONFIG_FILES([$CONFIGFILE.make:config.make.in])
+ AC_OUTPUT
+
+ if test -n "$OPTIONAL"; then
+ echo
+ echo "WARNING: Please consider installing optional programs or files: $OPTIONAL"
+ fi
+
+ if test -n "$REQUIRED"; then
+ echo
+ echo "ERROR: Please install required programs: $REQUIRED"
+ fi
+
+ if test -n "$UNSUPPORTED"; then
+ echo
+ echo "ERROR: Please use older version of programs: $UNSUPPORTED"
+ fi
+
+ if test -n "$OPTIONAL$REQUIRED$UNSUPPORTED"; then
+ echo
+ echo "See INSTALL.txt for more information on how to build $PACKAGE_NAME"
+ if test -f config.cache ; then
+ echo "Remove config.cache before rerunning ./configure"
+ fi
+ fi
+
+ if test -n "$REQUIRED$UNSUPPORTED"; then
+ rm -f $srcdir/GNUmakefile
+ exit 1
+ fi
+
+ # regular in-place build
+ # test for srcdir_build = yes ?
+ if test "$srcdir_build" = "yes"; then
+ rm -f $srcdir/GNUmakefile
+ cp $srcdir/GNUmakefile.in $srcdir/GNUmakefile
+ chmod 444 $srcdir/GNUmakefile
+ else
+ if test -f $srcdir/GNUmakefile; then
+ cat <<EOF
+Source directory already configured. Please clean the source directory
+
+ make -C $srcdir distclean
+
+and rerun configure.
+EOF
+ exit 2
+ fi
+
+ abssrcdir="`cd $srcdir; pwd`"
+ absbuilddir="`pwd`"
+ for d in 2 3 4 5 ; do
+ for mf in `cd $srcdir ; find . -maxdepth $d -mindepth $d -name GNUmakefile`; do
+ case "$abssrcdir" in
+ "$absbuilddir"/*)
+# source is below build directory, always copy
+ ;;
+ *)
+ case "$abssrcdir/${mf#./}" in
+ "$absbuilddir"/*)
+# find descended into build directory, don't copy
+ continue
+ esac
+ esac
+ mkdir -p ${mf%/*}
+ cat <<EOF | $PYTHON - > $mf
+print 'depth=' + ('../' * ( $d-1 ) )
+print 'include \$(depth)/config\$(if \$(conf),-\$(conf),).make'
+print 'include \$(configure-srcdir)/$mf'
+print 'MODULE_INCLUDES += \$(src-dir)/\$(outbase)'
+EOF
+ done
+ for mf in `cd $srcdir ; find . -maxdepth $d -mindepth $d -name '*.make' | grep -v config.make `; do
+ case "$abssrcdir" in
+ "$absbuilddir"/*)
+# source is below build directory, always copy
+ ;;
+ *)
+ case "$abssrcdir/${mf#./}" in
+ "$absbuilddir"/*)
+# find descended into build directory, don't copy
+ continue
+ esac
+ esac
+ mkdir -p ${mf%/*}
+ cat <<EOF | $PYTHON - > $mf
+print 'include \$(depth)/config\$(if \$(conf),-\$(conf),).make'
+print 'include \$(configure-srcdir)/$mf'
+EOF
+ done
+ done
+
+ rm -f GNUmakefile
+ cat <<EOF > GNUmakefile
+depth = .
+include config\$(if \$(conf),-\$(conf),).make
+include \$(configure-srcdir)/GNUmakefile.in
+EOF
+ chmod 444 GNUmakefile
+ AC_SUBST(VPATH)
+ fi
+])
+
+
+AC_DEFUN(STEPMAKE_FLEX, [
+ # ugh, automake: we want (and check for) flex
+ # AC_PROG_LEX
+ # urg: automake 1.3: hope this doesn't break 1.2 ac_cv_pro_lex_root hack...
+
+ # AC_PROG_LEX()
+ # ugh, ugh
+ ac_cv_prog_lex_root=lex.yy
+ STEPMAKE_PROGS(FLEX, flex, $1)
+])
+
+
+AC_DEFUN(STEPMAKE_FLEXLEXER, [
+ AC_CHECK_HEADERS([FlexLexer.h],[true],[false])
+ if test $? -ne 0; then
+ warn='FlexLexer.h (flex package)'
+ STEPMAKE_ADD_ENTRY($1, $warn)
+ fi
+ # check for yyFlexLexer.yy_current_buffer,
+ # in 2.5.4 <= flex < 2.5.29
+ AC_CACHE_CHECK([for yyFlexLexer.yy_current_buffer],
+ [stepmake_cv_flexlexer_yy_current_buffer],
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+using namespace std;
+#include <FlexLexer.h>
+class yy_flex_lexer: public yyFlexLexer
+{
+ public:
+ yy_flex_lexer ()
+ {
+ yy_current_buffer = 0;
+ }
+};
+]])],
+ [stepmake_cv_flexlexer_yy_current_buffer=yes],
+ [stepmake_cv_flexlexer_yy_current_buffer=no]))
+ if test $stepmake_cv_flexlexer_yy_current_buffer = yes; then
+ AC_DEFINE(HAVE_FLEXLEXER_YY_CURRENT_BUFFER, 1, [Define to 1 if yyFlexLexer has yy_current_buffer.])
+ fi
+])
+
+
+
+AC_DEFUN(STEPMAKE_FLEXLEXER_LOCATION, [
+ AC_MSG_CHECKING([FlexLexer.h location])
+
+ # ugh.
+ cat <<EOF > conftest.cc
+using namespace std;
+#include <FlexLexer.h>
+EOF
+ FLEXLEXER_FILE=`eval $ac_cpp conftest.cc | \
+ sed 's!# 1 "\(.*FlexLexer.h\)"!@FLEXLEXER@\1@@!g' | grep '@@' | \
+ sed 's!.*@FLEXLEXER@\(.*\)@@.*$!\1!g' ` 1> /dev/null 2> /dev/null
+ rm conftest.cc
+ AC_SUBST(FLEXLEXER_FILE)
+ AC_MSG_RESULT($FLEXLEXER_FILE)
+])
+
+AC_DEFUN(STEPMAKE_GCC_OR_CLANG, [
+ STEPMAKE_HAS_CLANG()
+ if test "$HAS_CLANG" = "no"; then
+ if test "$GCC" = "yes"; then
+ STEPMAKE_CHECK_VERSION(CC, $1, $2)
+ else
+ warn="$CC (Please install *GNU* cc)"
+ STEPMAKE_ADD_ENTRY($1, $warn)
+ fi
+ fi
+ # no else, we're fine with any clang
+])
+
+AC_DEFUN(STEPMAKE_GETTEXT, [
+ presome=${prefix}
+ if test "$prefix" = "NONE"; then
+ presome=${ac_default_prefix}
+ fi
+ LOCALEDIR=`echo ${localedir} | sed "s!\\\${prefix}!$presome!"`
+
+ AC_SUBST(localedir)
+ AC_DEFINE_UNQUOTED(LOCALEDIR, ["${LOCALEDIR}"])
+ AC_CHECK_LIB(intl, gettext)
+ AC_CHECK_FUNCS(gettext)
+])
+
+
+AC_DEFUN(STEPMAKE_GUILE, [
+ STEPMAKE_PATH_PROG(GUILE, guile guile1, $1)
+])
+
+
+# STEPMAKE_GUILE_FLAGS --- set flags for compiling and linking with Guile
+#
+# This macro runs the guile-config script, installed with Guile,
+# to find out where Guile's header files and libraries are
+# installed. It sets two variables, marked for substitution, as
+# by AC_SUBST.
+#
+# GUILE_CFLAGS --- flags to pass to a C or C++ compiler to build
+# code that uses Guile header files. This is almost
+# always just a -I flag.
+#
+# GUILE_LDFLAGS --- flags to pass to the linker to link a
+# program against Guile. This includes -lguile for
+# the Guile library itself, any libraries that Guile
+# itself requires (like -lqthreads), and so on. It may
+# also include a -L flag to tell the compiler where to
+# find the libraries.
+
+AC_DEFUN([STEPMAKE_GUILE_FLAGS], [
+ exe=`STEPMAKE_GET_EXECUTABLE($guile_config)`
+ if test -x $exe; then
+ AC_MSG_CHECKING([guile compile flags])
+ GUILE_CFLAGS="`$guile_config compile`"
+ AC_MSG_RESULT($GUILE_CFLAGS)
+ AC_MSG_CHECKING([guile link flags])
+ GUILE_LDFLAGS="`$guile_config link`"
+ AC_MSG_RESULT($GUILE_LDFLAGS)
+ fi
+ AC_SUBST(GUILE_CFLAGS)
+ AC_SUBST(GUILE_LDFLAGS)
+])
+
+
+AC_DEFUN(STEPMAKE_GUILE_DEVEL, [
+ ## First, let's just see if we can find Guile at all.
+ test -n "$target_alias" && target_guile_config=$target_alias-guile-config
+ test -n "$host_alias" && host_guile_config=$host_alias-guile-config
+ AC_MSG_CHECKING([for guile-config])
+ for guile_config in $GUILE_CONFIG $target_guile_config $host_guile_config $build_guile_config guile-config guile1-config; do
+ AC_MSG_RESULT([$guile_config])
+ if ! $guile_config --version > /dev/null 2>&1 ; then
+ AC_MSG_WARN([cannot execute $guile_config])
+ AC_MSG_CHECKING([if we are cross compiling])
+ GUILE_CONFIG='echo no guile-config'
+ else
+ GUILE_CONFIG=$guile_config
+ break
+ fi
+ done
+ STEPMAKE_OPTIONAL_REQUIRED(GUILE_CONFIG, $guile_config, $1)
+ if test $? -ne 0; then
+ STEPMAKE_ADD_ENTRY($1, 'guile-config (guile-devel, guile-dev or libguile-dev package) or guile1-config (guile1-devel package)')
+ fi
+
+ STEPMAKE_CHECK_SEARCH_RESULT(GUILE_CONFIG)
+ # urg. should test functionality rather than version.
+ if test $? -eq 0 -a -n "$2"; then
+ STEPMAKE_CHECK_VERSION(GUILE_CONFIG, $1, $2)
+ fi
+
+ AC_SUBST(GUILE_CONFIG)
+
+ guile_version="$ver"
+ changequote(<<, >>)#dnl
+ GUILE_MAJOR_VERSION=`expr $guile_version : '\([0-9]*\)'`
+ GUILE_MINOR_VERSION=`expr $guile_version : '[0-9]*\.\([0-9]*\)'`
+ GUILE_PATCH_LEVEL=`expr $guile_version : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
+ changequote([, ])#dnl
+ STEPMAKE_GUILE_FLAGS
+ save_CPPFLAGS="$CPPFLAGS"
+ save_LIBS="$LIBS"
+ CPPFLAGS="$GUILE_CFLAGS $CPPFLAGS"
+ LIBS="$GUILE_LDFLAGS $LIBS"
+ AC_CHECK_HEADERS([libguile.h])
+ AC_CHECK_LIB(guile, scm_boot_guile)
+ AC_CHECK_FUNCS(scm_boot_guile,,libguile_b=no)
+ if test "$libguile_b" = "no"; then
+ warn='libguile (libguile-dev, guile-devel or guile-dev
+ package).'
+ STEPMAKE_ADD_ENTRY(REQUIRED, $warn)
+ fi
+ CPPFLAGS="$save_CPPFLAGS"
+ LIBS="$save_LIBS"
+ AC_DEFINE_UNQUOTED(GUILE_MAJOR_VERSION, $GUILE_MAJOR_VERSION)
+ AC_DEFINE_UNQUOTED(GUILE_MINOR_VERSION, $GUILE_MINOR_VERSION)
+ AC_DEFINE_UNQUOTED(GUILE_PATCH_LEVEL, $GUILE_PATCH_LEVEL)
+])
+
+
+AC_DEFUN(STEPMAKE_DLOPEN, [
+ AC_CHECK_LIB(dl, dlopen)
+ AC_CHECK_FUNCS(dlopen)
+])
+
+AC_DEFUN(STEPMAKE_HAS_CLANG, [
+ AC_EGREP_CPP(yes,
+ [#ifdef __clang__
+ yes
+ #endif
+ ], HAS_CLANG=yes, HAS_CLANG=no)
+])
+
+AC_DEFUN(STEPMAKE_GXX_OR_CLANG, [
+ STEPMAKE_HAS_CLANG()
+ if test "$HAS_CLANG" = "no"; then
+ if test "$GXX" = "yes"; then
+ STEPMAKE_CHECK_VERSION(CXX, $1, $2)
+ else
+ warn="$CXX (Please install *GNU* c++)"
+ STEPMAKE_ADD_ENTRY($1, $warn)
+ fi
+ fi
+ # no else, we're fine with any clang
+])
+
+
+AC_DEFUN(STEPMAKE_INIT, [
+
+ . $srcdir/VERSION
+ FULL_VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL
+ MICRO_VERSION=$PATCH_LEVEL
+ TOPLEVEL_VERSION=$FULL_VERSION
+ if test x$MY_PATCH_LEVEL != x; then
+ FULL_VERSION=$FULL_VERSION.$MY_PATCH_LEVEL
+ fi
+ VERSION=$FULL_VERSION
+ export MAJOR_VERSION MINOR_VERSION PATCH_LEVEL
+ # urg: don't "fix" this: irix doesn't know about [:lower:] and [:upper:]
+ changequote(<<, >>)#dnl
+ PACKAGE=`echo $PACKAGE_NAME | tr '[a-z]' '[A-Z]'`
+ package=`echo $PACKAGE_NAME | tr '[A-Z]' '[a-z]'`
+ changequote([, ])#dnl
+
+ # No versioning on directory names of sub-packages
+ # urg, urg
+ stepmake=${datadir}/stepmake
+ presome=${prefix}
+ if test "$prefix" = "NONE"; then
+ presome=${ac_default_prefix}
+ fi
+ stepmake=`echo ${stepmake} | sed "s!\\\${prefix}!$presome!"`
+
+ # urg, how is this supposed to work?
+ if test "$program_prefix" = "NONE"; then
+ program_prefix=
+ fi
+ if test "$program_suffix" = "NONE"; then
+ program_suffix=
+ fi
+
+ AC_MSG_CHECKING(Package)
+ if test "$PACKAGE" = "STEPMAKE"; then
+ AC_MSG_RESULT(Stepmake package!)
+
+ AC_MSG_CHECKING(builddir)
+
+ ugh_ugh_autoconf250_builddir="`pwd`"
+
+ if test "$srcdir" = "."; then
+ srcdir_build=yes
+ else
+ srcdir_build=no
+ package_builddir="`dirname $ugh_ugh_autoconf250_builddir`"
+ package_srcdir="`dirname $srcdir`"
+ fi
+ AC_MSG_RESULT($ugh_ugh_autoconf250_builddir)
+
+ (cd stepmake 2>/dev/null || mkdir stepmake)
+ (cd stepmake; rm -f bin; ln -s ../$srcdir/bin .)
+ stepmake=stepmake
+ else
+ AC_MSG_RESULT($PACKAGE)
+
+ AC_MSG_CHECKING(builddir)
+ ugh_ugh_autoconf250_builddir="`pwd`"
+
+ here_dir=$(cd . && pwd)
+ full_src_dir=$(cd $srcdir && pwd)
+
+ if test "$full_src_dir" = "$here_dir"; then
+ srcdir_build=yes
+ else
+ srcdir_build=no
+ fi
+ AC_MSG_RESULT($ugh_ugh_autoconf250_builddir)
+
+ AC_MSG_CHECKING(for stepmake)
+ # Check for installed stepmake
+ if test -d $stepmake; then
+ AC_MSG_RESULT($stepmake)
+ else
+ stepmake="`cd $srcdir/stepmake; pwd`"
+ AC_MSG_RESULT([$srcdir/stepmake ($datadir/stepmake not found)])
+ fi
+ fi
+
+ AC_SUBST(ugh_ugh_autoconf250_builddir)
+
+ # Use absolute directory for non-srcdir builds, so that build
+ # dir can be moved.
+ if test "$srcdir_build" = "no" ; then
+ srcdir="`cd $srcdir; pwd`"
+ fi
+
+ AC_SUBST(srcdir)
+ AC_SUBST(stepmake)
+ AC_SUBST(package)
+ AC_SUBST(PACKAGE)
+ AC_SUBST(PACKAGE_NAME)
+ AC_SUBST(VERSION)
+ AC_SUBST(MAJOR_VERSION)
+ AC_SUBST(MINOR_VERSION)
+ AC_SUBST(MICRO_VERSION)
+
+ # stepmake nonstandard names
+ AC_SUBST(PATCH_LEVEL)
+ AC_SUBST(TOPLEVEL_VERSION)
+
+ # We don't need the upper case variant,
+ # so stick to macros are uppercase convention.
+ # AC_DEFINE_UNQUOTED(package, ["${package}"])
+ # AC_DEFINE_UNQUOTED(PACKAGE, ["${PACKAGE}"])
+ AC_DEFINE_UNQUOTED(PACKAGE, ["${package}"])
+ AC_DEFINE_UNQUOTED(PACKAGE_NAME, ["${PACKAGE_NAME}"])
+ AC_DEFINE_UNQUOTED(TOPLEVEL_VERSION, ["${FULL_VERSION}"])
+
+ if test -z "$package_depth"; then
+ package_depth="."
+ else
+ package_depth="../$package_depth"
+ fi
+ export package_depth
+ AC_SUBST(package_depth)
+
+ AUTOGENERATE="This file was automatically generated by configure"
+ AC_SUBST(AUTOGENERATE)
+
+ CONFIGSUFFIX=
+ AC_ARG_ENABLE(config,
+ [AS_HELP_STRING([--enable-config=CONF],
+ [put settings in config-CONF.make and config-CONF.h;
+ do `make conf=CONF' to get output in ./out-CONF])],
+ [CONFIGURATION=$enableval])
+
+ ##'`#
+
+ test -n "$CONFIGURATION" && CONFIGSUFFIX="-$CONFIGURATION"
+ CONFIGFILE=config$CONFIGSUFFIX
+ AC_SUBST(CONFIGSUFFIX)
+
+ AC_CANONICAL_HOST
+ STEPMAKE_PROGS(MAKE, gmake make, REQUIRED)
+ STEPMAKE_PROGS(FIND, find, REQUIRED)
+
+ STEPMAKE_PROGS(TAR, tar, REQUIRED)
+
+ if test "$(echo 2)" != "2" ||
+ test "x`uname`" = "xHP-UX"; then
+ AC_PATH_PROG(KSH, ksh, /bin/ksh)
+ AC_PATH_PROG(BASH, bash, $KSH)
+ STEPMAKE_WARN(avoiding buggy /bin/sh)
+ AC_PATH_PROG(SHELL, bash, $KSH)
+ else
+ SHELL=/bin/sh
+ AC_PATH_PROG(BASH, bash, $SHELL)
+ fi
+ AC_SUBST(SHELL)
+
+ STEPMAKE_PYTHON(REQUIRED, 1.5)
+
+ if expr "$MAKE" : '.*\(echo\)' >/dev/null; then
+ $MAKE -v 2> /dev/null | grep GNU > /dev/null
+ if test "$?" = 1; then
+ warn='make (Please install *GNU* make)'
+ # STEPMAKE_WARN($warn)
+ STEPMAKE_ADD_ENTRY(REQUIRED, $warn)
+ fi
+ fi
+
+ ROOTSEP=':'
+ DIRSEP='/'
+ PATHSEP=':'
+ LN=ln
+ LN_S='ln -s'
+ ZIP="zip -r -9"
+
+ AC_SUBST(program_prefix)
+ AC_SUBST(program_suffix)
+ AC_SUBST(ZIP)
+ AC_SUBST(LN)
+ AC_SUBST(LN_S)
+ AC_DEFINE_UNQUOTED(DIRSEP, ['${DIRSEP}'])
+ AC_DEFINE_UNQUOTED(PATHSEP, ['${PATHSEP}'])
+ AC_SUBST(DIRSEP)
+ AC_SUBST(PATHSEP)
+ AC_SUBST(ROOTSEP)
+
+ STEPMAKE_DATADIR
+ STEPMAKE_LIBDIR
+])
+
+
+AC_DEFUN(STEPMAKE_LIB, [
+ STEPMAKE_PROGS(AR, ar, $1)
+ AC_PROG_RANLIB
+ STEPMAKE_OPTIONAL_REQUIRED(RANLIB, ranlib, $1)
+])
+
+
+AC_DEFUN(STEPMAKE_LIBTOOL, [
+ # libtool.info ...
+ # **Never** try to set library version numbers so that they correspond
+ # to the release number of your package. This is an abuse that only
+ # fosters misunderstanding of the purpose of library versions.
+
+ REVISION=$PATCH_LEVEL
+ # CURRENT=$MINOR_VERSION
+ CURRENT=`expr $MINOR_VERSION + 1`
+ # AGE=`expr $MAJOR_VERSION + 1`
+ AGE=$MAJOR_VERSION
+ AC_SUBST(CURRENT)
+ AC_SUBST(REVISION)
+ AC_SUBST(AGE)
+])
+
+
+AC_DEFUN(STEPMAKE_LOCALE, [
+ lang=English
+ ALL_LINGUAS="en nl"
+
+ # with/enable ??
+ AC_ARG_WITH(localedir,
+ [AS_HELP_STRING([--with-localedir=DIR],
+ [location of locales. Default: PREFIX/share/locale])],
+ localedir=$with_localedir,
+ localedir='${prefix}/share/locale')
+
+ AC_ARG_WITH(lang,
+ [AS_HELP_STRING([--with-lang=LANG],
+ [use LANG as language to emit messages])],
+ language=$with_lang,
+ language=English)
+
+ AC_MSG_CHECKING(language)
+ case "$language" in
+ En* | en* | Am* | am* | US* | us*)
+ lang=English;;
+ NL | nl | Du* | du* | Ned* | ned*)
+ lang=Dutch;;
+ "")
+ lang=English;;
+ *)
+ lang=unknown;;
+ esac
+ AC_MSG_RESULT($lang)
+
+ if test "$lang" = "unknown" ; then
+ STEPMAKE_WARN($language not supported; available are: $ALL_LINGUAS)
+ fi
+
+])
+
+
+AC_DEFUN(STEPMAKE_MAKEINFO, [
+ STEPMAKE_PROGS(MAKEINFO, makeinfo, $1)
+])
+
+
+AC_DEFUN(STEPMAKE_MAN, [
+ STEPMAKE_PROGS(GROFF, groff ditroff, $1)
+ AC_SUBST(GROFF)
+ STEPMAKE_PROGS(TROFF, troff, $1)
+ AC_SUBST(TROFF)
+ STEPMAKE_PROGS(TBL, tbl, $1)
+ AC_SUBST(TBL)
+])
+
+
+AC_DEFUN(STEPMAKE_MSGFMT, [
+ STEPMAKE_PROGS(MSGFMT, msgfmt, $1)
+])
+
+
+# Check for program ($2), set full path result to ($1).
+# If missing, add entry to missing-list ($3, one of 'OPTIONAL', 'REQUIRED')
+AC_DEFUN(STEPMAKE_PATH_PROG, [
+ AC_CHECK_PROGS($1, $2, no)
+ STEPMAKE_OPTIONAL_REQUIRED($1, $2, $3)
+ if test $? -eq 0; then
+ AC_PATH_PROGS($1, $2)
+ if test -n "$4"; then
+ STEPMAKE_CHECK_VERSION($1, $3, $4)
+ fi
+ fi
+])
+
+
+# Check for program in set of names ($2), set result to ($1) .
+# If missing, add entry to missing-list ($3, one of 'OPTIONAL', 'REQUIRED')
+# If exists, and a minimal version ($4) is required
+AC_DEFUN(STEPMAKE_PROGS, [
+ AC_CHECK_PROGS($1, $2, no)
+ STEPMAKE_OPTIONAL_REQUIRED($1, $2, $3)
+ if test $? -eq 0 -a -n "$4"; then
+ STEPMAKE_CHECK_VERSION($1, $3, $4)
+ fi
+])
+
+
+AC_DEFUN(STEPMAKE_PERL, [
+ STEPMAKE_PATH_PROG(PERL, perl, $1)
+])
+
+
+AC_DEFUN(STEPMAKE_PYTHON, [
+ unset pv
+ AC_MSG_CHECKING([for python])
+ for python in $PYTHON python python2 python2.4 python2.3 python2.2 python2.1 python2.0; do
+ AC_MSG_RESULT([$python])
+ if ! $python -V > /dev/null 2>&1 ; then
+ #AC_MSG_WARN([cannot execute $python])
+ PYTHON='echo no python'
+ else
+ unset pv
+ STEPMAKE_CHECK_VERSION(python, pv, $2)
+ if test -z "$pv"; then
+ PYTHON=$python
+ break
+ fi
+ fi
+ done
+ if test -n "$pv"; then
+ STEPMAKE_ADD_ENTRY($1, $pv)
+ fi
+ # clear cached value since arg 2 might point us to a new binary
+ unset ac_cv_path_PYTHON
+
+ AC_PATH_PROG(PYTHON, $PYTHON)
+ AC_SUBST(PYTHON)
+])
+
+AC_DEFUN(STEPMAKE_PYTHON_DEVEL, [
+ AC_ARG_WITH(python-include,
+ [AS_HELP_STRING([--with-python-include=DIR],
+ [location of the python include dir])],[
+ if test "$withval" = "yes" -o "$withval" = "no"; then
+ AC_MSG_WARN(Usage: --with-python-include=includedir)
+ else
+ PYTHON_CFLAGS="-I${withval}"
+ fi
+ ])
+
+ AC_ARG_WITH(python-lib,
+ [AS_HELP_STRING([--with-python-lib=NAME],
+ [name of the python lib])],[
+ if test "$withval" = "yes" -o "$withval" = "no"; then
+ AC_MSG_WARN(Usage: --with-python-lib=name)
+ else
+ LDFLAGS="$LDFLAGS -l${withval}"
+ fi
+ ])
+
+ AC_CHECK_PROGS(PYTHON_CONFIG, python-config, no)
+
+ if test -z "$PYTHON_CFLAGS" -a "$PYTHON_CONFIG" != "no"; then
+ # Clean out junk: http://bugs.python.org/issue3290
+ # Python headers may need some -f* flags, leave them in.
+ # We want the sed commands to look like 's/-[WDOm][[:alnum:][:punct:]][[:alnum:][:punct:]]*//g' and 's/-arch [^[:space:]]*//g', but automake eats brackets.
+ #PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags | sed -e 's/-[[WDOm]][[[:alnum:][:punct:]]][[[:alnum:][:punct:]]]*//g' | sed -e 's/-arch @<:@^@<:@:space:@:>@@:>@*//g'`
+ # The above sed BRE matches parts of legal options, stipping down part of that option, resulting in invalid gcc arguments. Gentoo Bug #415793
+ # For instance, '-floop-stip-mime' becomes '-floop-strip', and '-fvect-cost-model' becomes '-fvect-cost'.
+ # Tentative fix to require a non alphanumeric character before the initial hyphen of the BRE or the hyphen being the first character in the string.
+ PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags | sed -e 's/\(^\|[[^[:alnum:]]]\)-[[WDOm]][[[:alnum:][:punct:]]][[[:alnum:][:punct:]]]*//g' | sed -e 's/-arch @<:@^@<:@:space:@:>@@:>@*//g'`
+ PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags`
+ fi
+
+ if test -z "$PYTHON_CFLAGS" -a "$cross_compiling" = "no"; then
+ changequote(<<, >>)#dnl
+ # alternatively, for python >= 2.0
+ # 'import sys, distutils.sysconfig; sys.stdout.write (distutils.sysconfig.get_python_inc ())'
+ PYTHON_INCLUDE=`$PYTHON -c 'import sys; sys.stdout.write ("%s/include/python%s" % (sys.prefix, sys.version[:3]))'`
+ PYTHON_CFLAGS="-I$PYTHON_INCLUDE"
+ changequote([, ])#dnl
+ fi
+
+ if test -z "$PYTHON_HEADER"; then
+ CPPFLAGS="$PYTHON_CFLAGS $CPPFLAGS"
+ AC_CHECK_HEADERS([Python.h],[PYTHON_HEADER=yes])
+ fi
+
+ if test -z "$PYTHON_HEADER"; then
+ warn="Python.h (python-devel, python-dev or libpython-dev package)"
+ STEPMAKE_ADD_ENTRY($1, $warn)
+ fi
+])
+
+
+
+AC_DEFUN(STEPMAKE_STL_DATA_METHOD, [
+ AC_CACHE_CHECK([for stl.data () method],
+ [stepmake_cv_stl_data_method],
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <vector>
+using namespace std;
+vector <int> v;
+void *p = v.data ();
+]])],
+ [stepmake_cv_stl_data_method=yes],
+ [stepmake_cv_stl_data_method=no]))
+ if test $stepmake_cv_stl_data_method = yes; then
+ AC_DEFINE(HAVE_STL_DATA_METHOD, 1, [define if stl classes have data () method])
+ fi
+])
+
+
+AC_DEFUN(STEPMAKE_TEXMF_DIRS, [
+ # ugh
+ STEPMAKE_PROGS(KPSEWHICH, kpsewhich, OPTIONAL)
+])
+
+AC_DEFUN(STEPMAKE_TEXMF, [
+ STEPMAKE_PROGS(METAFONT, mf-nowin mf mfw mfont, $1)
+ STEPMAKE_PROGS(METAPOST, mpost, $1)
+
+ AC_MSG_CHECKING(for working metafont mode)
+ modelist='ljfour lj4 lj3 lj2 ljet laserjet'
+ for MFMODE in $modelist; do
+ $METAFONT -progname=mf "\mode:=$MFMODE; mode_setup; end." > /dev/null 2>&1
+ if test -f mfput.tfm; then
+ break;
+ fi
+ done
+ AC_MSG_RESULT($MFMODE)
+
+ rm -f mfput.*
+
+ AC_SUBST(MFMODE)
+])
+
+
+AC_DEFUN(STEPMAKE_WARN, [
+ AC_MSG_WARN($1)
+ warn_b=yes
+])
+
+
+dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
+dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
+dnl also defines GSTUFF_PKG_ERRORS on error
+AC_DEFUN(PKG_CHECK_MODULES, [
+ succeeded=no
+
+ if test -z "$PKG_CONFIG"; then
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+ fi
+
+ if test "$PKG_CONFIG" = "no" ; then
+ echo "*** The pkg-config script could not be found. Make sure it is"
+ echo "*** in your path, or set the PKG_CONFIG environment variable"
+ echo "*** to the full path to pkg-config."
+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+ else
+ PKG_CONFIG_MIN_VERSION=0.9.0
+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+ AC_MSG_CHECKING(for $2)
+
+ if $PKG_CONFIG --exists "$2" ; then
+ AC_MSG_RESULT(yes)
+ succeeded=yes
+
+ AC_MSG_CHECKING($1_CFLAGS)
+ $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
+ AC_MSG_RESULT($$1_CFLAGS)
+
+ AC_MSG_CHECKING($1_LIBS)
+ $1_LIBS=`$PKG_CONFIG --libs "$2"`
+ AC_MSG_RESULT($$1_LIBS)
+ else
+ $1_CFLAGS=""
+ $1_LIBS=""
+ ## If we have a custom action on failure, don't print errors, but
+ ## do set a variable so people can do so.
+ $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+ ifelse([$4], ,echo $$1_PKG_ERRORS,)
+ fi
+
+ AC_SUBST($1_CFLAGS)
+ AC_SUBST($1_LIBS)
+ fi
+ fi
+
+ if test $succeeded = yes; then
+ ifelse([$3], , :, [$3])
+ else
+ ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
+ fi
+])
+
+AC_DEFUN(STEPMAKE_FREETYPE2, [
+ PKG_CHECK_MODULES(FREETYPE2, $1 >= $3, have_freetype2=yes, true)
+ if test "$have_freetype2" = yes; then
+ AC_DEFINE(HAVE_FREETYPE2)
+ save_CPPFLAGS="$CPPFLAGS"
+ save_LIBS="$LIBS"
+ CPPFLAGS="$FREETYPE2_CFLAGS $CPPFLAGS"
+ LIBS="$FREETYPE2_LIBS $LIBS"
+ AC_SUBST(FREETYPE2_CFLAGS)
+ AC_SUBST(FREETYPE2_LIBS)
+ CPPFLAGS="$save_CPPFLAGS"
+ LIBS="$save_LIBS"
+ else
+ # UGR
+ #r="lib$1-dev or $1-devel"
+ r="libfreetype6-dev or freetype?-devel"
+ ver="`pkg-config --modversion $1`"
+ STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
+ fi
+])
+
+AC_DEFUN(STEPMAKE_PANGO, [
+ PKG_CHECK_MODULES(PANGO, $1 >= $3, have_pango16=yes, true)
+ if test "$have_pango16" = yes ; then
+ AC_DEFINE(HAVE_PANGO16)
+ # Do not pollute user-CPPFLAGS with configure-CPPFLAGS
+ save_CPPFLAGS="$CPPFLAGS"
+ save_LIBS="$LIBS"
+ CPPFLAGS="$PANGO_CFLAGS $CPPFLAGS"
+ LIBS="$PANGO_LIBS $LIBS"
+ AC_CHECK_HEADERS([pango/pangofc-fontmap.h])
+ AC_CHECK_FUNCS([pango_fc_font_map_add_decoder_find_func])
+ AC_SUBST(PANGO_CFLAGS)
+ AC_SUBST(PANGO_LIBS)
+ CPPFLAGS="$save_CPPFLAGS"
+ LIBS="$save_LIBS"
+ else
+ # UGR
+ #r="lib$1-dev or $1-devel"
+ r="libpango1.0-dev or pango1.0-devel"
+ ver="`pkg-config --modversion $1`"
+ STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
+ fi
+])
+
+AC_DEFUN(STEPMAKE_PANGO_FT2, [
+ PKG_CHECK_MODULES(PANGO_FT2, $1 >= $3, have_pangoft2=yes, true)
+ if test "$have_pangoft2" = yes ; then
+ AC_DEFINE(HAVE_PANGO16)
+ AC_DEFINE(HAVE_PANGO_FT2)
+ # Do not pollute user-CPPFLAGS with configure-CPPFLAGS
+ save_CPPFLAGS="$CPPFLAGS"
+ save_LIBS="$LIBS"
+ CPPFLAGS="$CPPFLAGS $PANGO_FT2_CFLAGS"
+ LIBS="$PANGO_FT2_LIBS $LIBS"
+ AC_CHECK_HEADERS([pango/pangoft2.h])
+ AC_CHECK_FUNCS([pango_ft2_font_map_create_context])
+ AC_SUBST(PANGO_FT2_CFLAGS)
+ AC_SUBST(PANGO_FT2_LIBS)
+ CPPFLAGS="$save_CPPFLAGS"
+ LIBS="$save_LIBS"
+ else
+ # UGR
+ #r="lib$1-dev or $1-devel"e
+ r="libpango1.0-dev or pango?-devel"
+ ver="`pkg-config --modversion $1`"
+ STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
+ fi
+])
+
+AC_DEFUN(STEPMAKE_FONTCONFIG, [
+ PKG_CHECK_MODULES(FONTCONFIG, $1 >= $3, have_fontconfig=yes, true)
+ if test "$have_fontconfig" = yes ; then
+ AC_DEFINE(HAVE_FONTCONFIG)
+ # Do not pollute user-CPPFLAGS with configure-CPPFLAGS
+ save_CPPFLAGS="$CPPFLAGS"
+ save_LIBS="$LIBS"
+ CPPFLAGS="$FONTCONFIG_CFLAGS $CPPFLAGS"
+ LIBS="$FONTCONFIG_LIBS $LIBS"
+ AC_SUBST(FONTCONFIG_CFLAGS)
+ AC_SUBST(FONTCONFIG_LIBS)
+ CPPFLAGS="$save_CPPFLAGS"
+ LIBS="$save_LIBS"
+ else
+ r="lib$1-dev or $1-devel"
+ ver="`pkg-config --modversion $1`"
+ STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
+ fi
+])
+
+AC_DEFUN(STEPMAKE_WINDOWS, [
+ AC_CYGWIN
+ AC_MINGW32
+
+ if test "$CYGWIN" = "yes"; then
+ LN_S='cp -r' # Cygwin symbolic links do not work for native apps.
+ program_suffix=.exe
+ INSTALL="\$(SHELL) \$(stepdir)/../bin/install-dot-exe.sh -c"
+ elif test "$MINGW32" = "yes"; then
+ LN='cp -r'
+ LN_S='cp -r'
+ program_suffix=.exe
+ INSTALL="\$(SHELL) \$(stepdir)/../bin/install-dot-exe.sh -c"
+ PATHSEP=';'
+ fi
+
+ AC_SUBST(LN)
+ AC_SUBST(LN_S)
+ AC_DEFINE_UNQUOTED(DIRSEP, ['${DIRSEP}'])
+ AC_DEFINE_UNQUOTED(PATHSEP, ['${PATHSEP}'])
+ AC_SUBST(DIRSEP)
+ AC_SUBST(PATHSEP)
+ AC_SUBST(program_suffix)
+
+ AC_MSG_CHECKING([for some flavor of Windows])
+ if test "$CYGWIN$MINGW32" = "nono"; then
+ PLATFORM_WINDOWS=no
+ else
+ PLATFORM_WINDOWS=yes
+ fi
+ AC_MSG_RESULT([$PLATFORM_WINDOWS])
+ AC_SUBST(PLATFORM_WINDOWS)
+ STEPMAKE_PROGS(WINDRES, $target-windres windres, x)
+ AC_SUBST(WINDRES)
+])
--noconf*) NOCONFIGURE=true;;
esac
-if [ ! -f aclocal.m4 -o stepmake/aclocal.m4 -nt aclocal.m4 ]; then
- echo "stepmake/aclocal.m4 is newer. Copying file."
- cp -f stepmake/aclocal.m4 aclocal.m4
-fi
-
-if [ ! -f autogen.sh -o stepmake/autogen.sh -nt autogen.sh ]; then
- echo "stepmake/autogen.sh is newer. Copying file."
- cp -f stepmake/autogen.sh autogen.sh
- exec ./autogen.sh "$@"
-fi
-
for i in $srcdir/configure.in #`find $srcdir -name configure.in -print`
do
dir=`dirname $i`
PDFLATEX = @PDFLATEX@
PERL = @PERL@
PLATFORM_WINDOWS = @PLATFORM_WINDOWS@
-PYTHON = @PYTHON@
-TARGET_PYTHON = @PYTHON@
+PYTHON = @PYTHON@ -tt
+TARGET_PYTHON = @PYTHON@ -tt
RANLIB = @RANLIB@
ROOTSEP = @ROOTSEP@
SHELL = @SHELL@
--- /dev/null
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Free Software Foundation, Inc.
+
+timestamp='2010-04-03'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner. Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' HUP INT TERM
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm:riscos:*:*|arm:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval $set_cc_for_build
+ SUN_ARCH="i386"
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH="x86_64"
+ fi
+ fi
+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[456])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ case ${UNAME_MACHINE} in
+ pc98)
+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ 8664:Windows_NT:*)
+ echo x86_64-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+ exit ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-gnu
+ exit ;;
+ frv:Linux:*:*)
+ echo frv-unknown-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ LIBC=gnu
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=${UNAME_MACHINE}el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=${UNAME_MACHINE}
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ or32:Linux:*:*)
+ echo or32-unknown-linux-gnu
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-gnu
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configury will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ case $UNAME_PROCESSOR in
+ i386)
+ eval $set_cc_for_build
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ UNAME_PROCESSOR="x86_64"
+ fi
+ fi ;;
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NSE-?:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
--- /dev/null
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Free Software Foundation, Inc.
+
+timestamp='2010-05-21'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | \
+ kopensolaris*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray | -microblaze)
+ os=
+ basic_machine=$1
+ ;;
+ -bluegene*)
+ os=-cnk
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nios | nios2 \
+ | ns16k | ns32k \
+ | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu | strongarm \
+ | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nios-* | nios2-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile-* | tilegx-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c54x-*)
+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ # This must be matched before tile*.
+ tilegx*)
+ basic_machine=tilegx-unknown
+ os=-linux-gnu
+ ;;
+ tile*)
+ basic_machine=tile-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ z80-*-coff)
+ basic_machine=z80-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -nacl*)
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -cnk*|-aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
AC_INIT
# Bootstrap StepMake configure
-# For user package:
-AC_CONFIG_AUX_DIR([stepmake/bin])
-
-# For stepmake package:
-# AC_CONFIG_AUX_DIR(bin)
-
+AC_CONFIG_AUX_DIR([config])
STEPMAKE_INIT
AC_MSG_RESULT(not found)
echo "Can't find Century Schoolbook files. Install FontConfig's fc-list,"
echo "or use --with-ncsb-dir"
+ STEPMAKE_ADD_ENTRY(REQUIRED,International New Century Schoolbook fonts)
fi
fi
NCSB_SOURCE_FILES=""
for f in $UNCHECKED_NCSB_SOURCE_FILES; do
if test "`grep Cyrillic "$f"`" = ""; then
STEPMAKE_WARN($f does not have Cyrillic characters.)
+ STEPMAKE_ADD_ENTRY(REQUIRED,International New Century Schoolbook fonts)
else
NCSB_SOURCE_FILES="$f $NCSB_SOURCE_FILES"
fi
STEPMAKE_PYTHON_DEVEL(REQUIRED)
-STEPMAKE_PATH_PROG(GHOSTSCRIPT, gs, OPTIONAL, 8.60)
-
STEPMAKE_PATH_PROG(FONTFORGE, fontforge, REQUIRED, 20110222)
STEPMAKE_PATH_PROG(T1ASM, t1asm, REQUIRED)
STEPMAKE_WINDOWS
-## Optional tools for building documentation, website, extra fonts.
-
# guile executable for some scripts
STEPMAKE_GUILE(OPTIONAL)
# perl for help2man.
STEPMAKE_PERL(OPTIONAL)
+## Optional tools for building documentation, website, extra fonts.
+if test "$DOCUMENTATION" = "yes"; then
+ DOCUMENTATION_REQUIRED=REQUIRED
+else
+ DOCUMENTATION_REQUIRED=OPTIONAL
+fi
+
+STEPMAKE_PATH_PROG(GHOSTSCRIPT, gs, $DOCUMENTATION_REQUIRED, 8.60)
+
STEPMAKE_PROGS(MAKEINFO, makeinfo, REQUIRED, 4.11)
-STEPMAKE_PROGS(TEXI2HTML, texi2html, OPTIONAL, 1.82)
-STEPMAKE_PROGS(DBLATEX, dblatex, OPTIONAL, 0.1.4)
-STEPMAKE_PROGS(PDFLATEX, pdflatex, OPTIONAL)
-STEPMAKE_PROGS(NETPBM, pngtopnm, OPTIONAL)
-STEPMAKE_PROGS(IMAGEMAGICK, convert, OPTIONAL)
+STEPMAKE_PROGS(TEXI2HTML, texi2html, $DOCUMENTATION_REQUIRED, 1.82)
+STEPMAKE_PROGS(DBLATEX, dblatex, $DOCUMENTATION_REQUIRED, 0.1.4)
+STEPMAKE_PROGS(BIBTEX, bibtex, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(PDFLATEX, pdflatex, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(PDFTEX, pdfetex pdftex etex, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(TEXI2PDF, texi2pdf, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(TEXINDEX, texindex, $DOCUMENTATION_REQUIRED)
+AC_MSG_CHECKING(for epsf.tex)
+TEX_EPSF=`kpsewhich tex epsf`
+if test "$TEX_EPSF" = ""; then
+ AC_MSG_RESULT(not found)
+ STEPMAKE_ADD_ENTRY($DOCUMENTATION_REQUIRED,epsf.tex)
+else
+ AC_MSG_RESULT($TEX_EPSF)
+fi
+AC_MSG_CHECKING(for Cyrillic characters support in TeX)
+TEX_FIKPARM=`kpsewhich -format=mf fikparm`
+if test "$TEX_FIKPARM" = ""; then
+ AC_MSG_RESULT(not found)
+ STEPMAKE_ADD_ENTRY($DOCUMENTATION_REQUIRED,
+['lh CTAN package (texlive-lang-cyrillic or texlive-texmf-fonts)'])
+else
+ AC_MSG_RESULT(yes)
+fi
+STEPMAKE_PROGS(NETPBM, pngtopnm, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(IMAGEMAGICK, convert, $DOCUMENTATION_REQUIRED)
# this name avoids a conflict with ZIP in stepmake/aclocal.m4
-STEPMAKE_PROGS(ZIPDOC, zip, OPTIONAL)
-STEPMAKE_PROGS(RSYNC, rsync, OPTIONAL)
-
+STEPMAKE_PROGS(ZIPDOC, zip, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(RSYNC, rsync, $DOCUMENTATION_REQUIRED)
AC_DEFINE_UNQUOTED(FLOWER_VERSION, "${FULL_FLOWER_VERSION}")
NAME = flower
MODULE_NAME = flower
-SUBDIRS = include
-SCRIPTS =
README_FILES = NEWS-1.0 NEWS-1.1.46 README TODO
-EXTRA_DIST_FILES= VERSION $(README_FILES) $(SCRIPTS)
STEPMAKE_TEMPLATES=library c++ po test
# test uses LILYPOND_DATADIR
+++ /dev/null
-# flower/lib/include/Makefile
-
-
-depth = ../..
-
-STEPMAKE_TEMPLATES=c++
-
-include $(depth)/make/stepmake.make
-
-
#include "std-vector.hh"
#include "std-string.hh"
-std::string dir_name (std::string const file_name);
+std::string dir_name (std::string file_name);
std::string get_working_directory ();
class File_name
Add any compatibility definitions here for Guile V2.n
*/
#endif // SCM_MAJOR_VERSION == 1
+#if defined (SCM_MAJOR_VERSION) && (SCM_MAJOR_VERSION > 1)
+#define GUILEV2 1
+#endif
+// TODO - remove GUILE1 definition when support for Guile 1 is dropped.
+#if defined (SCM_MAJOR_VERSION) && (SCM_MAJOR_VERSION < 2)
+#define GUILEV1 1
+#define GUILEV2 0
+#endif
#endif /* GUILE_COMPATIBILITY_HH */
#include "std-vector.hh"
#include "interval.hh"
-/*
- A union of intervals in the real line.
-
- Abysmal performance (quadratic) for large N, hopefully we don't have
- that large N. In any case, this should probably be rewritten to use
- a balanced tree.
-*/
-struct Interval_set
+class Interval_set
{
- vector<Interval> allowed_regions_;
-
+public:
Interval_set ();
- void set_full ();
- void remove_interval (Interval rm);
+
+ static Interval_set interval_union (vector<Interval>);
+
+ vector<Interval> const &intervals () const { return intervals_; }
+ vector<Interval>::const_iterator upper_bound (Real x) const;
+ Real nearest_point (Real x, Direction dir = CENTER) const;
+ Interval_set complement () const;
+
+private:
+ vector<Interval> intervals_;
};
#endif /* INTERVAL_SET_HH */
#include <memory>
#include <sstream>
#include <stdexcept>
+#include <unistd.h>
#define YAFFUT_STRINGIZE(x) YAFFUT_STRINGIZE_(x)
#define YAFFUT_STRINGIZE_(x) #x
static Registrator<Suite, Case> s_Registrator;
Test (): Suite ()
{
- Registrator<Suite, Case>* r = &s_Registrator;
+ Registrator<Suite, Case> *r = &s_Registrator;
(void)r;
}
template <typename E, typename T>
static Registrator<Case, void> s_Registrator;
Test ()
{
- Registrator<Case, void>* r = &s_Registrator;
+ Registrator<Case, void> *r = &s_Registrator;
(void)r;
}
template <typename E, typename T>
/*
A union of intervals in the real line.
- Abysmal performance (quadratic) for large N, hopefully we don't have
- that large N. In any case, this should probably be rewritten to use
- a balanced tree.
+ This class gives good performance for finding the union of
+ a collection of intervals (n log n) and for testing if a point
+ belongs to the union (log n). It does not give an efficient way to
+ update the set (ie. by adding more intervals); to do this
+ efficiently would require a self-balancing tree, and it would not
+ be currently useful in lilypond anyway.
*/
Interval_set::Interval_set ()
{
- set_full ();
}
-void
-Interval_set::set_full ()
+Interval_set
+Interval_set::interval_union (vector<Interval> ivs)
{
- allowed_regions_.clear ();
- Interval s;
- s.set_full ();
- allowed_regions_.push_back (s);
+ vector_sort (ivs, Interval::left_less);
+
+ Interval_set ret;
+
+ if (ivs.empty ())
+ return ret;
+
+ ret.intervals_.push_back (ivs.front ());
+
+ // Go over the intervals from left to right. If the current interval
+ // overlaps with the last one, merge them. Otherwise, append the
+ // current interval to the list.
+ for (vsize i = 1; i < ivs.size (); ++i)
+ {
+ Interval iv = ivs[i];
+ Interval &last = ret.intervals_.back ();
+
+ if (last[RIGHT] >= iv[LEFT])
+ // overlapping intervals: merge them
+ last[RIGHT] = max (last[RIGHT], iv[RIGHT]);
+ else if (!iv.is_empty ())
+ ret.intervals_.push_back (iv);
+ }
+
+ return ret;
+}
+
+// Returns an iterator pointing to the first interval whose left
+// endpoint is at least x. That interval may or may not contain x.
+vector<Interval>::const_iterator
+Interval_set::upper_bound (Real x) const
+{
+ Interval xx (x, x);
+ return std::upper_bound (intervals_.begin (), intervals_.end (), xx, Interval::left_less);
}
-void
-Interval_set::remove_interval (Interval rm)
+Real
+Interval_set::nearest_point (Real x, Direction d) const
{
- for (vsize i = 0; i < allowed_regions_.size ();)
+ Real left = -infinity_f; // The closest point to the left of x.
+ Real right = infinity_f; // The closest point to the right of x.
+
+ vector<Interval>::const_iterator i = upper_bound (x);
+ if (i != intervals_.end ())
+ right = (*i)[LEFT];
+
+ if (i != intervals_.begin ())
{
- Interval s = rm;
-
- s.intersect (allowed_regions_[i]);
-
- if (!s.is_empty ())
- {
- Interval before = allowed_regions_[i];
- Interval after = allowed_regions_[i];
-
- before[RIGHT] = s[LEFT];
- after[LEFT] = s[RIGHT];
-
- if (!before.is_empty () && before.length () > 0.0)
- {
- allowed_regions_.insert (allowed_regions_.begin () + (long)i, before);
- i++;
- }
- allowed_regions_.erase (allowed_regions_.begin () + (long)i);
- if (!after.is_empty () && after.length () > 0.0)
- {
- allowed_regions_.insert (allowed_regions_.begin () + (long)i, after);
- i++;
- }
- }
- else
- i++;
+ Interval left_iv = *(i - 1);
+ // left_iv[LEFT] is guaranteed to be less than x. So if
+ // left_iv[RIGHT] >= x then left_iv contains x, which must then
+ // be the nearest point to x.
+ if (left_iv[RIGHT] >= x)
+ return x;
+
+ left = left_iv[RIGHT];
+ }
+
+ if (d == RIGHT)
+ return right;
+ if (d == LEFT)
+ return left;
+ else
+ return (right - x) < (x - left) ? right : left;
+}
+
+Interval_set
+Interval_set::complement () const
+{
+ Interval_set ret;
+
+ if (intervals_.empty ())
+ {
+ ret.intervals_.push_back (Interval (-infinity_f, infinity_f));
+ return ret;
}
+
+ if (intervals_[0][LEFT] > -infinity_f)
+ ret.intervals_.push_back (Interval (-infinity_f, intervals_[0][LEFT]));
+
+ for (vsize i = 1; i < intervals_.size (); ++i)
+ ret.intervals_.push_back (Interval (intervals_[i - 1][RIGHT], intervals_[i][LEFT]));
+
+ if (intervals_.back ()[RIGHT] < infinity_f)
+ ret.intervals_.push_back (Interval (intervals_.back ()[RIGHT], infinity_f));
+
+ return ret;
}
--- /dev/null
+/*
+ This file is part of LilyPond, the GNU music typesetter.
+
+ Copyright (C) 2012 Joe Neeman <joeneeman@gmail.com>
+
+ LilyPond is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ LilyPond is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "interval-set.hh"
+
+#include "yaffut.hh"
+
+using namespace std;
+
+FUNC (interval_set_union)
+{
+ vector<Interval> ivs;
+
+ // Overlapping intervals.
+ ivs.push_back (Interval (-1, 1));
+ ivs.push_back (Interval (0, 3));
+ ivs.push_back (Interval (1, 2));
+ Interval_set result = Interval_set::interval_union (ivs);
+ EQUAL (result.intervals ().size (), 1);
+ // Compare intervals using to_string, since yaffut doesn't know how to compare intervals.
+ EQUAL (result.intervals ()[0].to_string (), Interval (-1, 3).to_string ());
+
+ // Non-overlapping intervals.
+ ivs.push_back (Interval (-5, -4));
+ result = Interval_set::interval_union (ivs);
+ EQUAL (result.intervals ().size (), 2);
+ EQUAL (result.intervals ()[0].to_string (), Interval (-5, -4).to_string ());
+ EQUAL (result.intervals ()[1].to_string (), Interval (-1, 3).to_string ());
+
+ // Infinite intervals.
+ ivs.push_back (Interval (-infinity_f, -4));
+ result = Interval_set::interval_union (ivs);
+ EQUAL (result.intervals ().size (), 2);
+ EQUAL (result.intervals ()[0].to_string (), Interval (-infinity_f, -4).to_string ());
+ EQUAL (result.intervals ()[1].to_string (), Interval (-1, 3).to_string ());
+
+ // Empty intervals.
+ ivs.push_back (Interval (infinity_f, -infinity_f));
+ result = Interval_set::interval_union (ivs);
+ EQUAL (result.intervals ().size (), 2);
+}
+
+FUNC (interval_set_nearest_point)
+{
+ vector<Interval> ivs;
+
+ ivs.push_back (Interval (-3, -1));
+ ivs.push_back (Interval (1, 3));
+ Interval_set set = Interval_set::interval_union (ivs);
+
+ // If the point is in the set, direction does not matter.
+ EQUAL (set.nearest_point (-2, UP), -2);
+ EQUAL (set.nearest_point (-2, DOWN), -2);
+ EQUAL (set.nearest_point (-2, CENTER), -2);
+
+ // If the point is not in the set, direction does matter.
+ EQUAL (set.nearest_point (-0.5, UP), 1);
+ EQUAL (set.nearest_point (-0.5, DOWN), -1);
+ EQUAL (set.nearest_point (-0.5, CENTER), -1);
+ EQUAL (set.nearest_point (0.5, CENTER), 1);
+
+ // The return value can be +- infinity.
+ EQUAL (set.nearest_point (5, UP), infinity_f);
+ EQUAL (set.nearest_point (5, DOWN), 3);
+ EQUAL (set.nearest_point (-5, DOWN), -infinity_f);
+ EQUAL (set.nearest_point (-5, UP), -3);
+}
+
+FUNC (interval_set_complement)
+{
+ vector<Interval> ivs;
+
+ ivs.push_back (Interval (-3, -1));
+ ivs.push_back (Interval (1, 3));
+ Interval_set set = Interval_set::interval_union (ivs).complement ();
+ EQUAL (set.intervals ().size (), 3);
+ EQUAL (set.intervals ()[0].to_string (), Interval (-infinity_f, -3).to_string ());
+ EQUAL (set.intervals ()[1].to_string (), Interval (-1, 1).to_string ());
+ EQUAL (set.intervals ()[2].to_string (), Interval (3, infinity_f).to_string ());
+
+ // Half-infinite sets are handled correctly.
+ ivs.push_back (Interval (-infinity_f, -2));
+ set = Interval_set::interval_union (ivs).complement ();
+ EQUAL (set.intervals ().size (), 2);
+ EQUAL (set.intervals ()[0].to_string (), Interval (-1, 1).to_string ());
+ EQUAL (set.intervals ()[1].to_string (), Interval (3, infinity_f).to_string ());
+
+ // Full and empty sets are handled correctly.
+ set = Interval_set ().complement ();
+ EQUAL (set.intervals ().size (), 1);
+ EQUAL (set.intervals ()[0].to_string (), Interval (-infinity_f, infinity_f).to_string ());
+ set = set.complement ();
+ EQUAL (set.intervals ().size (), 0);
+}
"
}
-\version "2.16.0"
+\version "2.17.6"
\relative c'' {
\time 3/4
% FIXME: standard vs default, alteration-FOO vs FOO-alteration
- \override Staff.Accidental #'glyph-name-alist = #standard-alteration-glyph-name-alist
+ \override Staff.Accidental.glyph-name-alist = #standard-alteration-glyph-name-alist
cis^\markup { \typewriter default } c ces
- \override Staff.Accidental #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+ \override Staff.Accidental.glyph-name-alist = #alteration-hufnagel-glyph-name-alist
cis^\markup { \typewriter hufnagel } c ces
- \override Staff.Accidental #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
+ \override Staff.Accidental.glyph-name-alist = #alteration-medicaea-glyph-name-alist
cis^\markup { \typewriter medicaea } c ces
- \override Staff.Accidental #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
+ \override Staff.Accidental.glyph-name-alist = #alteration-vaticana-glyph-name-alist
cis^\markup { \typewriter vaticana } c ces
- \override Staff.Accidental #'glyph-name-alist = #alteration-mensural-glyph-name-alist
+ \override Staff.Accidental.glyph-name-alist = #alteration-mensural-glyph-name-alist
cis^\markup { \typewriter mensural } c ces
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Cautionary accidentals may be indicated using either
{
c''4
cis''?4
- \once \override Staff.AccidentalCautionary #'parenthesized = ##f
- \once \override Staff.AccidentalCautionary #'font-size = #-2
+ \once \override Staff.AccidentalCautionary.parenthesized = ##f
+ \once \override Staff.AccidentalCautionary.font-size = #-2
cis''?4
- \once \override Staff.AccidentalCautionary #'parenthesized = ##t
+ \once \override Staff.AccidentalCautionary.parenthesized = ##t
cis''?4
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Several automatic accidental rules
\score {
\relative c'' {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
gis4 a g gisis
- \accidentalStyle "neo-modern"
+ \accidentalStyle neo-modern
gis8 a gis gis g' gis gis,, a'
- \accidentalStyle "neo-modern-cautionary"
+ \accidentalStyle neo-modern-cautionary
eis fis eis eis g2
- \accidentalStyle "teaching"
+ \accidentalStyle teaching
\key e \major
e8 eis fis fis gis2
}
--- /dev/null
+\version "2.17.0"
+
+\header {
+ texidoc = "Horizontal @code{Fingering} grobs should not collide with
+accidentals.
+"
+}
+
+\relative c' {
+ \time 2/4
+ \set fingeringOrientations = #'(left)
+ <a-3 cis-4> <a-3 cis!-4> |
+}
\ No newline at end of file
}
-\version "2.16.0"
+\version "2.17.6"
\layout
{
}
\new PianoStaff \relative <<
- \accidentalStyle "piano"
+ \accidentalStyle piano
\new Staff { ges'4 ges4 }
\new Staff { r8 gis r8 gis }
>>
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Accidental padding works for all accidentals, including
}
\relative c' {
- \override Staff.AccidentalPlacement #'padding = #2
+ \override Staff.AccidentalPlacement.padding = #2
<ces cis>1
<ces des>1
}
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
}
\time 2/4
\set suggestAccidentals = ##t
cis^> gis'-|
- \override AccidentalSuggestion #'parenthesized = ##t
+ \override AccidentalSuggestion.parenthesized = ##t
cis,_"paren" gis'
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The second and third notes should not get accidentals,
fis8 gis8 ~
\break
gis1
- \override Accidental #'hide-tied-accidental-after-break = ##t
+ \override Accidental.hide-tied-accidental-after-break = ##t
f1~
f2~f4 % ~ f8
fis8 gis8 ~
-\version "2.16.0"
+\version "2.17.6"
\layout { ragged-right = ##t }
\header{
\voicea
}
\context Staff <<
- \accidentalStyle "modern-voice-cautionary"
+ \accidentalStyle modern-voice-cautionary
\new Voice \voicea
\new Voice \voiceb
>>
anywhere in the vertical alignment. "
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
\new Staff {
\set Staff.alignAboveContext = #"3"
\times 4/6 {
- \override TextScript #'padding = #3
+ \override TextScript.padding = #3
c4^"this" d_"staff" e^"above" d_"last" e^"staff" f
}
}
}
-\version "2.16.0"
+\version "2.17.6"
\book {
\score {
\new Staff { c c c c }
\new Staff {
\overrideProperty
- #"Score.NonMusicalPaperColumn"
- #'line-break-system-details
+ Score.NonMusicalPaperColumn.line-break-system-details
#'((alignment-distances . (#f 20)))
c1 \break
\overrideProperty
- #"Score.NonMusicalPaperColumn"
- #'line-break-system-details
+ Score.NonMusicalPaperColumn.line-break-system-details
#'((alignment-distances . (5 15)))
c1 \break
\overrideProperty
- #"Score.NonMusicalPaperColumn"
- #'line-break-system-details
+ Score.NonMusicalPaperColumn.line-break-system-details
#'((alignment-distances . (15 5)))
c1 c
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The command @code{\\alterBroken} may be used to override the
#(ly:expect-warning (_ "not a spanner name"))
\relative c'' {
- \alterBroken Slur #'positions #'((3 . 3) (5 . 5))
- \alterBroken Slur #'color #'((0 0 1) (1 0 0))
- \alterBroken Slur #'dash-definition #'( ((0 1 0.4 0.75))
- ((0 0.5 0.4 0.75) (0.5 1 1 1)) )
- d4( d' b g
+ d4-\alterBroken #'positions #'((3 . 3) (5 . 5))
+ -\alterBroken #'color #'((0 0 1) (1 0 0))
+ -\alterBroken #'dash-definition #'( ((0 1 0.4 0.75))
+ ((0 0.5 0.4 0.75) (0.5 1 1 1)) )
+ -(
+ d' b g
\break
d d' b g)
- \alterBroken "Staff.OttavaBracket" #'padding #'(1 3)
+ \alterBroken #'padding #'(1 3) Staff.OttavaBracket
% Spaces in spanner's name are disregarded.
- \alterBroken "Staff . OttavaBracket" #'style #'(line dashed-line)
+ \alterBroken #'style #'(line dashed-line) Staff.OttavaBracket
\ottava #1
% It is possible to use procedures as arguments.
- \alterBroken Hairpin #'stencil #`(
- ,ly:hairpin::print
- ,(lambda (grob)
- (ly:stencil-rotate (ly:hairpin::print grob) -5 0 0)))
- c\< d e
+ c-\alterBroken Hairpin.stencil #`(
+ ,ly:hairpin::print
+ ,(lambda (grob)
+ (ly:stencil-rotate (ly:hairpin::print grob) -5 0 0)))
+ \<
+ d e
% Since `NoteHead' is not the name of a spanner, the following has no
% effect on layout. A warning (suppressed here) is issued.
- \alterBroken NoteHead #'color #`(,red ,blue)
- \alterBroken Tie #'color #`(() ,blue)
- \alterBroken Tie #'control-points #'(
+ \alterBroken #'color #`(,red ,blue) NoteHead
+ \once\alterBroken #'color #`(() ,blue) Tie
+ \once\alterBroken #'control-points #'(
((1 . 3) (2 . 4) (3 . 4) (4 . 3))
((3 . 3) (4 . 4) (5 . 4) (6 . 3))
- )
+ ) Tie
f~
\break
f c a f\!
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The gaps between an @code{AmbitusLine} and its
\new Staff {
\time 2/4
- \override AmbitusLine #'gap = #1
+ \override AmbitusLine.gap = #1
c'4 g''
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Arpeggios do not overshoot the highest note head.
\relative c' {
% simulate overshoot for comparison
- \once \override Arpeggio #'positions = #'(-3 . 1)
+ \once \override Arpeggio.positions = #'(-3 . 1)
<c e g b>1\arpeggio
<c e g b>1\arpeggio
<f a c>2\arpeggio <g b d f>\arpeggio
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc="
Arpeggios are supported, both cross-staff and broken single staff.
<fis, d a>\arpeggio
\arpeggioArrowUp
<fis d a >\arpeggio
- %%\override PianoStaff.SpanArpeggio #'connect = ##t
+ %%\override PianoStaff.SpanArpeggio.connect = ##t
\set PianoStaff.connectArpeggios = ##t
<fis d a>\arpeggio
}
-\version "2.16.0"
+\version "2.17.5"
\header{
texidoc="No auto beams will be put over (manual) repeat bars."
{
\time 3/4
- a'4 b' c''8 \bar ":|:" d''8
+ a'4 b' c''8 \bar ":..:" d''8
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Tuplet-spanner should not put (visible) brackets on
\relative c' {
\set tupletSpannerDuration = #(ly:make-moment 1 4)
- \override TupletBracket #'bracket-visibility = #'if-no-beam
+ \override TupletBracket.bracket-visibility = #'if-no-beam
\times 2/3 {
f8[ f f ] f8[ f f ] f f f f f f
}
texidoc = "Exercise all output functions"
}
-\version "2.16.0"
+\version "2.17.6"
\paper { ragged-right = ##t }
\ottava #0
<f,, \5>4
- \override TextScript #'color = #red
+ \override TextScript.color = #red
g4^"red"
}
\new Staff \relative c'' {
\makeClusters { <g a>8 <e a> <g a>4 }
- \override Glissando #'style = #'zigzag
+ \override Glissando.style = #'zigzag
\slurDashed
f2( \glissando f')
\easyHeadsOn
-\version "2.16.0"
+\version "2.17.6"
forcedLastBreak = { \break }
#(define (assert-system-count-override count)
- #{ \override NoteHead #'after-line-breaking
+ #{ \override NoteHead.after-line-breaking
= #(lambda (smob) (assert-system-count smob count))
#})
sarabandeA = \context Voice \relative c {
- \override Staff.NoteCollision #'merge-differently-dotted = ##t
+ \override Staff.NoteCollision.merge-differently-dotted = ##t
<< { d8. e16 e4.\trill d16 e } \\
\context {
\Staff
fontSize = #-1
- \override StaffSymbol #'staff-space = #0.8
+ \override StaffSymbol.staff-space = #0.8
}
\context {
\Score
- \override SpacingSpanner #'spacing-increment = #0.96
+ \override SpacingSpanner.spacing-increment = #0.96
}
indent = 5.6 \mm
with lines and explanatory text added."
}
-\version "2.16.0"
+\version "2.17.6"
\layout{ ragged-right = ##t }
\layout {
\context {
\Score
- \override PaperColumn #'keep-inside-line = ##f
+ \override PaperColumn.keep-inside-line = ##f
}
}
}
}
-\version "2.16.0"
+\version "2.17.6"
ledgerUp =
{
s2
\stopStaff
- \override Staff.StaffSymbol #'line-positions = #'(-4 -2 0 2 4 6)
+ \override Staff.StaffSymbol.line-positions = #'(-4 -2 0 2 4 6)
\startStaff
s2
\noBreak
s2
\stopStaff
- \revert Staff.StaffSymbol #'line-positions
+ \revert Staff.StaffSymbol.line-positions
\startStaff
s2
}
{
s2
\stopStaff
- \override Staff.StaffSymbol #'line-positions = #'(-6 -4 -2 0 2 4)
+ \override Staff.StaffSymbol.line-positions = #'(-6 -4 -2 0 2 4)
\startStaff
s1
\stopStaff
- \revert Staff.StaffSymbol #'line-positions
+ \revert Staff.StaffSymbol.line-positions
\startStaff
s2
}
<<
\new Staff \with
{
- \override BarLine #'bar-extent = #'(-1 . 1.5)
+ \override BarLine.bar-extent = #'(-1 . 1.5)
}
{
\ledgerUp \ledgerDown
\new Staff \with
{
- \override BarLine #'bar-extent = #'(0 . 0)
+ \override BarLine.bar-extent = #'(0 . 0)
}
{
s1*4
\new Staff \with
{
- \override BarLine #'bar-extent = #'(-2 . 0)
+ \override BarLine.bar-extent = #'(-2 . 0)
}
{
s1*4
--- /dev/null
+\version "2.17.5"
+
+\header { texidoc = "New bar line glyphs can be defined in Scheme."
+ }
+
+\paper { ragged-right = ##t }
+
+
+#(define (make-coda-sign-bar-line grob extent)
+ (let ((stencil (ly:font-get-glyph (ly:grob-default-font grob)
+ "scripts.coda")))
+ stencil))
+
+#(add-bar-glyph-print-procedure "0" make-coda-sign-bar-line)
+
+\defineBarLine "0" #'("0" "" "")
+
+
+\relative \new StaffGroup <<
+ \new Staff {
+ c4 c \bar "0" c c \bar "0" \break
+ c1
+ }
+ \new Staff {
+ c4 c c c
+ c1
+ }
+>>
--- /dev/null
+\version "2.17.5"
+
+\header { texidoc = "New bar line styles can be defined by @code{\defineBarLine}."
+ }
+
+\paper { ragged-right = ##t }
+
+\defineBarLine "[|;" #'("|" "[|;" " |")
+\defineBarLine ";|]" #'(";|]" "" " |")
+
+\relative \new StaffGroup <<
+ \new Staff {
+ c4 c \bar "[|;" c c \bar ";|]" \break
+ c4 c \bar ";|]" c c \bar "[|;" \break
+ c1 }
+ \new Staff {
+ c4 c c c
+ c4 c c c
+ c1
+ }
+>>
-\version "2.16.0"
+\version "2.17.5"
\header { texidoc = "Segno bar lines can be used to mark
the begin and the end of a segno part."
\relative \new StaffGroup <<
\new Staff {
- c4 \bar "S" c \bar "|S" c \bar "S|" c \bar ":|S" \break
- c4 c \bar ":|S|:" c c \bar ":|S.|:" \break
- c4 c c2 \bar ".S|:" \break
- c1 \bar ":|S." \break
+ c4 \bar "S" c \bar "S-|" c \bar "S-S" c \bar ":|.S" \break
+ c4 c \bar ":|.S.|:" c c \bar ":|.S.|:-S" \break
+ c4 c c2 \bar "S.|:" \break
+ c1 \bar ":|.S-S" \break
c1 \bar "S" \break
c1 }
\new Staff {
-\version "2.16.0"
+\version "2.17.5"
\header { texidoc = "Various types of bar lines can be drawn.
\relative \new StaffGroup <<
\new Staff = "1" {
- c2 \bar "dashed" c
+ c2 \bar "!" c
s1
- c2 \bar ":" c
+ c2 \bar ";" c
s1
c2 \bar "." c
s1
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Bar numbers can automatically reset at volta repeats.
(integer?)
#{
\relative c' {
- \override Score.BarNumber #'break-visibility = #'#(#t #t #t)
+ \override Score.BarNumber.break-visibility = #'#(#t #t #t)
\repeat volta 28 {
c1 |
c |
-\version "2.16.0"
+\version "2.17.6"
\header {
}
\relative c'' {
- \override Score.BarNumber #'break-visibility = #all-visible
+ \override Score.BarNumber.break-visibility = #all-visible
\partial 4 c4
c1 c c
\set Score.currentBarNumber = #99999
- \override Score.BarNumber #'padding = #3
+ \override Score.BarNumber.padding = #3
c1 c
}
beamlets on the same height."
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
raggedright = ##t
\relative c' {
\time 1/4
- \override Beam #'breakable = ##t
+ \override Beam.breakable = ##t
r16 r16. c32[ c16 \break c8. ] r16
}
}
-\version "2.16.0"
+\version "2.17.6"
\new Staff \with {
\remove "Bar_engraver"
- \override Beam #'breakable = ##t
+ \override Beam.breakable = ##t
} {
\time 1/8
c'32 [
"
}
-\version "2.16.0"
+\version "2.17.6"
\layout { ragged-right= ##t }
\relative c'' {
- \override Score.Beam #'breakable = ##t
+ \override Score.Beam.breakable = ##t
\time 3/16 c16-[ d e \break f-]
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="Some classic examples of broken beams, all taken from
}
music = \relative c'' {
- \override Beam #'breakable = ##t
+ \override Beam.breakable = ##t
r2. f8[ c \break
e c f,] r8 r4 a'8[ e \break
g d g,] r8 r4 f'8[ a, \break
f' b d ] r8 r2 |
}
-\markup { "\override Beam #'positions = #beam::place-broken-parts-individually (default)" }
+\markup { "\override Beam.positions = #beam::place-broken-parts-individually (default)" }
{ \music }
-\markup { "\override Beam #'positions = #beam::align-with-broken-parts" }
+\markup { "\override Beam.positions = #beam::align-with-broken-parts" }
\markup { \justify { Returns y-positions at the ends of the beam such that beams align-across-breaks. } }
{
- \override Beam #'positions = #beam::align-with-broken-parts
+ \override Beam.positions = #beam::align-with-broken-parts
\music
}
-\markup { "\override Beam #'positions = #beam::slope-like-broken-parts" }
+\markup { "\override Beam.positions = #beam::slope-like-broken-parts" }
\markup { \justify { Approximates broken beam positioning in turn-of-the-century Editions Peters scores. } }
{
- \override Beam #'positions = #beam::slope-like-broken-parts
+ \override Beam.positions = #beam::slope-like-broken-parts
\music
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The functions passed to the @code{positions} property should
\paper { ragged-right = ##t }
{
r2.
- \override Beam #'breakable = ##t
+ \override Beam.breakable = ##t
r8[ g' \break a' r]
}
{
r2.
- \override Beam #'positions = #beam::align-with-broken-parts
- \override Beam #'breakable = ##t
+ \override Beam.positions = #beam::align-with-broken-parts
+ \override Beam.breakable = ##t
r8[ g' \break a' r]
}
{
r2.
- \override Beam #'positions = #beam::slope-like-broken-parts
- \override Beam #'breakable = ##t
+ \override Beam.positions = #beam::slope-like-broken-parts
+ \override Beam.breakable = ##t
r8[ g' \break a' r]
}
\ No newline at end of file
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc="Simple beams on middle staffline are allowed to be
}
\relative c'{
- %%\override Staff.Stem #'beamed-lengths = #'(3.50)
+ %%\override Staff.Stem.beamed-lengths = #'(3.50)
%% c8[ d]
%% d[ c]
%% r2
- %% \override Staff.Stem #'beamed-lengths = #'(3.26)
+ %% \override Staff.Stem.beamed-lengths = #'(3.26)
a8[^"small slope" b]
b[ a]
% debug-beam-scoring = ##t
}
-\version "2.16.0"
+\version "2.17.6"
\new Staff
{
s4. <g g'>4.
} \\
{
-% \override Beam #'inspect-quants = #'(-4 . -3)
+% \override Beam.inspect-quants = #'(-4 . -3)
a8[ d e f g]
}
>>
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Beams can be allowed to collide with grobs by overriding
the collision-interfaces property."
\relative c' {
c8 [ des' ]
- \once \override Beam #'collision-interfaces = #'(beam-interface
+ \once \override Beam.collision-interfaces = #'(beam-interface
clef-interface
;inline-accidental-interface
key-signature-interface
time-signature-interface)
c,8 [ des'! ]
c, [ \key des \major d ]
- \once \override Beam #'collision-interfaces = #'(beam-interface
+ \once \override Beam.collision-interfaces = #'(beam-interface
clef-interface
inline-accidental-interface
;key-signature-interface
time-signature-interface)
c [ \key c \major d ]
g [ \grace { a [ d ] } g, ]
- \once \override Beam #'collision-interfaces = #'(;beam-interface
+ \once \override Beam.collision-interfaces = #'(;beam-interface
clef-interface
inline-accidental-interface
key-signature-interface
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Beam collisions are resistant to scaled down staves."
}
\new Staff \with {
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
- \override StaffSymbol #'thickness = #(magstep -3) }
+ \override StaffSymbol.staff-space = #(magstep -3)
+ \override StaffSymbol.thickness = #(magstep -3) }
<<
\relative c'' { e16[ f] }
\\
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Beam collision can be tweaked to only apply to the grobs
within the beam's original voice."
\time 5/4
<< { c8[ s c ] } \\ { s8 c' s8 } >>
c,[ des' ]
- \override Staff . Beam #'collision-voice-only = ##t
+ \override Staff.Beam.collision-voice-only = ##t
<< { c,8[ s c ] } \\ { s8 c' s8 } >>
c,[ des'! ]
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Concave beaming works for chords as well as monophonic
music.
#(define (<> x y) (not (= x y)))
mustBeHorizontal = {
- \override Staff.Beam #'positions = #(check-slope-callbacks =)
+ \override Staff.Beam.positions = #(check-slope-callbacks =)
}
mustNotBeHorizontal = {
- \override Staff.Beam #'positions = #(check-slope-callbacks <>)
+ \override Staff.Beam.positions = #(check-slope-callbacks <>)
}
\new Voice {
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc = "Fully concave beams should be horizontal. Informally spoken,
#(define (<> x y) (not (= x y)))
\new Voice {
- \override Beam #'positions = #(check-slope-callbacks =)
+ \override Beam.positions = #(check-slope-callbacks =)
\rossBeams
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Beamed stems have standard lengths if possible. Quantization
}
\relative c' {
- \override Beam #'skip-quanting = ##t
+ \override Beam.skip-quanting = ##t
f4 f8[ f] f16[ f] f32[ f] f64[ f] f128[ f]
}
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc="
Beams should behave reasonably well, even under extreme circumstances.
{
% If we want to test extreme beams,
% we should not have them auto-kneed
- \override Beam #'auto-knee-gap = ##f
+ \override Beam.auto-knee-gap = ##f
\extreme
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Feathered beams should have the same progress of their feathering
at the end of a line break as they do at the beginning of the next line."
\new Staff <<
\relative c' {
\cadenzaOn
- \override Staff . TimeSignature #'stencil = ##f
- \override Voice . Beam #'breakable = ##t
- \once \override Voice . Beam #'grow-direction = #RIGHT
+ \override Staff.TimeSignature.stencil = ##f
+ \override Voice.Beam.breakable = ##t
+ \once \override Voice.Beam.grow-direction = #RIGHT
a32[ b c d e f g a ]
- \once \override Voice . Beam #'grow-direction = #LEFT
+ \once \override Voice.Beam.grow-direction = #LEFT
a[ g f e d c b a] \bar "|"
} >>
\new Staff <<
\relative c' {
\cadenzaOn
- \override Staff . TimeSignature #'stencil = ##f
- \override Voice . Beam #'breakable = ##t
- \once \override Voice . Beam #'grow-direction = #RIGHT
+ \override Staff.TimeSignature.stencil = ##f
+ \override Voice.Beam.breakable = ##t
+ \once \override Voice.Beam.grow-direction = #RIGHT
a32[ b c d \bar "" \break e f g a b c d e f g a ] \bar "|"
} >>
\new Staff <<
\relative c' {
\cadenzaOn
- \override Staff . TimeSignature #'stencil = ##f
- \override Voice . Beam #'breakable = ##t
- \once \override Voice . Beam #'grow-direction = #RIGHT
+ \override Staff.TimeSignature.stencil = ##f
+ \override Voice.Beam.breakable = ##t
+ \once \override Voice.Beam.grow-direction = #RIGHT
a32[ b c d e f g a \bar "" \break b c d e f g a ] \bar "|"
} >>
\new Staff <<
\relative c' {
\cadenzaOn
- \override Staff . TimeSignature #'stencil = ##f
- \override Voice . Beam #'breakable = ##t
- \once \override Voice . Beam #'grow-direction = #RIGHT
+ \override Staff.TimeSignature.stencil = ##f
+ \override Voice.Beam.breakable = ##t
+ \once \override Voice.Beam.grow-direction = #RIGHT
a32[ b c d e f g a b c d \bar "" \break e f g a ] \bar "|"
} >>
\new Staff <<
\relative c' {
\cadenzaOn
- \override Staff . TimeSignature #'stencil = ##f
- \override Voice . Beam #'breakable = ##t
- \once \override Voice . Beam #'grow-direction = #LEFT
+ \override Staff.TimeSignature.stencil = ##f
+ \override Voice.Beam.breakable = ##t
+ \once \override Voice.Beam.grow-direction = #LEFT
a32[ b c d \bar "" \break e f g a b c d e f g a ] \bar "|"
} >>
\new Staff <<
\relative c' {
\cadenzaOn
- \override Staff . TimeSignature #'stencil = ##f
- \override Voice . Beam #'breakable = ##t
- \once \override Voice . Beam #'grow-direction = #LEFT
+ \override Staff.TimeSignature.stencil = ##f
+ \override Voice.Beam.breakable = ##t
+ \once \override Voice.Beam.grow-direction = #LEFT
a32[ b c d e f g a \bar "" \break b c d e f g a ] \bar "|"
} >>
\new Staff <<
\relative c' {
\cadenzaOn
- \override Staff . TimeSignature #'stencil = ##f
- \override Voice . Beam #'breakable = ##t
- \once \override Voice . Beam #'grow-direction = #LEFT
+ \override Staff.TimeSignature.stencil = ##f
+ \override Voice.Beam.breakable = ##t
+ \once \override Voice.Beam.grow-direction = #LEFT
a32[ b c d e f g a b c d \bar "" \break e f g a ] \bar "|"
} >>
\new Staff <<
\relative c' {
\cadenzaOn
- \override Staff . TimeSignature #'stencil = ##f
- \override Voice . Stem #'direction = #DOWN
- \override Voice . Beam #'breakable = ##t
- \once \override Voice . Beam #'grow-direction = #RIGHT
+ \override Staff.TimeSignature.stencil = ##f
+ \override Voice.Stem.direction = #DOWN
+ \override Voice.Beam.breakable = ##t
+ \once \override Voice.Beam.grow-direction = #RIGHT
a32[ b c d \bar "" \break e f g a b c d e f g a ] \bar "|"
} >>
\new Staff <<
\relative c' {
\cadenzaOn
- \override Staff . TimeSignature #'stencil = ##f
- \override Voice . Stem #'direction = #DOWN
- \override Voice . Beam #'breakable = ##t
- \once \override Voice . Beam #'grow-direction = #RIGHT
+ \override Staff.TimeSignature.stencil = ##f
+ \override Voice.Stem.direction = #DOWN
+ \override Voice.Beam.breakable = ##t
+ \once \override Voice.Beam.grow-direction = #RIGHT
a32[ b c d e f g a \bar "" \break b c d e f g a ] \bar "|"
} >>
\new Staff <<
\relative c' {
\cadenzaOn
- \override Staff . TimeSignature #'stencil = ##f
- \override Voice . Stem #'direction = #DOWN
- \override Voice . Beam #'breakable = ##t
- \once \override Voice . Beam #'grow-direction = #RIGHT
+ \override Staff.TimeSignature.stencil = ##f
+ \override Voice.Stem.direction = #DOWN
+ \override Voice.Beam.breakable = ##t
+ \once \override Voice.Beam.grow-direction = #RIGHT
a32[ b c d e f g a b c d \bar "" \break e f g a ] \bar "|"
} >>
\new Staff <<
\relative c' {
\cadenzaOn
- \override Staff . TimeSignature #'stencil = ##f
- \override Voice . Stem #'direction = #DOWN
- \override Voice . Beam #'breakable = ##t
- \once \override Voice . Beam #'grow-direction = #LEFT
+ \override Staff.TimeSignature.stencil = ##f
+ \override Voice.Stem.direction = #DOWN
+ \override Voice.Beam.breakable = ##t
+ \once \override Voice.Beam.grow-direction = #LEFT
a32[ b c d \bar "" \break e f g a b c d e f g a ] \bar "|"
} >>
\new Staff <<
\relative c' {
\cadenzaOn
- \override Staff . TimeSignature #'stencil = ##f
- \override Voice . Stem #'direction = #DOWN
- \override Voice . Beam #'breakable = ##t
- \once \override Voice . Beam #'grow-direction = #LEFT
+ \override Staff.TimeSignature.stencil = ##f
+ \override Voice.Stem.direction = #DOWN
+ \override Voice.Beam.breakable = ##t
+ \once \override Voice.Beam.grow-direction = #LEFT
a32[ b c d e f g a \bar "" \break b c d e f g a ] \bar "|"
} >>
\new Staff <<
\relative c' {
\cadenzaOn
- \override Staff . TimeSignature #'stencil = ##f
- \override Voice . Stem #'direction = #DOWN
- \override Voice . Beam #'breakable = ##t
- \once \override Voice . Beam #'grow-direction = #LEFT
+ \override Staff.TimeSignature.stencil = ##f
+ \override Voice.Stem.direction = #DOWN
+ \override Voice.Beam.breakable = ##t
+ \once \override Voice.Beam.grow-direction = #LEFT
a32[ b c d e f g a b c d \bar "" \break e f g a ] \bar "|"
} >>
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="In feathered beams, stems in knees reach up to the feathered part correctly.
\layout { ragged-right = ##t}
\relative c' {
- \override Beam #'grow-direction = #-1
-% \override Beam #'transparent = ##t
- \override Stem #'direction = #UP
+ \override Beam.grow-direction = #-1
+% \override Beam.transparent = ##t
+ \override Stem.direction = #UP
c32[
- \override Stem #'direction = #DOWN
+ \override Stem.direction = #DOWN
c''32 c32
- \override Stem #'direction = #UP
+ \override Stem.direction = #UP
c,,32]
- \override Beam #'grow-direction = #1
-% \override Beam #'transparent = ##t
- \override Stem #'direction = #DOWN
+ \override Beam.grow-direction = #1
+% \override Beam.transparent = ##t
+ \override Stem.direction = #DOWN
c''32[
- \override Stem #'direction = #UP
+ \override Stem.direction = #UP
c,,32 c32
- \override Stem #'direction = #DOWN
+ \override Stem.direction = #DOWN
c''32]
}
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
%
\featherDurations #(ly:make-moment 3 4) \relative c'' {
- \override Beam #'grow-direction = #LEFT
+ \override Beam.grow-direction = #LEFT
c16[
c c c
c c c c ]
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "In French style beaming, the stems do not go between beams."
\relative c'
{
- \override Stem #'french-beaming = ##t
+ \override Stem.french-beaming = ##t
c16[ c c c]
c8[ c16 e16 f16 g16 g8]
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc=" Funky kneed beams with beamlets also work. The beamlets
\layout { ragged-right = ##t}
\relative c' {
- \once \override Stem #'direction = #UP
+ \once \override Stem.direction = #UP
c16
- \once \override Stem #'direction = #DOWN
+ \once \override Stem.direction = #DOWN
c''8 c,,16
- \once \override Stem #'direction = #UP
+ \once \override Stem.direction = #UP
c16
- \once \override Stem #'direction = #DOWN
+ \once \override Stem.direction = #DOWN
c''8 c16
- \once \override Stem #'direction = #DOWN
+ \once \override Stem.direction = #DOWN
c16 c,,8
- \once \override Stem #'direction = #UP
+ \once \override Stem.direction = #UP
c16
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "In complex configurations of knee beaming, according to
\relative c'
{
- \override Beam #'auto-knee-gap = #7
+ \override Beam.auto-knee-gap = #7
\set subdivideBeams = ##t
\time 8/8
c,16[ g'''16
-\version "2.16.0"
+\version "2.17.6"
\header {
%% \once.
%%
- \once \override Stem
- #'beaming = #(cons (list 1 2) (list 0 2 4))
+ \once \override Stem.beaming = #(cons (list 1 2) (list 0 2 4))
c
- \once \override Stem
- #'beaming = #(cons (list 0 2 4) (list 0 1 4))
+ \once \override Stem.beaming = #(cons (list 0 2 4) (list 0 1 4))
c c c]
}
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
}
c]
% only works for the right edge, sorry.
- \override Beam #'break-overshoot = #'(-0.5 . 0.5)
+ \override Beam.break-overshoot = #'(-0.5 . 0.5)
\set stemLeftBeamCount = #2
c8[
c16
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc=" Beams on ledgered notes should always reach the middle staff
f8[ f] f64[ f]
\grace {
f8[ e8]
- \override Stem #'no-stem-extend = ##f
+ \override Stem.no-stem-extend = ##f
f8[ e8]
- \revert Stem #'no-stem-extend
+ \revert Stem.no-stem-extend
}
f8[ f]
%% FIXME: This file should actually NOT produce any warnings!
#(ly:set-option 'warning-as-error #f)
-\version "2.16.0"
+\version "2.17.6"
\layout {
ragged-right = ##t
\filler
%{
- \once \override Beam #'inspect-quants = #'(2.2 . 2.2)
+ \once \override Beam.inspect-quants = #'(2.2 . 2.2)
\assertBeamQuant
a8[ a]
\filler
}
-\version "2.16.0"
+\version "2.17.6"
\layout {
ragged-right = ##t
\relative c' {
\times 2/3 {r8[ c' g']}
- \override Stem #'stemlet-length = #0.5
+ \override Stem.stemlet-length = #0.5
\times 2/3 {r8[ c, g']}
}
\layout {
ragged-right = ##t
}
-\version "2.16.0"
+\version "2.17.6"
\relative c'' {
- \override Stem #'max-beam-connect = #1
+ \override Stem.max-beam-connect = #1
c16[ c16]
}
-\version "2.16.0"
+\version "2.17.6"
\header {
}
\relative c'' {
- \override Score.SpacingSpanner #'shortest-duration-space = #3.0
+ \override Score.SpacingSpanner.shortest-duration-space = #3.0
c4-\bendAfter #+5
c4-\bendAfter #+4
c4-\bendAfter #+3
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The default callback for break-align-anchor in clefs and time/@/key
}
{
- \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+ \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
c1
\key cis \major
- \once \override Staff.KeySignature #'break-align-anchor-alignment = #LEFT
+ \once \override Staff.KeySignature.break-align-anchor-alignment = #LEFT
\mark \default
cis1
\key ces \major
- \once \override Staff.KeySignature #'break-align-anchor-alignment = #RIGHT
+ \once \override Staff.KeySignature.break-align-anchor-alignment = #RIGHT
\mark \default
ces1
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The break-align-anchor property of a break-aligned grob gives
}
{
- \override Score.RehearsalMark #'break-align-symbols = #'(staff-bar)
+ \override Score.RehearsalMark.break-align-symbols = #'(staff-bar)
c'1
- \once \override Staff.BarLine #'break-align-anchor = #-5
+ \once \override Staff.BarLine.break-align-anchor = #-5
\mark \default
\noBreak
c'1
- \once \override Staff.BarLine #'break-align-anchor = #5
+ \once \override Staff.BarLine.break-align-anchor = #5
\mark \default
\noBreak
c'1
\finalis
}
}
+
+mus = \relative f' {
+ \clef tenor
+ c g c
+ c \virgula g c
+ c \caesura g c
+ c \divisioMinima g c
+ c \divisioMaior g c
+ c \divisioMaxima g c
+ \finalis
+}
+
+\new Staff \with {
+ \remove Bar_engraver
+} {
+ \context Voice \with {
+ \remove Stem_engraver
+ } {
+ \mus
+} }
+
+\new Staff \with {
+ \override StaffSymbol #'line-positions = #'(-2 0 2 4)
+ \remove Bar_engraver
+} {
+ \context Voice \with {
+ \remove Stem_engraver
+ } {
+ \mus
+} }
+
+\new Staff \with {
+ \override StaffSymbol #'line-count = #6
+ \remove Bar_engraver
+} {
+ \context Voice \with {
+ \remove Stem_engraver
+ } {
+ \mus
+} }
+
+\new Staff \with {
+ \override StaffSymbol #'line-count = #2
+ \remove Bar_engraver
+} {
+ \context Voice \with {
+ \remove Stem_engraver
+ } {
+ \mus
+} }
+
+\new Staff \with {
+ \override StaffSymbol #'line-positions = #'(-4 -2 2 5)
+ \remove Bar_engraver
+} {
+ \context Voice \with {
+ \remove Stem_engraver
+ } {
+ \mus
+} }
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Breathing signs are positioned correctly on custom staves
}
\relative c' {
- \override Staff.StaffSymbol #'line-positions = #'(-7 -5 -3 -1)
+ \override Staff.StaffSymbol.line-positions = #'(-7 -5 -3 -1)
b2 \breathe b
- \override BreathingSign #'direction = #DOWN
+ \override BreathingSign.direction = #DOWN
\breathe
}
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc="
Breathing signs are available in different tastes: commas (default),
\new Staff {
\relative c'' {
%% by default, \breathe uses the rcomma, just as if saying:
- %% \override BreathingSign #'text =
+ %% \override BreathingSign.text =
%% #(make-musicglyph-markup "scripts.rcomma")
%%
c4 c \breathe c c |
%% rvarcomma and lvarcomma are variations of the default rcomma
%% and lcomma
%%
- \override Staff.BreathingSign #'text =
+ \override Staff.BreathingSign.text =
#(make-musicglyph-markup "scripts.rvarcomma")
c4 c \breathe c c |
%% wedge
%%
- \override BreathingSign #'text =
+ \override BreathingSign.text =
#(make-musicglyph-markup "scripts.upbow")
c4 c \breathe c c |
%% caesurae
%%
- \override BreathingSign #'text =
+ \override BreathingSign.text =
#(make-musicglyph-markup "scripts.caesura.curved")
c4 c \breathe c c |
- \override BreathingSign #'text =
+ \override BreathingSign.text =
#(make-musicglyph-markup "scripts.caesura.straight")
c4 c \breathe c c |
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "LilyPond knows that breves and longas are wider than whole notes
gis'1
gis'\breve*1/2
gis'\longa*1/4
- \override NoteHead #'style = #'altdefault
+ \override NoteHead.style = #'altdefault
gis'\breve*1/2
}
\score {
\new Staff {
\repeat unfold 8 { a'\breve*1/16 }
- \override NoteHead #'style = #'altdefault
+ \override NoteHead.style = #'altdefault
\repeat unfold 8 { a'\breve*1/16 }
}
\layout {
\context {
\Score
- \override SpacingSpanner
- #'common-shortest-duration = #(ly:make-moment 1 1 )
+ \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 1 )
}
}
}
--- /dev/null
+\version "2.17.6"
+
+\header {
+ texidoc = "Users can override the @code{text} property of
+@code{ChordName}.
+"
+}
+
+\new ChordNames \chordmode {
+ a b c:7
+ \once \override ChordName.text = #"foo"
+ d
+}
\ No newline at end of file
--- /dev/null
+\version "2.17.2"
+
+\header {
+ texidoc = "Chord tremolos adapt to the presence of accidentals.
+"
+}
+
+{
+ \repeat tremolo 16 { c''32 d'' }
+ \repeat tremolo 16 { c''32 <dis''> }
+ \repeat tremolo 16 { c''32 <dis'' fis''> }
+ \repeat tremolo 8 { c''32 d'' }
+ \repeat tremolo 8 { c''32 <dis''> }
+ \repeat tremolo 8 { c''32 <dis'' fis''> }
+ \repeat tremolo 4 { c''32 d'' }
+ \repeat tremolo 4 { c''32 <dis''> }
+ \repeat tremolo 16 { b''32 <cis'''> }
+}
\ No newline at end of file
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc="@code{staffLineLayoutFunction} is used to change the position of the notes.
This sets @code{staffLineLayoutFunction} to @code{ly:pitch-semitones} to
clefPosition = #(+ -6 7)
}
{
- \override Staff.StaffSymbol #'line-count = #5
+ \override Staff.StaffSymbol.line-count = #5
\time 4/4
<<
\scales
-\version "2.16.0"
+\version "2.17.6"
\header {
\relative c' {
- \override Staff.OctavateEight #'break-visibility = #all-invisible
+ \override Staff.OctavateEight.break-visibility = #all-invisible
\clef "treble_8"
c2 c |
c c | \break
c \clef "tenor" c |
- \revert Staff.OctavateEight #'break-visibility
+ \revert Staff.OctavateEight.break-visibility
\clef "treble_8"
c2 c |
c c | \break
--- /dev/null
+\version "2.17.7"
+
+\header {
+
+ texidoc="Octavate symbols may be parenthesized or bracketed by using
+parentheses or brackets in the command string."
+
+}
+\score {
+ \new Staff {
+ \clef "G^(8)" g''1 |
+ \clef "bass_[15]" c,,1 |
+ \clef "C^(8)" c''1
+ }
+}
-\version "2.16.0"
+\version "2.17.6"
\header{
\clef "varbaritone"c'1^"varbaritone" \bar "||"
\clef "bass"c'1^"bass" \bar "||"
\clef "subbass"c'1^"subbass" \bar "||"
- \override Staff.Clef #'full-size-change = ##t
+ \override Staff.Clef.full-size-change = ##t
\clef "treble" c'1^"full-size-change = #t" \bar "|."
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Clusters behave well across line breaks."
}
<<
\time 2/4
\new Staff {
- \override ClusterSpanner #'style = #'ramp
+ \override ClusterSpanner.style = #'ramp
\makeClusters \fragment
r4
- \override ClusterSpanner #'style = #'leftsided-stairs
+ \override ClusterSpanner.style = #'leftsided-stairs
\makeClusters \fragment
r4
- \override ClusterSpanner #'style = #'rightsided-stairs
+ \override ClusterSpanner.style = #'rightsided-stairs
\makeClusters \fragment
r4
- \override ClusterSpanner #'style = #'centered-stairs
+ \override ClusterSpanner.style = #'centered-stairs
\makeClusters \fragment
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "If dotted note heads must remain on the left side,
\relative c {
\clef bass
- \override Staff.NoteCollision #'prefer-dotted-right = ##t
+ \override Staff.NoteCollision.prefer-dotted-right = ##t
<< <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 } >>
- \override Staff.NoteCollision #'prefer-dotted-right = ##f
+ \override Staff.NoteCollision.prefer-dotted-right = ##f
<< <b g' >4 ^"prefer-dotted-right = #f" \\ { c8. d16 } >>
<< <b g' >4 \\ { d8. d16 } >>
<< <b g' >4 \\ { f'8. d16 } >>
}
-\version "2.16.0"
+\version "2.17.6"
\paper{ ragged-right=##t }
\new Staff \relative c' <<
{ fis4.
- \override Staff.NoteCollision #'prefer-dotted-right = ##f
+ \override Staff.NoteCollision.prefer-dotted-right = ##f
fis4. }
\\
{ \autoBeamOff e8 e e e e e e }
texidoc = "Collision resolution may be forced manually with @code{force-hshift}. "
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
\relative c' {
<< { f
- \override NoteColumn #'force-hshift = #0.1
+ \override NoteColumn.force-hshift = #0.1
f } \\
{ e e }
>>
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "If @code{NoteCollision} has
\context Staff \relative c'' <<
{
g8[ g8]
- \override Staff.NoteCollision #'merge-differently-dotted = ##t
+ \override Staff.NoteCollision.merge-differently-dotted = ##t
g8[ g8]
g4. r8 g8. g16
g8 g4 r8 g4
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc =
\context Staff \relative c'' <<
{
- \override Staff.NoteCollision #'merge-differently-headed = ##t
+ \override Staff.NoteCollision.merge-differently-headed = ##t
c2 c8 c4.
c2
}\\
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Mixed collisions with whole and longer notes
\layout{ragged-right=##t}
\relative c'' {
- \override Score.NoteHead #'style = #'altdefault
+ \override Score.NoteHead.style = #'altdefault
<<
{ c1 c2*2 c1 c4*4 c1 c\breve*1/2 c\breve*1/2 b\breve*1/2 }
\\
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc = "Each grob can have a color assigned to it.
\paper { ragged-right = ##t }
\relative c' {
- \override Accidental #'color = #darkgreen
- \override Beam #'color = #cyan
- \override NoteHead #'color = #darkyellow
+ \override Accidental.color = #darkgreen
+ \override Beam.color = #cyan
+ \override NoteHead.color = #darkyellow
c4
- \override NoteHead #'color = #red
+ \override NoteHead.color = #red
f
- \override NoteHead #'color = #darkmagenta
+ \override NoteHead.color = #darkmagenta
g
- \override NoteHead #'color = #darkblue
+ \override NoteHead.color = #darkblue
b
- \override NoteHead #'color = #green
- \override Stem #'color = #blue
- \override Flag #'color = #magenta
+ \override NoteHead.color = #green
+ \override Stem.color = #blue
+ \override Flag.color = #magenta
e8 es d dis e4 r
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Create compound time signatures. The argument is a Scheme list
\relative c' {
+ \override Staff.TimeSignature.break-visibility = #'#(#f #t #t)
\compoundMeter #'(1 2 3 4 8)
\repeat unfold 10 c8 \repeat unfold 20 c16 \break
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Context modifications can be stored into a variable as a
ctxmod = \with {
\remove "Time_signature_engraver"
\consists "Ambitus_engraver"
- \override StaffSymbol #'line-count = 4
+ \override StaffSymbol.line-count = 4
}
music = \relative c'' { \key fis \minor c1 d e }
\layout {
\context { \Staff
\ctxmod
- \override NoteHead #'style = #'petrucci
+ \override NoteHead.style = #'petrucci
}
}
}
>>
\layout {
\context { \Staff
- \override StaffSymbol #'line-count = 3
- \override NoteHead #'style = #'petrucci
+ \override StaffSymbol.line-count = 3
+ \override NoteHead.style = #'petrucci
}
% Should override the above definitions, but not reset others
\context { \Staff
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Context modifications can be stored into a variable as a
ctxmod = \with {
\remove "Time_signature_engraver"
\consists "Ambitus_engraver"
- \override StaffSymbol #'line-count = 4
+ \override StaffSymbol.line-count = 4
}
+\layout {
+ \context {
+ \Score
+ \remove "Mark_engraver"
+ \remove "Staff_collecting_engraver"
+ }
+ \context {
+ \Staff
+ \consists "Mark_engraver"
+ \consists "Staff_collecting_engraver"
+ }
+}
+
+
music = \relative c'' { \key fis \minor c1 d e }
\score { <<
+ \override Score.RehearsalMark.self-alignment-X = #LEFT
+ \override Score.RehearsalMark.font-size = #-2
% No modifications:
- \new Staff { \music }
- % Some context modifications manually written in a \with block
+ \new Staff { \mark \markup { No modifications } \music }
\new Staff \with {
\remove "Time_signature_engraver"
\consists "Ambitus_engraver"
- \override StaffSymbol #'line-count = 4
- } { \music }
+ \override StaffSymbol.line-count = 4
+ } {
+ \mark
+ \markup { "Remove time sig, add ambitus, set staff to 4 lines" }
+ \music }
+ % Some context modifications manually written in a \with block
+ \new Staff \with \ctxmod {
+ \mark \markup { "The same mods using a variable" } \music
+ }
% The same mods as direct value of \with
- \new Staff \with \ctxmod { \music }
- % Mods as part of a \with block
- \new Staff \with { \ctxmod } { \music }
+ \new Staff \with { \ctxmod } {
+ \mark \markup { "The same mods using a variable and \with" }
+ \music
+ }
% Mods before a context mod in a with block are working:
\new Staff \with {
\remove "Clef_engraver"
\ctxmod
- } { \music }
+ } {
+ \mark
+ \markup { "Remove clef and use variable to add other changes as above" }
+ \music
+ }
% Mods before and after a context mod in a with block are working:
\new Staff \with {
\remove "Clef_engraver"
\ctxmod
\remove "Key_engraver"
- } { \music }
+ } { \mark \markup { "Also remove clef and key engravers" } \music }
% Mods can be inserted instead of a \with block (i.e. \with is not required)
- \new Staff \ctxmod { \music }
- \new Staff { \music }
+ \new Staff \ctxmod { \mark \markup { "The same mods as staff 2" } \music }
+ \new Staff { \mark \markup { "Back to default" } \music }
>>
}
-\version "2.16.0"
+\version "2.17.6"
instrument = \relative c' {
\repeat unfold 40 { c8 }
c2 c |
% Change the break-align-orders of the score so that cue-clef comes after bar-line
- \override Score.BarLine #'space-alist #'cue-clef = #'(minimum-space . 1.0)
- \override Score.BreakAlignment #'break-align-orders =
+ \override Score.BarLine.space-alist.cue-clef = #'(minimum-space . 1.0)
+ \override Score.BreakAlignment.break-align-orders =
##(( ;; end-of-line:
left-edge cue-end-clef ambitus breathing-sign clef staff-bar
key-cancellation key-signature time-signature cue-clef custos)
c2 c2 |
% Revert back to default
- \revert Score.BarLine #'(space-alist cue-clef)
- \revert Score.BreakAlignment #'break-align-orders
+ \revert Score.BarLine.space-alist.cue-clef
+ \revert Score.BreakAlignment.break-align-orders
\cueDuringWithClef #"instrQuote" #UP #"bass" { R1 }
c2 c2 |
}
--- /dev/null
+\version "2.17.7"
+
+\header {
+ texidoc = "Optional octavation for clefs for cue notes is
+supported by using parentheses or brackets around the octavation number."
+}
+
+vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
+\addQuote vIQuote { \vI }
+
+Solo = \relative c' {
+ \clef "treble_8" c1 |
+ \cueDuringWithClef #"vIQuote" #UP #"bass^(15)" { R1 } |
+ c1 | \break
+ c c
+ \clef "bass^8" c1 |
+ \cueDuringWithClef #"vIQuote" #UP #"G_[8]" { R1 R1 } |
+ c
+ \cueDuringWithClef #"vIQuote" #UP #"treble_(8)" { R1 \break R } |
+ c
+}
+
+\score {
+ <<
+ \new Staff \new Voice \Solo
+ >>
+}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Custodes may be engraved in various styles."
}
{
- \override Staff.Custos #'neutral-position = #4
+ \override Staff.Custos.neutral-position = #4
- \override Staff.Custos #'style = #'hufnagel
+ \override Staff.Custos.style = #'hufnagel
c'1^"hufnagel"
\break < d' a' f''>1
- \override Staff.Custos #'style = #'medicaea
+ \override Staff.Custos.style = #'medicaea
c'1^"medicaea"
\break < d' a' f''>1
- \override Staff.Custos #'style = #'vaticana
+ \override Staff.Custos.style = #'vaticana
c'1^"vaticana"
\break < d' a' f''>1
- \override Staff.Custos #'style = #'mensural
+ \override Staff.Custos.style = #'mensural
c'1^"mensural"
\break < d' a' f''>1
}
-\version "2.16.0"
+\version "2.17.6"
#(use-modules (srfi srfi-13)
(ice-9 format))
\test ##[ \unset Score . skipBars #] % PropertyUnset
\test ##[ \unset autoBeaming #]
%% Layout properties
-\test ##[ \override Staff . Stem #'thickness = #4.0 #] % OverrideProperty
-\test ##[ \once \override Beam #'beam-thickness = #0.6 #]
-\test ##[ \revert Staff . Stem #'thickness #] % RevertProperty
-\test ##[ \revert Beam #'beam-thickness #]
+\test ##[ \override Staff.Stem.thickness = #4.0 #] % OverrideProperty
+\test ##[ \once \override Beam.beam-thickness = #0.6 #]
+\test ##[ \revert Staff.Stem.thickness #] % RevertProperty
+\test ##[ \revert Beam.beam-thickness #]
\test "NOT A BUG" ##[ \oneVoice #] % resetting a bunch of properties
-\test ##[ \override StaffGrouper #'(staff-staff-spacing basic-distance) = #7 #] % nested properties
-\test ##[ \revert StaffGrouper #'(staff-staff-spacing basic-distance) #] % nested properties
+\test ##[ \override StaffGrouper.staff-staff-spacing.basic-distance = #7 #] % nested properties
+\test ##[ \revert StaffGrouper.staff-staff-spacing.basic-distance #] % nested properties
%% \applyOutput
\test ##[ \applyOutput #'Foo #(lambda (arg) (list)) #]
\test ##[ \ottava #1 #] % OttavaMusic
%% \tweak
-\test ##[ < \tweak #'duration-log #2 c > #]
-\test ##[ < c \tweak #'transparent ##t e > #]
-\test ##[ < \tweak #'color #'(1.0 0.0 0.0) \tweak #'duration-log #2 c > #]
-\test ##[ c-\tweak #'font-size #3 -> #]
-\test ##[ < \tweak Accidental #'color #'(1.0 0.0 0.0) cis eis g > #]
+\test ##[ < \tweak duration-log #2 c > #]
+\test ##[ < c \tweak transparent ##t e > #]
+\test ##[ < \tweak color #'(1.0 0.0 0.0) \tweak duration-log #2 c > #]
+\test ##[ c-\tweak font-size #3 -> #]
+\test ##[ < \tweak Accidental.color #'(1.0 0.0 0.0) cis eis g > #]
%% end test.
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The @code{dot-count} property
\relative c'' {
c4.. a16
- \override Dots #'dot-count = #4
+ \override Dots.dot-count = #4
g4.. e16
- \override Dots #'dot-count = #0
+ \override Dots.dot-count = #0
c4. r8 r2
}
-\version "2.16.0"
+\version "2.17.5"
\header {
texidoc = "Three types of double repeat bar line are supported."
\new Staff \relative c' {
c1
\mark "\":|:\""
- \bar ":|:"
+ \bar ":..:"
c1
\mark "\":|.|:\""
\bar ":|.|:"
}
-\version "2.16.0"
+\version "2.17.6"
drh = \drummode { cymc4.^"crash" hhc16^"h.h." hh \repeat "unfold" 5 {hhc8 hho hhc8 hh16 hh} hhc4 r4 r2 }
drl = \drummode {\repeat "unfold" 3 {bd4 sn8 bd bd4 << bd ss >> } bd8 tommh tommh bd toml toml bd tomfh16 tomfh }
<<
\new DrumStaff \with {
drumStyleTable = #timbales-style
- \override StaffSymbol #'line-count = #2
- \override BarLine #'bar-extent = #'(-1 . 1)
+ \override StaffSymbol.line-count = #2
+ \override BarLine.bar-extent = #'(-1 . 1)
} <<
\set Staff.instrumentName = "timbales"
\timb
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Setting the style of a @code{DynamicTextSpanner} to @code{'none}
}
\relative c'' {
- \override DynamicTextSpanner #'style = #'none
+ \override DynamicTextSpanner.style = #'none
c2\cresc g,2
\break
g2 c'2\f
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "If the line for a @code{DynamicTextSpanner} is hidden, the
g4\p\cresc g g g
g,1\f
- \override DynamicTextSpanner #'style = #'none
+ \override DynamicTextSpanner.style = #'none
g'4\p\cresc g g g
g,1\f
}
--- /dev/null
+\version "2.17.2"
+
+\header {
+ texidoc = "Dynamics do not horizontally shift when attached to
+an axis-group extremal cross staff grob that's extremal side
+(UP or DOWN) is the same as its direction.
+"
+}
+
+\new PianoStaff <<
+ \new Staff = "up" {
+ s1 |
+ }
+ \new Staff = "down" {
+ \clef bass
+ \stemDown
+ % keep staff alive
+ <c,, c,>8 [ <c,, c,>8_\f
+ \change Staff = "up"
+ g' g' ]
+ r2 |
+ }
+>>
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Text spanners work in the @code{Dynamics} context."
c1 | c
}
\new Dynamics {
- \override TextSpanner #'(bound-details left text) = #"rit."
+ \override TextSpanner.bound-details.left.text = #"rit."
s1\startTextSpan
s1\stopTextSpan
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The space between an absolute dynamic and a dynamic text
span can be changed using @code{'right-padding}.
\relative c' {
\dimTextDim
- \once \override DynamicText #'right-padding = #0
+ \once \override DynamicText.right-padding = #0
c4\fff\> c c c\!
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = " Easy-notation (or Ez-notation) prints names in note heads.
f2 e
f4 e
- \override NoteHead #'note-names = #'#("U" "V" "W" "X" "Y" "Z" "z")
+ \override NoteHead.note-names = #'#("U" "V" "W" "X" "Y" "Z" "z")
c2 d4 e
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "An episema can be typeset over a single neume or a
\include "gregorian.ly"
\new VaticanaVoice {
- \revert Score.SpacingSpanner #'packed-spacing
+ \revert Score.SpacingSpanner.packed-spacing
a\episemInitium\episemFinis
\[ a\episemInitium \pes b \flexa a\episemFinis \]
\[ a\episemInitium \pes b \flexa a b\episemFinis \flexa a \]
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Music events can be extracted from a score with event
(parser location text)
(string?)
#{
- \override TextSpanner #'(bound-details left text) = $text
+ \override TextSpanner.bound-details.left.text = $text
#})
vlnone = \new Staff {
\set Staff.instrumentName = "violin-1"
\set Staff.midiInstrument = "violin"
- \override TextSpanner #'style = #'line
- \override TextSpanner #'(bound-details right padding) = #-1
- \override TextSpanner #'(bound-details left stencil-align-dir-y) =
+ \override TextSpanner.style = #'line
+ \override TextSpanner.bound-details.right.padding = #-1
+ \override TextSpanner.bound-details.left.stencil-align-dir-y =
#CENTER
- \override TextSpanner #'(bound-details right text) =
+ \override TextSpanner.bound-details.right.text =
\markup { \draw-line #'(0 . -1) }
\relative c' {
\key d \major
#(define (adjust-slash-stencil-default num forward stencil mag)
stencil)
-unsetExceptions = #(define-music-function (parser location) ()
+unsetExceptions = #(define-void-function (parser location) ()
; (set! horizontal-slash-interval horizontal-slash-interval-default)
; (set! adjust-slash-stencil adjust-slash-stencil-default)
- (make-music 'Music 'void #t)
)
<<
-\version "2.16.0"
+\version "2.17.6"
\header {
<3 6\\ >
<"V7" ["bla" 6] \markup{ \musicglyph #"rests.2"} >
- \once \override BassFigureAlignment #'stacking-dir = #UP
+ \once \override BassFigureAlignment.stacking-dir = #UP
<3 [5 7]>
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "It is possible to associate
\set fingeringOrientations = #'(down left up)
< c-1 e-2 g-3 b-5 > 4
- \once \override Fingering #'staff-padding = #'()
+ \once \override Fingering.staff-padding = #'()
< c-1 e-2 g-3 b-5 > 4
\set fingeringOrientations = #'(up right)
\set fingeringOrientations = #'(right)
< c-1 e-2 g-3 b-5 > 8
- \override Fingering #'add-stem-support = ##t
+ \override Fingering.add-stem-support = ##t
\set fingeringOrientations = #'(up right)
< c-1 e-2 g-3 b-5 > 4.
--- /dev/null
+\version "2.17.6"
+
+\header {
+ texidoc = "Horizontal @code{Fingering} grobs that collide do not intersect.
+Non-intersecting @code{Fingering} grobs are left alone.
+"
+}
+
+\relative c'' {
+ \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> <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.17.6"
\header {
texidoc = "Fingerings work correctly with cross-staff beams."
\stemUp \music }
\new Staff="down" \new Voice {
\clef bass \stemDown
- \override Fingering #'direction = #down
+ \override Fingering.direction = #down
\transpose c c, \music }
>>
}
-\version "2.16.0"
+\version "2.17.6"
#(set-global-staff-size 17)
\header {
% Old settings: style set to default, 'mensural, 'no-flag; using the
% default C++ function ly:stem::calc-stem
{
- \override Score.RehearsalMark #'self-alignment-X = #LEFT
+ \override Score.RehearsalMark.self-alignment-X = #LEFT
\time 2/4
\mark "Default flags (C++)"
\testnotes
\mark "Symbol: 'mensural (C++)"
- \override Flag #'style = #'mensural
+ \override Flag.style = #'mensural
\testnotes
\mark "Symbol: 'no-flag (C++)"
- \override Flag #'style = #'no-flag
+ \override Flag.style = #'no-flag
\testnotes
}
% The same, but using the Scheme implementation of default-flag
{
- \override Score.RehearsalMark #'self-alignment-X = #LEFT
+ \override Score.RehearsalMark.self-alignment-X = #LEFT
\time 2/4
- \override Flag #'stencil = #default-flag
- \revert Flag #'style
+ \override Flag.stencil = #default-flag
+ \revert Flag.style
\mark "Default flags (Scheme)"
\testnotes
\mark "Symbol: 'mensural (Scheme)"
- \override Flag #'style = #'mensural
+ \override Flag.style = #'mensural
\testnotes
\mark "Symbol: 'no-flag (Scheme)"
- \override Flag #'style = #'no-flag
+ \override Flag.style = #'no-flag
\testnotes
}
% New scheme functions: normal-flag, mensural-flag, no-flag
{
- \override Score.RehearsalMark #'self-alignment-X = #LEFT
+ \override Score.RehearsalMark.self-alignment-X = #LEFT
\time 2/4
\mark "Function: normal-flag"
- \override Flag #'stencil = #normal-flag
+ \override Flag.stencil = #normal-flag
\testnotes
\mark "Function: mensural-flag"
- \override Flag #'stencil = #mensural-flag
+ \override Flag.stencil = #mensural-flag
\testnotes
\mark "Function: no-flag"
- \override Flag #'stencil = #no-flag
+ \override Flag.stencil = #no-flag
\testnotes
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The 'stencil property of the Flag grob can be set to a custom
(ly:stencil-translate rotated-flag (cons (- (/ stem-width 2)) 0))))
{
- \override Score.RehearsalMark #'self-alignment-X = #LEFT
+ \override Score.RehearsalMark.self-alignment-X = #LEFT
\time 2/4
\mark "Function: weight-flag (custom)"
- \override Flag #'stencil = #weight-flag
+ \override Flag.stencil = #weight-flag
\testnotes
\mark "Function: inverted-flag (custom)"
- \override Flag #'stencil = #inverted-flag
+ \override Flag.stencil = #inverted-flag
\testnotes
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Flags can be drawn straight in the style used by
stemLength = #(define-music-function (parser location length) (number?)
"Set the length of the next stem explicitly."
#{
- \once \override Stem #'length-fraction = #length
+ \once \override Stem.length-fraction = #length
#}
)
{
\autoBeamOff
\time 3/8
- \override Flag #'stencil = #modern-straight-flag
- \override Stem #'length-fraction = #'1.5
+ \override Flag.stencil = #modern-straight-flag
+ \override Stem.length-fraction = #'1.5
r8
\acciaccatura {
\stemDown
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Straight flag styles."
c''8 d''16 c''32 d''64 \acciaccatura {\stemDown c''8 \stemNeutral} d''64 }
{
- \override Score.RehearsalMark #'self-alignment-X = #LEFT
+ \override Score.RehearsalMark.self-alignment-X = #LEFT
\time 2/4
\mark "modern straight"
- \override Flag #'stencil = #modern-straight-flag
+ \override Flag.stencil = #modern-straight-flag
\testnotes
\mark "old straight (large angles)"
- \override Flag #'stencil = #old-straight-flag
+ \override Flag.stencil = #old-straight-flag
\testnotes
%
% \mark "custom slant"
% % flag thickness and spacing
% % up-flag angle and length
% % down-flag angle and length
-% \override Flag #'stencil = #(straight-flag 0.35 0.8 -5 0.5 60 2.0)
+% \override Flag.stencil = #(straight-flag 0.35 0.8 -5 0.5 60 2.0)
% \testnotes
}
"
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##T
\layout {
\context {
\Score
- \override PaperColumn #'keep-inside-line = ##f
+ \override PaperColumn.keep-inside-line = ##f
}
}
}
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
% change for other default global staff size.
\layout {
\context {
\Score
- \override PaperColumn #'keep-inside-line = ##f
+ \override PaperColumn.keep-inside-line = ##f
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
{
- \override Score.PaperColumn #'keep-inside-line = ##f
- \override Staff.TimeSignature #'font-name = #"Times New Roman"
+ \override Score.PaperColumn.keep-inside-line = ##f
+ \override Staff.TimeSignature.font-name = #"Times New Roman"
\time 3/4
\set Score.skipBars = ##t
- \override Staff.MultiMeasureRestText #'font-name = #"LuxiMono"
+ \override Staff.MultiMeasureRestText.font-name = #"LuxiMono"
R1*21^"Rest in LuxiMono"
c'1_\markup {
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "This is an example of automatic footnote numbering
where the number is reset on each page. It uses the symbol-footnotes
\markup { h i }
\relative c' {
-\footnote #'(1 . -1) #'NoteHead \markup { j } \default
+\footnote #'(1 . -1) \markup { j } NoteHead
a b c d }
\pageBreak
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "This regtest makes sure that footnote numbers are laid out
in the correct vertical order.
<<
\new Staff \relative c' {
d4 e
- \once \override FootnoteItem #'numbering-assertion-function =
+ \once \override FootnoteItem.numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 0))
< f \footnote #'(1 . -1) \markup { n } a c >
- \once \override FootnoteSpanner #'numbering-assertion-function =
+ \once \override FootnoteSpanner.numbering-assertion-function =
#(simultaneous-footnote-numbering-assertion-function 2 4)
a8-\footnote #'(1 . 1) \markup { p } \<
-\footnote #'(1 . 1) \markup { o } [ b c d ] a4 b c\f |
d a b c |\break
d,4 e
- \once \override FootnoteItem #'numbering-assertion-function =
+ \once \override FootnoteItem.numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 6))
< f \footnote #'(1 . -1) \markup { n } a c >
- \once \override FootnoteSpanner #'numbering-assertion-function =
+ \once \override FootnoteSpanner.numbering-assertion-function =
#(simultaneous-footnote-numbering-assertion-function 8 10)
a8-\footnote #'(1 . 1) \markup { p } \<
-\footnote #'(1 . 1) \markup { o } [ b c d ] a4 b c |
d a b c\f |\pageBreak
d,4 e
- \once \override FootnoteItem #'numbering-assertion-function =
+ \once \override FootnoteItem.numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 12))
< f \footnote #'(1 . -1) \markup { n } a c >
- \once \override FootnoteSpanner #'numbering-assertion-function =
+ \once \override FootnoteSpanner.numbering-assertion-function =
#(simultaneous-footnote-numbering-assertion-function 14 16)
a8-\footnote #'(1 . 1) \markup { p } \<
- -\footnote #'(1 . 1) #'Beam \markup { o } [ b c d ] a4 b c |
+ -\single\footnote #'(1 . 1) \markup { o } Beam [ b c d ] a4 b c |
d a b c\! |\break
}
\new Staff \relative c' {
d4 e
- \once \override FootnoteItem #'numbering-assertion-function =
+ \once \override FootnoteItem.numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 1))
< f \footnote #'(1 . -1) \markup { n } a c >
- \once \override FootnoteSpanner #'numbering-assertion-function =
+ \once \override FootnoteSpanner.numbering-assertion-function =
#(simultaneous-footnote-numbering-assertion-function 3 5)
- a8-\footnote #'(1 . 1) #'Hairpin \markup { p } \<
+ a8-\single\footnote #'(1 . 1) \markup { p } Hairpin \<
-\footnote #'(1 . 1) \markup { o } [ b c d ] a4 b c\f |
d a b c |\break
d,4 e
- \once \override FootnoteItem #'numbering-assertion-function =
+ \once \override FootnoteItem.numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 7))
< f \footnote #'(1 . -1) \markup { n } a c >
- \once \override FootnoteSpanner #'numbering-assertion-function =
+ \once \override FootnoteSpanner.numbering-assertion-function =
#(simultaneous-footnote-numbering-assertion-function 9 11)
a8-\footnote #'(1 . 1) \markup { p } \<
-\footnote #'(1 . 1) \markup { o } [ b c d ] a4 b c |
d a b c\f |\pageBreak
d,4 e
- \once \override FootnoteItem #'numbering-assertion-function =
+ \once \override FootnoteItem.numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 13))
< f \footnote #'(1 . -1) \markup { n } a c >
- \once \override FootnoteSpanner #'numbering-assertion-function =
+ \once \override FootnoteSpanner.numbering-assertion-function =
#(simultaneous-footnote-numbering-assertion-function 15 17)
- a8-\footnote #'(1 . 1) #'Hairpin \markup { p } \<
+ a8-\single\footnote #'(1 . 1) \markup { p } Hairpin \<
-\footnote #'(1 . 1) \markup { o } [ b c d ] a4 b c |
d a b c\! |\break
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "This is an example of automatic footnote numbering
where the number is not reset on each page. It uses the default
\markup { h i }
\relative c' {
- \once \override FootnoteItem #'numbering-assertion-function =
+ \once \override FootnoteItem.numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 3))
- \footnote #'(1 . -1) #'NoteHead \markup { j } \default
+ \footnote #'(1 . -1) \markup { j } NoteHead
a b c d
}
\relative c' {
d4 e
- \once \override FootnoteItem #'numbering-assertion-function =
+ \once \override FootnoteItem.numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 5))
< f \footnote #'(1 . -1) \markup { n } a c >
- \once \override FootnoteSpanner #'numbering-assertion-function =
+ \once \override FootnoteSpanner.numbering-assertion-function =
#(simultaneous-footnote-numbering-assertion-function 6 7)
a8-\footnote #'(1 . 1) \markup { p } \<
-\footnote #'(1 . 1) \markup { o } [ b c d ] a4 b c |
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "With grobs that have break visibility, footnotes will
automatically take the break visibility of the grob being footnoted.
{
\relative c' {
c1
- \footnote "foo" #'(0 . 2) #'TimeSignature "bar" \default
+ \footnote "foo" #'(0 . 2) "bar" Staff.TimeSignature
\time 3/4
\break \pageBreak
c2.
- \once \override Score . FootnoteItem #'break-visibility = ##(#f #f #t)
- \footnote "foo" #'(0 . 2) #'TimeSignature "bar" \default
+ \once \override Score.FootnoteItem.break-visibility = ##(#f #f #t)
+ \footnote "foo" #'(0 . 2) "bar" Staff.TimeSignature
\time 4/4
\break \pageBreak
c1 \bar "|."
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Footnotes are annotated at the correct place, and the
annotation goes to the correct page."
\book {
\relative c'' {
-b4-\footnote
+b4-\single\footnote
\markup { \tiny "1." }
- #'(0.5 . 0.5) #'Hairpin
- \markup { 1. \justify { Goes to the first broken spanner. } }
+ #'(0.5 . 0.5)
+ \markup { 1. \justify { Goes to the first broken spanner. } } Hairpin
\<
c d a
b c d a
b c d a
b c d a\!
-\once \override FootnoteSpanner #'spanner-placement = #RIGHT
-b4-\footnote
+\once \override FootnoteSpanner.spanner-placement = #RIGHT
+b4-\single\footnote
\markup { \tiny "2." }
- #'(0.5 . 0.5) #'Hairpin
- \markup { 2. \justify { Goes to the last broken spanner. } }
+ #'(0.5 . 0.5)
+ \markup { 2. \justify { Goes to the last broken spanner. } } Hairpin
\<
c d a
b c d a
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="
\new FretBoards {
\chordmode{
c1 |
- \override FretBoard #'fret-diagram-details
- #'orientation = #'landscape
+ \override FretBoard.fret-diagram-details.orientation = #'landscape
c1 |
- \override FretBoard #'fret-diagram-details
- #'orientation = #'opposing-landscape
+ \override FretBoard.fret-diagram-details.orientation = #'opposing-landscape
c1
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="
%% C major for guitar, with capo on third fret
% thinner capo
% verbose style
- \override TextScript #'fret-diagram-details
- #'capo-thickness = #0.2
+ \override TextScript.fret-diagram-details.capo-thickness = #0.2
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
(capo 3)
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="
(barre 5 1 3))}
%% C major for guitar, verbose style
- \override TextScript #'fret-diagram-details
- #'dot-radius = #0.3
+ \override TextScript.fret-diagram-details.dot-radius = #0.3
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(barre 5 1 3))}
%% C major for guitar, verbose style
- \revert TextScript #'(fret-diagram-details dot-radius)
- \once \override TextScript #'fret-diagram-details
- #'dot-color = #'white
+ \revert TextScript.fret-diagram-details.dot-radius
+ \once \override TextScript.fret-diagram-details.dot-color = #'white
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(barre 5 1 3))}
%% C major for guitar, verbose style
- \once \override TextScript #'fret-diagram-details
- #'dot-position = #0.5
+ \once \override TextScript.fret-diagram-details.dot-position = #0.5
c'1 ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="
\new Voice {
\textLengthOn
%% C major for guitar, verbose style
- \override TextScript #'fret-diagram-details
- #'finger-code = #'below-string
+ \override TextScript.fret-diagram-details.finger-code = #'below-string
c'1 ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(barre 5 1 3))}
%% C major for guitar, verbose style
- \override TextScript #'fret-diagram-details
- #'string-label-font-mag = #0.4
+ \override TextScript.fret-diagram-details.string-label-font-mag = #0.4
c'1 ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(barre 5 1 3))}
%% C major for guitar, verbose style
- \override TextScript #'fret-diagram-details
- #'finger-code = #'in-dot
+ \override TextScript.fret-diagram-details.finger-code = #'in-dot
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(barre 5 1 3))}
%% C major for guitar, verbose style
- \once \override TextScript #'fret-diagram-details
- #'dot-color = #'white
+ \once \override TextScript.fret-diagram-details.dot-color = #'white
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(barre 5 1 3))}
%% C major for guitar, verbose style
- \once \override TextScript #'fret-diagram-details
- #'dot-label-font-mag = #0.75
+ \once \override TextScript.fret-diagram-details.dot-label-font-mag = #0.75
c'1 ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 1 3 1)
(barre 5 1 3))}
%% dot color inversion, white on black
- \once \override TextScript #'fret-diagram-details
- #'dot-color = #'black
+ \once \override TextScript.fret-diagram-details.dot-color = #'black
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1 inverted)
(place-fret 1 3 1)
(barre 5 1 3))}
%% dot color inversion, black on white
- \once \override TextScript #'fret-diagram-details
- #'dot-color = #'white
+ \once \override TextScript.fret-diagram-details.dot-color = #'white
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1 inverted)
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="
(barre 5 1 3))}
%% C major for guitar, verbose style
- \override TextScript #'fret-diagram-details
- #'label-dir = #LEFT
- \override TextScript #'fret-diagram-details
- #'number-type = #'roman-upper
+ \override TextScript.fret-diagram-details.label-dir = #LEFT
+ \override TextScript.fret-diagram-details.number-type = #'roman-upper
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(barre 5 1 3))}
%% C major for guitar, verbose style
- \revert TextScript #'(fret-diagram-details label-dir)
- \override TextScript #'fret-diagram-details
- #'fret-label-font-mag = #0.4
- \override TextScript #'fret-diagram-details
- #'number-type = #'arabic
- \once \override TextScript #'fret-diagram-details
- #'fret-label-vertical-offset = #0.25
+ \revert TextScript.fret-diagram-details.label-dir
+ \override TextScript.fret-diagram-details.fret-label-font-mag = #0.4
+ \override TextScript.fret-diagram-details.number-type = #'arabic
+ \once \override TextScript.fret-diagram-details.fret-label-vertical-offset = #0.25
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(barre 5 1 3))}
%% C major for guitar, verbose style
- \revert TextScript #'(fret-diagram-details label-dir)
- \once \override TextScript #'fret-diagram-details
- #'number-type = #'custom
- \once \override TextScript #'fret-diagram-details
- #'fret-label-custom-format = #"~d°"
+ \revert TextScript.fret-diagram-details.label-dir
+ \once \override TextScript.fret-diagram-details.number-type = #'custom
+ \once \override TextScript.fret-diagram-details.fret-label-custom-format = #"~d°"
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="
\new Voice {
\textLengthOn
- \override TextScript #'fret-diagram-details
- #'orientation = #'landscape
+ \override TextScript.fret-diagram-details.orientation = #'landscape
%% C major for guitar, regular style
c'1 ^\markup {
\fret-diagram #"6-x;5-3-3;4-2-2;3-o;2-1;1-o;"}
%% C major for guitar with barre on fret 3, regular style
- \once \override TextScript #'fret-diagram-details
- #'label-dir = #LEFT
- \once \override TextScript #'fret-diagram-details
- #'barre-type = #'straight
+ \once \override TextScript.fret-diagram-details.label-dir = #LEFT
+ \once \override TextScript.fret-diagram-details.barre-type = #'straight
c' ^\markup {
\fret-diagram
#"f:1;s:1.2;6-x;c:5-1-3;5-3-1;4-5-2;3-5-3;2-5-4;1-3-1;"}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="
\new Voice {
\textLengthOn
- \override TextScript #'fret-diagram-details
- #'orientation = #'opposing-landscape
+ \override TextScript.fret-diagram-details.orientation = #'opposing-landscape
%% C major for guitar, regular style
c'1 ^\markup {
\fret-diagram #"6-x;5-3-3;4-2-2;3-o;2-1;1-o;"}
%% C major for guitar with barre on fret 3, regular style
- \once \override TextScript #'fret-diagram-details
- #'label-dir = #LEFT
- \once \override TextScript #'fret-diagram-details
- #'barre-type = #'straight
+ \once \override TextScript.fret-diagram-details.label-dir = #LEFT
+ \once \override TextScript.fret-diagram-details.barre-type = #'straight
c' ^\markup {
\fret-diagram
#"f:1;s:1.2;6-x;c:5-1-3;5-3-1;4-5-2;3-5-3;2-5-4;1-3-1;"}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="
(barre 5 1 3))}
%% C major for guitar, verbose style
- \once \override TextScript #'thickness = #1.5
+ \once \override TextScript.thickness = #1.5
c'1 ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(barre 5 1 3))}
%% C major for guitar, verbose style
- \once \override TextScript #'fret-diagram-details
- #'string-thickness-factor = #0.3
+ \once \override TextScript.fret-diagram-details.string-thickness-factor = #0.3
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="
\fret-diagram-terse #"x;x;o;2-1;3-2;2-3;"}
%% D major for guitar, terse style
- \once \override TextScript #'fret-diagram-details
- #'top-fret-thickness = #5
- \once \override TextScript #'fret-diagram-details
- #'xo-font-magnification = #0.3
+ \once \override TextScript.fret-diagram-details.top-fret-thickness = #5
+ \once \override TextScript.fret-diagram-details.xo-font-magnification = #0.3
d'1 ^\markup {
\fret-diagram-terse #"x;x;o;2-1;3-2;2-3;"}
%% D major for guitar, terse style
- \override TextScript #'fret-diagram-details
- #'mute-string = #"M"
- \override TextScript #'fret-diagram-details
- #'open-string = #"*"
- \override TextScript #'fret-diagram-details
- #'xo-padding = #0.5
+ \override TextScript.fret-diagram-details.mute-string = #"M"
+ \override TextScript.fret-diagram-details.open-string = #"*"
+ \override TextScript.fret-diagram-details.xo-padding = #0.5
d'1 ^\markup {
\fret-diagram-terse #"x;x;o;2-1;3-2;2-3;"}
texidoc = "When broken, glissandi can span multiple lines."
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
}
\relative c'' {
- \override Glissando #'breakable = ##t
- \override Glissando #'after-line-breaking = ##t
+ \override Glissando.breakable = ##t
+ \override Glissando.after-line-breaking = ##t
d1\glissando
\break s1
\break s1
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Broken glissandi anticipate the pitch on the next line."
\score {
\relative c' {
- \override Glissando #'after-line-breaking = ##t
- \override Glissando #'breakable = ##t
+ \override Glissando.after-line-breaking = ##t
+ \override Glissando.breakable = ##t
c1\glissando
\break
c'1
\score {
\relative c' {
- \override Glissando #'after-line-breaking = ##t
- \override Glissando #'breakable = ##t
+ \override Glissando.after-line-breaking = ##t
+ \override Glissando.breakable = ##t
c1\glissando
\break
c'1
texidoc = "If broken, Glissandi anticipate on the pitch of the next line."
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##T }
\relative c'' {
- \override Glissando #'breakable = ##t
+ \override Glissando.breakable = ##t
d1 \glissando |
\break
c,1
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Individual glissandi within a chord can be tweaked."
}
\relative c' {
- \once \override Voice . Glissando #'style =
+ \once \override Voice.Glissando.style =
#(lambda (grob)
(if (eq? 1 (ly:grob-property grob 'glissando-index)) 'zigzag 'default))
<d f a>1 \glissando s1 <f a c>
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "@code{NoteColumn} grobs can be skipped over by glissandi.
\relative c' {
a2 \glissando
- \once \override NoteColumn #'glissando-skip = ##t
+ \once \override NoteColumn.glissando-skip = ##t
f''4 d,
}
-\version "2.16.0"
+\version "2.17.6"
\header{
}
\new Staff \relative c''{
- \override Glissando #'breakable = ##t
+ \override Glissando.breakable = ##t
%% gliss non gliss and
c4 \glissando d e \glissando f \glissando \break
c \glissando d, \glissando e'
<< { e8 \glissando g8 } \\
{ \repeat unfold 4 d16 } >>
- \override Glissando #'style = #'zigzag
+ \override Glissando.style = #'zigzag
c4 \glissando c,, \glissando c' \glissando d
}
normal notes, if possible. They should never be longer, even if that
would lead to beam quanting problems."
}
-\version "2.16.0"
+\version "2.17.6"
\layout {
ragged-right = ##t
<< { c16[ b] } \\ >>
\grace { c16[ b] } d4
-% \override Beam #'inspect-quants =#'(2.8 . 2.5)
+% \override Beam.inspect-quants =#'(2.8 . 2.5)
% \grace { c16[ b] } d4
}
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc = "Here @code{startGraceMusic} should set @code{no-stem-extend} to
true; the two grace beams should be the same here.
\context Voice \relative c {
\grace {
f8[ e8]
- \override Stem #'no-stem-extend = ##t
+ \override Stem.no-stem-extend = ##t
f8[ e8]
- \revert Stem #'no-stem-extend
+ \revert Stem.no-stem-extend
}
a4
-\version "2.16.0"
+\version "2.17.5"
\header {
texidoc = "A volta repeat may begin with a grace. Consecutive
- ending and starting repeat bars are merged into one @code{:||:}."
+ ending and starting repeat bars are merged into one @code{:..:}."
}
\relative c' {
\repeat volta 2 {
- c1
+ c1
}
\repeat volta 2 {
\grace {c8 } c4
staves synchronized with the notes."
}
-\version "2.16.0"
+\version "2.17.6"
skips =
{
\time 12/8
- \once \override Score.GridLine #'thickness = #4.0
+ \once \override Score.GridLine.thickness = #4.0
s8
s8
s8
- \once \override Score.GridLine #'thickness = #3.0
+ \once \override Score.GridLine.thickness = #3.0
s8
s8
s8
- \once \override Score.GridLine #'thickness = #4.0
+ \once \override Score.GridLine.thickness = #4.0
s8
s8
s8
- \once \override Score.GridLine #'thickness = #3.0
+ \once \override Score.GridLine.thickness = #3.0
s8
s8
s8
\RhythmicStaff
\consists "Grid_point_engraver"
gridInterval = #(ly:make-moment 1 8)
- \override BarLine #'bar-extent = #'(-0.025 . 0.025)
+ \override BarLine.bar-extent = #'(-0.025 . 0.025)
}
\context {
\StaffGroup
\context {
\Score
\consists "Grid_line_span_engraver"
- \override SystemStartBrace #'transparent = ##t
+ \override SystemStartBrace.transparent = ##t
- \override NoteColumn #'X-offset = #-0.5
- \override NoteHead #'Y-offset = #0.75
+ \override NoteColumn.X-offset = #-0.5
+ \override NoteHead.Y-offset = #0.75
}
}
\new StaffGroup <<
\new RhythmicStaff \with
{
- \override NoteHead #'no-ledgers = ##t
+ \override NoteHead.no-ledgers = ##t
}
{
\stemUp
}
\new RhythmicStaff
{
- \override NoteHead #'transparent = ##t
- \override NoteHead #'no-ledgers = ##t
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Beam #'transparent = ##t
+ \override NoteHead.transparent = ##t
+ \override NoteHead.no-ledgers = ##t
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Beam.transparent = ##t
<< \skips
% force regular spacing by introducing notes.
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
}
\relative c''
{
<
- \tweak Accidental #'color #red cis4
- \tweak Accidental #'color #green es
+ \tweak Accidental.color #red cis4
+ \tweak Accidental.color #green es
g
>4
}
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
}
{
\set fingeringOrientations = #'(right)
<
- \tweak #'font-size #3 c
- \tweak #'color #red d-\tweak #'font-size #8 -4
- \tweak #'style #'cross g
- \tweak #'duration-log #1 a
+ \tweak font-size #3 c
+ \tweak color #red d-\tweak font-size #8 -4
+ \tweak style #'cross g
+ \tweak duration-log #1 a
>4
}
\header {
- texidoc = "If a hairpin ends on the first note of a new stave, we
+ texidoc = "If a hairpin ends on the first note of a new staff, we
do not print that ending. But on the previous line, this hairpin
should not be left open, and should end at the bar line. "
}
-\version "2.16.0"
+\version "2.17.6"
+
+\layout {
+ line-width = 4.\cm
+}
\relative c' {
c1\>
\break
c1\!
+ \override Hairpin.to-barline = ##f
+ c1\>
+ \break
+ c1\!
}
-\version "2.16.0"
+\version "2.17.6"
\header {
\layout { ragged-right = ##t }
\relative c'' {
- \override Hairpin #'circled-tip = ##t
+ \override Hairpin.circled-tip = ##t
c1\< d\! d\> c\!
- \override Hairpin #'to-barline = ##f
+ \override Hairpin.to-barline = ##f
e\> c\< d\! \break
c\< \break
e d\! c\> \break
--- /dev/null
+\version "2.16.0"
+
+\header {
+ texidoc = "Broken hairpins are not printed too high after treble clefs.
+"
+}
+
+\relative c'' {
+ c4^\< c c c \break c c c c\! |
+}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc ="Hairpin crescendi may be dashed. "
\relative c' {
- \override Hairpin #'style = #'dashed-line
+ \override Hairpin.style = #'dashed-line
f2\< g c1 d4\> b a gis\! }
-\version "2.16.0"
+\version "2.17.6"
\header {
\layout { ragged-right = ##t }
\relative c'' {
- \override Score.PaperColumn #'keep-inside-line = ##f
+ \override Score.PaperColumn.keep-inside-line = ##f
c4 \> c4 c4\! c4_\ff \> c4 c4\!\p
<<
--- /dev/null
+\version "2.16.0"
+
+\header {
+ texidoc = "Broken hairpins are not printed too high after key signatures.
+"
+}
+
+\relative c'' {
+ \key e \major
+ c4^\< c c c \break c c c c\! |
+}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Bound padding for hairpins also applies before following
}
\relative c' {
- \override Hairpin #'to-barline = ##f
+ \override Hairpin.to-barline = ##f
c2\>
\dimTextDim
c2\>
c\> c\! \break
\dimTextDim
c2\>
- \override Hairpin #'bound-padding = #5
+ \override Hairpin.bound-padding = #5
\dimHairpin
c2\>
\dimTextDim
}
-\version "2.16.0"
+\version "2.17.6"
\relative c'' {
- \override Hairpin #'bound-padding = #1.0
+ \override Hairpin.bound-padding = #1.0
c4\< c2. c4\!
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Staves in a PianoStaff remain alive as long as any of
\context {
\Staff
\RemoveEmptyStaves
- \override VerticalAxisGroup #'remove-first = ##t
+ \override VerticalAxisGroup.remove-first = ##t
}
}
-\version "2.16.0"
+\version "2.17.6"
\header { texidoc =
ragged-right= ##t
\context {
\Staff
- \override StaffSymbol #'line-count = 4
+ \override StaffSymbol.line-count = 4
\consists "Ambitus_engraver"
\remove "Clef_engraver"
}
-\version "2.16.0"
+\version "2.17.6"
#(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))
}
\relative c'' {
- \override Score.PaperColumn #'keep-inside-line = ##f
+ \override Score.PaperColumn.keep-inside-line = ##f
% Sanity checks: #pedals != 7:
c1^\markup \harp-pedal #"^-v|--"
% Sanity checks: no divider, multiple dividers, divider on wrong position:
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Harp pedals can be tweaked through the size, thickness and
}
\relative c'' {
- \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
+ \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^"
c1^\markup \override #'(harp-pedal-details . (
(box-width . 0.6)
(space-before-divider . 0.1)
(space-after-divider . 1.2))) {
\harp-pedal #"o^ovo-|vovo-o^"}
- \revert Voice.TextScript #'(harp-pedal-details box-width)
- \override Voice.TextScript #'(harp-pedal-details circle-thickness) = #3
- \override Voice.TextScript #'(harp-pedal-details circle-x-padding) = #0.6
- \override Voice.TextScript #'(harp-pedal-details circle-y-padding) = #-0.3
+ \revert Voice.TextScript.harp-pedal-details.box-width
+ \override Voice.TextScript.harp-pedal-details.circle-thickness = #3
+ \override Voice.TextScript.harp-pedal-details.circle-x-padding = #0.6
+ \override Voice.TextScript.harp-pedal-details.circle-y-padding = #-0.3
c1^\markup \harp-pedal #"o^ovo-|vovo-o^"
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Horizontal brackets are created with the correct event-cause, ensuring
}
\relative c' {
- c1-\tweak #'thickness #6 \startGroup
+ c1-\tweak thickness #6 \startGroup
c1\startGroup
c1\stopGroup
c1\stopGroup
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Shows the id property of a grob being set. This should have
"
}
-{ \override NoteHead #'id = #"foo" c }
+{ \override NoteHead.id = #"foo" c }
\version "2.16.0"
myDisplayMusic =
-#(define-music-function (parser location music)
+#(define-void-function (parser location music)
(ly:music?)
- (display-scheme-music music (current-error-port))
- (make-music 'SequentialMusic 'void #t))
+ (display-scheme-music music (current-error-port)))
\myDisplayMusic \chordmode { c }
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "LilyPond does in-notes.
\book {
\relative c' {
\repeat unfold 5 {
- \once \override FootnoteItem #'footnote = ##f
+ \once \override FootnoteItem.footnote = ##f
\footnote
- "" #'(0 . 0) #'NoteHead
- \markup { \box \fill-line { "this is a test" } } \default
+ "" #'(0 . 0)
+ \markup { \box \fill-line { "this is a test" } } NoteHead
\repeat unfold 5 { a\< b c d\! }
- \footnote #'(-1 . 1) #'NoteHead "foobar" \default
+ \footnote #'(-1 . 1) "foobar" NoteHead
\repeat unfold 5 { a\< b c d\! }
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Incipits can be printed using an @code{InstrumentName}
\score {
\new Staff {
%% All this would be shortcuted by an appropriate music function:
- \override Staff.InstrumentName #'music = ##{ \clef "petrucci-c1" c'4 d' e' f' #}
- \override Staff.InstrumentName #'self-alignment-X = #RIGHT
- \override Staff.InstrumentName #'padding = #0
- \override Staff.InstrumentName #'stencil =
+ \override Staff.InstrumentName.music = ##{ \clef "petrucci-c1" c'4 d' e' f' #}
+ \override Staff.InstrumentName.self-alignment-X = #RIGHT
+ \override Staff.InstrumentName.padding = #0
+ \override Staff.InstrumentName.stencil =
#(lambda (grob)
(let* ((instrument-name (ly:grob-property grob 'long-text))
(layout (ly:output-def-clone (ly:grob-layout grob)))
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Instrument names are removed when the staves are
\new PianoStaff <<
\new Staff {
- \override Staff.VerticalAxisGroup #'remove-empty = ##t
+ \override Staff.VerticalAxisGroup.remove-empty = ##t
\set PianoStaff.instrumentName = #"up"
\set PianoStaff.shortInstrumentName = #"u"
c'1\break R
}
-\version "2.16.0"
+\version "2.17.6"
\paper { left-margin = 3\cm }
\score {
\new StaffGroup <<
\new Staff {
- \override Staff . InstrumentName #'self-alignment-X = #LEFT
+ \override Staff.InstrumentName.self-alignment-X = #LEFT
\set Staff . instrumentName = \markup \column {
"Left aligned" "instrument name"
}
c''1 \break c''
}
\new Staff {
- \override Staff . InstrumentName #'self-alignment-X = #CENTER
+ \override Staff.InstrumentName.self-alignment-X = #CENTER
\set Staff . instrumentName = \markup \center-column {
"Centered" "instrument name"
}
g'1 g'
}
\new Staff {
- \override Staff . InstrumentName #'self-alignment-X = #RIGHT
+ \override Staff.InstrumentName.self-alignment-X = #RIGHT
\set Staff . instrumentName = \markup \column \right-align {
"Right aligned" "instrument name"
}
-\version "2.16.0"
+\version "2.17.6"
\header { texidoc = "Each clef has its own accidental placing
-rules. "}
+rules, which can be adjusted using @code{sharp-positions}
+and @code{flat-positions}." }
#(set-global-staff-size 16)
\key cis \major cis \key ces \major ces
\clef bass
\key cis \major cis \key ces \major ces
+ \break R1
+ \tempo "B-sharp on top"
+ \override Staff.KeySignature.sharp-positions = #'(6 0 1 2 3 4 5)
+ \override Staff.KeyCancellation.sharp-positions = #'(6 0 1 2 3 4 5)
+ \key cis \major R
+ \tempo "Flats throughout the staff"
+ \override Staff.KeySignature.flat-positions = #'((-5 . 5))
+ \override Staff.KeyCancellation.flat-positions = #'((-5 . 5))
+ \key ces \major R
+ \clef tenor
+ \key cis \major cis \break \key ces \major ces
+ \clef treble
+ \key cis \major cis \key ces \major ces
}
-
-
}
-\version "2.16.0"
+\version "2.17.6"
{
- \override Staff.KeySignature #'padding-pairs
+ \override Staff.KeySignature.padding-pairs
= #'((("accidentals.flat" . "accidentals.sharp.slashslash.stemstemstem") . 0.5))
\set Staff.keySignature = #`((4 . ,FLAT) (6 . ,THREE-Q-SHARP) (2 . ,SEMI-FLAT))
e2
--- /dev/null
+\version "2.17.4"
+
+\header {
+ texidoc = "LilyPond typesets Kievan notation.
+"
+}
+
+\score {
+ <<
+ \new KievanVoice = "melody" \transpose c c' {
+ \cadenzaOn
+ c4 c8 c8[ d8] c4 c2 b,\longa
+ \bar "k"
+ }
+ \new Lyrics \lyricsto "melody" {
+ Го -- спо -- ди по -- ми -- луй.
+ }
+ >>
+}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The 'head-direction of a LaissezVibrerTieColumn should
\relative c'' {
c2 \laissezVibrer
- \once \override LaissezVibrerTieColumn #'head-direction = #RIGHT
+ \once \override LaissezVibrerTieColumn.head-direction = #RIGHT
c \laissezVibrer
}
"
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
}
<c d f g>4.\laissezVibrer r8
<c d e f>4\laissezVibrer r
- \override LaissezVibrerTieColumn #'tie-configuration
+ \override LaissezVibrerTieColumn.tie-configuration
= #'((-7 . -1)
(-5 . -1)
(-3 . 1)
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "
\score {
\relative c' { cis cis cis cis }
\layout {
- \accidentalStyle "dodecaphonic"
+ \accidentalStyle dodecaphonic
}
\midi {
\tempo 4 = 240
--- /dev/null
+\version "2.17.2"
+
+\header {
+ texidoc = "Dynamics and other outside staff objects avoid ledger lines.
+"
+}
+
+\relative c' {
+ f16\pp[ c d e ] r2. |
+}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Ledger lines should appear at every other location
for a variety of staves using both @code{line-count} and
\new Staff {
% upper and lower lines both odd
#(define mylines '(-1 0 1))
- \override Staff.StaffSymbol #'line-count = #(length mylines)
- \override Staff.StaffSymbol #'line-positions = #mylines
+ \override Staff.StaffSymbol.line-count = #(length mylines)
+ \override Staff.StaffSymbol.line-positions = #mylines
\notes
}
\new Staff {
% upper and lower lines both even
#(define mylines '(-2 0 2))
- \override Staff.StaffSymbol #'line-positions = #mylines
+ \override Staff.StaffSymbol.line-positions = #mylines
- \override Staff.StaffSymbol #'line-count = #(length mylines)
+ \override Staff.StaffSymbol.line-count = #(length mylines)
\notes
}
\new Staff {
% lower line odd, upper line even
#(define mylines '(-1 0 2))
- \override Staff.StaffSymbol #'line-positions = #mylines
- \override Staff.StaffSymbol #'line-count = #(length mylines)
+ \override Staff.StaffSymbol.line-positions = #mylines
+ \override Staff.StaffSymbol.line-count = #(length mylines)
\notes
}
\new Staff {
% odd line count
- \override Staff.StaffSymbol #'line-count = #5
+ \override Staff.StaffSymbol.line-count = #5
\notes
}
\new Staff {
% even line count
- \override Staff.StaffSymbol #'line-count = #4
+ \override Staff.StaffSymbol.line-count = #4
\notes
}
-\version "2.16.0"
+\version "2.17.6"
\header {
composer = "ARTHUR GRAY"
cis''''4^\markup { \small \italic "m.g." }\arpeggio~
\grace {
cis8
- \revert Stem #'direction
+ \revert Stem.direction
a16[-5_( fis dis]
\ottava #0
r8 <a' a,>8(\mf <gis gis,> <fis fis,>
% \fingerUp
- \override Fingering #'direction = #UP
+ \override Fingering.direction = #UP
<gis gis,> <fis fis,> e)-1-4-5 r
\stemDown
\slurDown
% \fingerDown
- \override Fingering #'direction = #DOWN
+ \override Fingering.direction = #DOWN
s2
| %1
s1*2
| %5
s8 cis4. d4
% fair to count as one tweak?
- \override Fingering #'add-stem-support = ##t %tweak
- \override Fingering #'padding = #0.15
- \override Fingering #'slur-padding = #0.1
+ \override Fingering.add-stem-support = ##t %tweak
+ \override Fingering.padding = #0.15
+ \override Fingering.slur-padding = #0.1
<cis e,>8[( <d,_3 b'_1>
| %6
<cis_1 a'_2>)] cis'4. d4
r8. e,16(\f_2 <a a,>8[ <b b,>]
| %2
- %\override Staff.SustainPedalLineSpanner #'staff-padding = #5 %tweak
+ %\override Staff.SustainPedalLineSpanner.staff-padding = #5 %tweak
<cis cis,>4\sustainOn
\change Staff=treble
>>
\grace {
- \override Flag #'stroke-style = #"grace"
+ \override Flag.stroke-style = #"grace"
s8
s16 s s
\clef bass
<e,,, e,>32(\sustainOff\sustainOn
- \revert Flag #'stroke-style
+ \revert Flag.stroke-style
}
<gis' e>2)
\slurUp
% \fingerDown
- \override Fingering #'direction = #DOWN
+ \override Fingering.direction = #DOWN
- %\override Staff.SustainPedalLineSpanner #'staff-padding = #3.5 %tweak
+ %\override Staff.SustainPedalLineSpanner.staff-padding = #3.5 %tweak
\set Staff.pedalSustainStyle = #'mixed
%%a,8 e'[-5(<a-2 cis-3>])
}
middleDynamics = {
- %\override Dynamics.TextScript #'padding = #-1 %tweak
+ %\override Dynamics.TextScript.padding = #-1 %tweak
s2
s1*2
| %4
}
-\version "2.16.0"
+\version "2.17.6"
\layout { ragged-right = ##t }
withPaddingA = #(define-music-function (parser location padding music) (number? ly:music?)
- #{ \override TextScript #'padding = #padding
+ #{ \override TextScript.padding = #padding
$music
- \revert TextScript #'padding #})
+ \revert TextScript.padding #})
withPaddingB = #(define-music-function (parser location padding music) (number? ly:music?)
- #{ \override TextScript #'padding = #(* padding 2)
+ #{ \override TextScript.padding = #(* padding 2)
$music
- \revert TextScript #'padding #})
+ \revert TextScript.padding #})
withPaddingC = #(define-music-function (parser location padding music) (number? ly:music?)
- #{ \override TextScript #'padding = #(+ 1 (* padding 2))
+ #{ \override TextScript.padding = #(+ 1 (* padding 2))
$music
- \revert TextScript #'padding #})
+ \revert TextScript.padding #})
{
c'^"1"
TITLE=lilypond-book Test Suite
-SUBDIRS=include
-
COLLATED_FILES = $(OUT_FILES)
-EXTRA_DIST_FILES = include.mxl
-EXTRA_DIST_FILES += include.xml
-EXTRA_DIST_FILES += $(call src-wildcard,*.ly)
-EXTRA_DIST_FILES += $(call src-wildcard,*.ily)
-EXTRA_DIST_FILES += $(call src-wildcard,*.tely)
-EXTRA_DIST_FILES += $(call src-wildcard,*.itely)
-
OUT_TEXI_FILES += ${TEXI_FILES:%.texi=$(outdir)/%.info}
OUT_TEXI_FILES += ${TEXI_FILES:%.texi=$(outdir)/%.pdf}
OUT_TEXINFO_FILES += ${TEXINFO_FILES:%.texinfo=$(outdir)/%.info}
+++ /dev/null
-depth = ../../../..
-
-STEPMAKE_TEMPLATES=
-LOCALSTEPMAKE_TEMPLATES=
-
-include $(depth)/make/stepmake.make
-
-EXTRA_DIST_FILES += $(call src-wildcard,*.ly)
-EXTRA_DIST_FILES += $(call src-wildcard,*.ily)
-EXTRA_DIST_FILES += $(call src-wildcard,*.tely)
-EXTRA_DIST_FILES += $(call src-wildcard,*.itely)
+\version "2.16.0"
myVar = { a b c a }
texidoc = "Arrows can be applied to text-spanners and line-spanners (such as the Glissando)"
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
}
\relative c'' {
- \override TextSpanner #'bound-padding = #1.0
- \override TextSpanner #'style = #'line
- \override TextSpanner #'(bound-details right arrow) = ##t
- \override TextSpanner #'(bound-details left text) = #"fof"
- \override TextSpanner #'(bound-details right text) = #"gag"
- \override TextSpanner #'(bound-details right padding) = #0.6
+ \override TextSpanner.bound-padding = #1.0
+ \override TextSpanner.style = #'line
+ \override TextSpanner.bound-details.right.arrow = ##t
+ \override TextSpanner.bound-details.left.text = #"fof"
+ \override TextSpanner.bound-details.right.text = #"gag"
+ \override TextSpanner.bound-details.right.padding = #0.6
- \override TextSpanner #'(bound-details right stencil-align-dir-y) = #CENTER
- \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER
+ \override TextSpanner.bound-details.right.stencil-align-dir-y = #CENTER
+ \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
- \override Glissando #'(bound-details right arrow) = ##t
- \override Glissando #'arrow-length = #0.5
- \override Glissando #'arrow-width = #0.25
+ \override Glissando.bound-details.right.arrow = ##t
+ \override Glissando.arrow-length = #0.5
+ \override Glissando.arrow-width = #0.25
a8\startTextSpan gis8 a4 b4\glissando
b,4 | g' c\stopTextSpan c
}
-\version "2.16.0"
+\version "2.17.6"
\relative c' {
- \override Staff.OttavaBracket #'dash-period = #0.1
- \override Score.OttavaBracket #'dash-fraction = #1
+ \override Staff.OttavaBracket.dash-period = #0.1
+ \override Score.OttavaBracket.dash-fraction = #1
\ottava #1
c4 c
}
-\version "2.16.0"
+\version "2.17.6"
\layout {
indent = 0.0\mm
c1_\< c c1\!
}
\new Staff {
- \override DynamicTextSpanner #'dash-period = #3
- \override DynamicTextSpanner #'dash-fraction = #0.3
+ \override DynamicTextSpanner.dash-period = #3
+ \override DynamicTextSpanner.dash-fraction = #0.3
\crescTextCresc
c1^\< c c1\!
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Setting @code{'zigzag} style for spanners does not
\relative c' {
c1^"text"
- \override TrillSpanner #'style = #'zigzag
+ \override TrillSpanner.style = #'zigzag
c1\startTrillSpan
c2^\stopTrillSpan c^"text"
- \revert TrillSpanner #'style
+ \revert TrillSpanner.style
c1\startTrillSpan
c1^\stopTrillSpan
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Cover all line styles available."
}
\relative c'' {
- \override Glissando #'breakable = ##t
+ \override Glissando.breakable = ##t
s2
d2 \glissando d'2
- \override Glissando #'style = #'dashed-line
+ \override Glissando.style = #'dashed-line
d,2 \glissando d'2
- \override Glissando #'style = #'dotted-line
+ \override Glissando.style = #'dotted-line
d,2 \glissando d'2
- \override Glissando #'style = #'zigzag
+ \override Glissando.style = #'zigzag
d,2 \glissando d'2
- \override Glissando #'style = #'trill
+ \override Glissando.style = #'trill
d,2 \glissando d'2
- \override Glissando #'style = #'none
+ \override Glissando.style = #'none
d,2 \glissando d'2
}
{
texidoc = "switching voices in the middle of the lyrics is possible using @code{lyricsto}."
}
-\version "2.16.0"
+\version "2.17.6"
<<
\relative \new Voice = "lahlah" {
<<
\new Voice = "alternative" {
\voiceOne
- \override NoteColumn #'force-hshift = #-3
+ \override NoteColumn.force-hshift = #-3
a'4
}
{ \voiceTwo
}
-\version "2.16.0"
+\version "2.17.6"
<<
\relative \new Voice = "lahlah" {
\voiceOne
\times 2/3 {
%% show associations clearly.
- \override NoteColumn #'force-hshift = #-3
+ \override NoteColumn.force-hshift = #-3
r8 f g
}
}
}
-\version "2.16.0"
+\version "2.17.6"
\layout {
ragged-right = ##t
syl -- lab word
%% increase minimum-distance: forces more space, so hyphen reappears
- \override LyricHyphen #'minimum-distance = #1.0
+ \override LyricHyphen.minimum-distance = #1.0
syl -- lab word
%% minimum-distance 0 for LyricSpace: this places words next to each other.
- \override LyricSpace #'minimum-distance = #0.0
+ \override LyricSpace.minimum-distance = #0.0
syl -- lab word
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "In lyrics, hyphens may be used."
}
\new Voice { c' (c') c'( c') }
\addlyrics {
- \override Lyrics . LyricSpace #'minimum-distance = #5.0
+ \override Lyrics.LyricSpace.minimum-distance = #5.0
a -- b x -- y
}
\header
{
- texidoc = "The @code{\\tweak} function can be used in Lyrics."
+ texidoc = "The @code{\\tweak} function can be used in Lyrics. Where
+confusion of lyric words with grob names is possible, explicit use of
+@code{\\markup} can be used for resolving the ambiguity."
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
}
\new Lyrics \lyricmode
{
\markup \raise #1 \rotate #30 One 4
- \tweak #'extra-offset #'(0 . 2) fish,
+ \tweak extra-offset #'(0 . 2) \markup fish,
\markup \raise #1 \rotate #-30 two fish,
- \tweak #'color #red red fish,
- \tweak #'color #blue blue fish.
+ \tweak color #red \markup red fish,
+ \tweak color #blue \markup blue fish.
}
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc="
\relative c'' <<
\new Voice = "a"{
- b1 \bar "|:" b1 \bar ":|" b1 \bar "|."
+ b1 \bar ".|:" b1 \bar ":|." b1 \bar "|."
}
\new Lyrics \with {
\consists "Bar_engraver"
\layout {
\context {
\Lyrics
- \override VerticalAxisGroup #'nonstaff-nonstaff-spacing #'minimum-distance = #4.2
- \override LyricText #'Y-offset = #-0.7
- \override BarLine #'bar-extent = #'(-2 . 2)
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing.minimum-distance = #4.2
+ \override LyricText.Y-offset = #-0.7
+ \override BarLine.bar-extent = #'(-2 . 2)
}
}
\layout{ ragged-right = ##t }
-\version "2.16.0"
+\version "2.17.6"
<<
- \override Score.PaperColumn #'keep-inside-line = ##f
+ \override Score.PaperColumn.keep-inside-line = ##f
\new Staff \relative c' {
\key aes \major
\context Voice = "1" {
}
\paper { ragged-right = ##T }
-\version "2.16.0"
+\version "2.17.6"
\score{
{
\layout {
\context {
\Score
- \override PaperColumn #'keep-inside-line = ##f
+ \override PaperColumn.keep-inside-line = ##f
}
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
}
\new Staff {
- \override TextSpanner #'bound-details #'right #'text =
+ \override TextSpanner.bound-details.right.text =
#(markup #:draw-line '(0 . -1))
- \override TextSpanner #'thickness = #2
+ \override TextSpanner.thickness = #2
c'4 \startTextSpan
c'4 \stopTextSpan
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The @code{'style} property from grobs such as
}
\relative c' {
- \override Staff.TimeSignature #'stencil =
+ \override Staff.TimeSignature.stencil =
#(lambda (grob)
(grob-interpret-markup grob
(markup #:override '(baseline-skip . 0)
#:column (#:number "2" #:note "2" DOWN))))
- \override TextSpanner #'(bound-details left text) =
+ \override TextSpanner.bound-details.left.text =
\markup { \note #"16" #UP }
c1\startTextSpan
c1\stopTextSpan
texidoc = "The note markup function may be used to make metronome
markings. It works for a variety of flag, dot and duration settings."
}
-\version "2.16.0"
+\version "2.17.6"
\score {
\relative c''
}
- \override NoteHead #'style = #'triangle
+ \override NoteHead.style = #'triangle
c4 a
}
\layout {
\context {
\Score
- \override PaperColumn #'keep-inside-line = ##f
+ \override PaperColumn.keep-inside-line = ##f
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Demo of markup texts, using LilyPond syntax."
\layout {
\context {
\Score
- \override PaperColumn #'keep-inside-line = ##f
+ \override PaperColumn.keep-inside-line = ##f
}
}
-
\header {
texidoc = "Users may define non-standard markup commands using
the @code{define-markup-command} scheme macro."
}
-
\layout { ragged-right = ##t }
-
-
-\version "2.16.0"
+\version "2.17.6"
#(define-markup-command (upcase paper props str) (string?)
"Upcase the string characters. Syntax: \\upcase #\"string\""
\score{
{
- c''-\markup \upcase #"hello world"
- % produces a "HELLO WORLD" markup
+ c''-\markup \upcase #"hello world in upper case"
}
\layout {
\context {
\Score
- \override PaperColumn #'keep-inside-line = ##f
+ \override PaperColumn.keep-inside-line = ##f
}
}
-
}
--- /dev/null
+\version "2.17.6"
+
+\header {
+ texidoc = "Measures split across line breaks may be numbered in a measure
+count. Each segment receives a number. The first number has its ordinary
+appearance, but numbers after the break are enclosed in parentheses."
+}
+
+\layout {
+ indent = 0
+ ragged-right = ##t
+}
+
+\relative c' {
+ \startMeasureCount
+ a4 b c d
+ a4 b
+ \bar ""
+ \break
+ c4 d
+ a4 b c d
+ \stopMeasureCount
+}
+
+\layout {
+ \context {
+ \Staff
+ \consists #Measure_counter_engraver
+ }
+}
--- /dev/null
+\version "2.17.6"
+
+\header {
+ texidoc = "Measures can be numbered sequentially by enclosing them with
+@code{\\startMeasureCount} and @code{\\stopMeasureCount}."
+}
+
+\layout {
+ indent = 0
+ ragged-right = ##t
+}
+
+\relative c' {
+ \startMeasureCount
+ \repeat unfold 5 {
+ a4 b c d
+ }
+ \stopMeasureCount
+ a'4 b c d
+ \override Staff.MeasureCounter.count-from = #2
+ \startMeasureCount
+ \repeat unfold 4 {
+ a4 b c d
+ }
+ \stopMeasureCount\startMeasureCount
+ \revert Staff.MeasureCounter.count-from
+ \clef bass
+ \key fis \major
+ \time 3/4
+ \repeat unfold 3 {
+ R2.
+ }
+ \stopMeasureCount
+}
+
+\layout {
+ \context {
+ \Staff
+ \consists #Measure_counter_engraver
+ }
+}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Mensural ligatures show different shapes, depending on the
}
\context {
\Score
- \override SpacingSpanner #'packed-spacing = ##t
- \override PaperColumn #'keep-inside-line = ##f
+ \override SpacingSpanner.packed-spacing = ##t
+ \override PaperColumn.keep-inside-line = ##f
}
}
\clef "petrucci-c4"
\set Staff.printKeyCancellation = ##f
\cadenzaOn % turn off bar lines
- \accidentalStyle "forget"
+ \accidentalStyle forget
\textLengthOn
% ligaturae binaria
\]
\[
- \override NoteHead #'style = #'blackpetrucci
+ \override NoteHead.style = #'blackpetrucci
b\longa^\markup { "LBBBBB." }
c'\breve
d'
g
- \once \override NoteHead #'ligature-flexa = ##t
+ \once \override NoteHead.ligature-flexa = ##t
f
- \revert NoteHead #'style
+ \revert NoteHead.style
g\breve.
\]
\]
\[
- \override NoteHead #'style = #'blackpetrucci
+ \override NoteHead.style = #'blackpetrucci
e'1^\markup { "SSB" }
a
g\breve
- \revert NoteHead #'style
+ \revert NoteHead.style
\]
\[
\]
\[
- \override NoteHead #'style = #'blackpetrucci
+ \override NoteHead.style = #'blackpetrucci
e'\longa^\markup { "LBB" }
f'\breve
- \revert NoteHead #'style
+ \revert NoteHead.style
e'
\]
\[
- \override NoteHead #'style = #'blackpetrucci
+ \override NoteHead.style = #'blackpetrucci
b\breve^\markup { "BBBBBBL" }
g
- \override NoteHead #'ligature-flexa = ##t
- \override NoteHead #'flexa-width = #3
+ \override NoteHead.ligature-flexa = ##t
+ \override NoteHead.flexa-width = #3
f
f'
- \override NoteHead #'flexa-width = #5
+ \override NoteHead.flexa-width = #5
b
c'
- \revert NoteHead #'style
+ \revert NoteHead.style
% though ligature-flexa is still ##t, this pair must be drawn as recta
b\longa
- \revert NoteHead #'flexa-width
- \revert NoteHead #'ligature-flexa
+ \revert NoteHead.flexa-width
+ \revert NoteHead.ligature-flexa
\]
\bar "|" \break
\context Staff \with
{
- \override StaffSymbol #'line-count = #4
+ \override StaffSymbol.line-count = #4
}
{
\clef "petrucci-c5"
\set Staff.printKeyCancellation = ##f
\cadenzaOn % turn off bar lines
- \accidentalStyle "forget"
+ \accidentalStyle forget
\textLengthOn
\[
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "There is limited support for mensural notation: note head
{ \context Voice {
- \override NoteHead #'style = #'mensural
+ \override NoteHead.style = #'mensural
\transpose c d'' { c4 c2 c8 c16 c16 c1 c\breve c\longa }
\transpose c c' { c4 c2 c8 c16 c16 c1 c\breve c\longa }
}}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "A @code{MetronomeMark}, @code{RehearsalMark} and @code{BarNumber}
}
\new Staff {
- \override Score.MetronomeMark #'break-visibility = #all-visible
- \override TupletBracket #'breakable = ##t
- \override Beam #'breakable = ##t
- \override Glissando #'breakable = ##t
+ \override Score.MetronomeMark.break-visibility = #all-visible
+ \override TupletBracket.breakable = ##t
+ \override Beam.breakable = ##t
+ \override Glissando.breakable = ##t
\ottava #1 \times 1/1 { e'8\<\startTextSpan\startTrillSpan\glissando
- [ \override NoteColumn #'glissando-skip = ##t\repeat unfold 22 e'8
- \revert NoteColumn #'glissando-skip e'8\!\stopTextSpan\stopTrillSpan ] } |
+ [ \override NoteColumn.glissando-skip = ##t\repeat unfold 22 e'8
+ \revert NoteColumn.glissando-skip e'8\!\stopTextSpan\stopTrillSpan ] } |
}
\addlyrics { ah __ \repeat unfold 21 { \skip 4 } _ rrgh }
\addlyrics { ah -- \repeat unfold 21 { \skip 4 } _ rrgh }
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Metronome marks aligned on notes do not interfere with
\layout {
\context {
\Score
- \override NonMusicalPaperColumn #'stencil = #ly:paper-column::print
+ \override NonMusicalPaperColumn.stencil = #ly:paper-column::print
}
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Metronome marks respect symbol order in
}
\relative c' {
- \override Staff.KeySignature #'break-align-anchor-alignment = #LEFT
- \override Score.MetronomeMark #'break-align-symbols = #'(time-signature key-signature)
+ \override Staff.KeySignature.break-align-anchor-alignment = #LEFT
+ \override Score.MetronomeMark.break-align-symbols = #'(time-signature key-signature)
\key c \minor
\tempo "Time"
c1
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "@code{\\tempo} marks are aligned with the time signature
\time 8/8
\tempo "T-time"
R1
- \override Score.MetronomeMark #'break-align-symbols = #'(key-signature)
+ \override Score.MetronomeMark.break-align-symbols = #'(key-signature)
\key as \major
\tempo "T-key"
R1
-\version "2.16.0"
+\version "2.17.6"
\header{ texidoc = "The sans serif style tab clef is automatically adjusted to
different string spacings."
\new TabStaff {
\clef "moderntab"
\set TabStaff.stringTunings = #guitar-tuning
- \override TabStaff.StaffSymbol #'staff-space = #1.0 % default value is 1.5
+ \override TabStaff.StaffSymbol.staff-space = #1.0 % default value is 1.5
\guitar
}
>>
}
-\version "2.16.0"
+\version "2.17.6"
manuscriptBreak = { \break }
}
pianoRH = \relative c''' \repeat volta 2 {
- \accidentalStyle "modern"
+ \accidentalStyle modern
g16(_\p fis a g fis g f e d c b a ) |
<g e>8( <es fis a> <d f b> <c e c'>) r8 r |
r8 c'( e,) f r a |
- \once \override DynamicLineSpanner #'padding =#3
+ \once \override DynamicLineSpanner.padding =#3
r8 << { s8\> s8\! } << { fis( g)
} \\ { c,4 } >> >> r8 <e c g> <e c g> |
<d c a>4. r8 \clef bass <d b f> <d b f> |
}
pianoLH = \relative c'' \repeat volta 2 {
- \accidentalStyle "modern"
+ \accidentalStyle modern
g16( fis a g fis g f e d c b a) |
\clef bass g4.( c,8) r r
\clef treble r4 <bes' c>8([ <a c>)] r <f c'> |
fis r4 <g b>8( |
<f c'>4.)
- \once \override Slur #'height-limit = #1.0
+ \once \override Slur.height-limit = #1.0
<g c>4.( | <a c>4.) <g b,> |
c,4 r8 g4 r8 |
\score {
<< \time 6/8
\new Staff <<
- \context Staff \accidentalStyle "modern"
+ \context Staff \accidentalStyle modern
\melody >>
\lyricsto "singer" \new Lyrics \firstVerse
\lyricsto "singer" \new Lyrics \secondVerse
\layout {
\context {
\Lyrics
- \override LyricText #'font-size = #-1
+ \override LyricText.font-size = #-1
}
\context {
\Score
- \override Beam #'beam-thickness = #0.55
- \override SpacingSpanner #'spacing-increment = #1.0
- \override Slur #'height-limit = #1.5
+ \override Beam.beam-thickness = #0.55
+ \override SpacingSpanner.spacing-increment = #1.0
+ \override Slur.height-limit = #1.5
}
}
\midi {
%
-longgrace = \override Flag #'stroke-style = #'()
-endlonggrace = \revert Flag #'stroke-style
+longgrace = \override Flag.stroke-style = #'()
+endlonggrace = \revert Flag.stroke-style
ritenuto = \markup { \italic "rit." }
-\version "2.16.0"
+\version "2.17.6"
\layout {
\context {
skipBars = ##t
midiInstrument = #"french horn"
%% try to mimic Breitkopf
- \override RehearsalMark #'padding = #1
+ \override RehearsalMark.padding = #1
restNumberThreshold = #1
- \override RehearsalMark #'font-series = #'bold
- \override RehearsalMark #'font-size = #4.5
+ \override RehearsalMark.font-series = #'bold
+ \override RehearsalMark.font-size = #4.5
}
}
-\version "2.16.0"
+\version "2.17.6"
\include "mozart-hrn3-defs.ily"
romanze = \relative c' {
\grace e16
d8.[ c16) \< ] c8[ c-.( c-. c)-.]\!
\mark "C"
- \override DynamicLineSpanner #'staff-padding = #2.5
+ \override DynamicLineSpanner.staff-padding = #2.5
des1\sfp
g,1\sfp
c\sfp
c,\sfp
- \revert DynamicLineSpanner #'staff-padding
+ \revert DynamicLineSpanner.staff-padding
R1*3
r8 c[\p c c] c2~
c8[ c' c c] c2~
-\version "2.16.0"
+\version "2.17.6"
\header
{
texidoc = "The multimeasure rest is centered exactly between bar lines."
{
\set Score.skipBars = ##t
- \override Staff.BarLine #'hair-thickness = #7.5
- \override Staff.MultiMeasureRest #'hair-thickness = #10
+ \override Staff.BarLine.hair-thickness = #7.5
+ \override Staff.MultiMeasureRest.hair-thickness = #10
c'1 R1*20 c'1
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Though the default spacing for multi-measure rests
<<
\new Staff {
- \once \override MultiMeasureRest #'spacing-pair =
+ \once \override MultiMeasureRest.spacing-pair =
#'(break-alignment . staff-bar)
R1
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Multi measure rest staff position can be overridden
}
\relative c' {
- \override MultiMeasureRest #'staff-position = #0
+ \override MultiMeasureRest.staff-position = #0
R1
}
-\version "2.16.0"
+\version "2.17.6"
\header {
R2.^"4"
R2.*3_\markup { \roman "a1b2c3" }
R2.*10^"inner"^"top"_"inner"_"bot"
- \override MultiMeasureRestText #'springs-and-rods
+ \override MultiMeasureRestText.springs-and-rods
= #ly:multi-measure-rest::set-text-rods
R2.^"very very very very very very long text"
texidoc = "Multi-measure rests standard values can be tweaked."
}
-\version "2.16.0"
+\version "2.17.6"
\markup "Use non-standard multi-measure rests:"
\new Staff {
- \override MultiMeasureRest #'usable-duration-logs = #(iota 2 1)
+ \override MultiMeasureRest.usable-duration-logs = #(iota 2 1)
\time 1/4 R4
\time 2/4 R2
}
\markup "Round up to the longer rest:"
\new Staff {
- \override MultiMeasureRest #'round-up-to-longer-rest = ##t
+ \override MultiMeasureRest.round-up-to-longer-rest = ##t
\time 3/2 R1.
\time 7/2 R\breve..
}
\markup "Round up to the longer rest only in specified time signatures:"
\new Staff {
- \override MultiMeasureRest #'round-up-exceptions = #'((3 . 2))
+ \override MultiMeasureRest.round-up-exceptions = #'((3 . 2))
\time 3/2 R1.
\time 7/2 R\breve..
\time 3/2 R1.
}
-\version "2.16.0"
+\version "2.17.6"
\paper{
ragged-right = ##T
}
<< { c'4 c c c }
\\
{
- \override TextSpanner #'bound-details #'left #'text = "x"
+ \override TextSpanner.bound-details.left.text = "x"
\endSpanners c,2\<\startTextSpan c2
}
\header
{
-
+
texidoc = "Music functions are generic music transformation functions,
which can be used to extend music syntax seamlessly. Here we
demonstrate a @code{\\myBar} function, which works similar to
@code{\\bar}, but is implemented completely in Scheme."
}
-\version "2.16.0"
+\version "2.17.5"
myBar = #(define-music-function (parser location bar-type) (string?)
(context-spec-music
\layout { ragged-right = ##t }
{
- d4 \myBar "|:" d4
+ d4 \myBar ".|:" d4
}
STEPMAKE_TEMPLATES=documentation texinfo tex
LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc musicxml
-EXTRA_DIST_FILES = LICENSE book-musicxml-testsuite.py
-
TEXI2HTML_FLAGS += --nomenu
COLLATED_FILES = $(sort $(MUSICXML_FILES) $(MUSICMXL_FILES) $(TEXINFO_SOURCES) )
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Bar lines are positioned correctly when using custom
staves which are not centered around position@tie{}0.
"
}
\new Staff {
- \override Staff.StaffSymbol #'line-positions = #'(1 3 5 7 9)
+ \override Staff.StaffSymbol.line-positions = #'(1 3 5 7 9)
c''1 \bar "||"
- c''1 \bar ":"
+ c''1 \bar ";"
c''1 \bar "|."
}
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc = "By default, text is set with empty horizontal dimensions.
\relative c''{
%% \textLengthOff
- %% short for \override TextScript #'extra-spacing-width = #'(+inf.0 . -inf.0)
- %% \override TextScript #'extra-spacing-height = #'(0 . 0)
+ %% short for \override TextScript.extra-spacing-width = #'(+inf.0 . -inf.0)
+ %% \override TextScript.extra-spacing-height = #'(0 . 0)
c2_"very wide and long text" c | \break
- %% short for \override TextScript #'extra-spacing-width = #'(0 . 0)
- %% \override TextScript #'extra-spacing-height = #'(-inf.0 . +inf.0)
+ %% short for \override TextScript.extra-spacing-width = #'(0 . 0)
+ %% \override TextScript.extra-spacing-height = #'(-inf.0 . +inf.0)
\textLengthOn
c2_"very wide and long text" c
}
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc="
Note head shapes may be set from several choices.
ragged-right = ##t
}
-pattern = <<
- \new Voice {
- \override Stem #'direction = #UP
+pattern =
+#(define-music-function (parser location name style) (markup? ly:context-mod?)
+#{ <<
+ s1^#name
+ \new Voice \with #style {
+ \override Stem.direction = #UP
e'4 e'2. e'1 e'\breve*1/2 e'\longa*1/4
}
- \new Voice {
- \override Stem #'direction = #DOWN
+ \new Voice \with #style {
+ \override Stem.direction = #DOWN
g4 g2. g1 g\breve*1/2 g\longa*1/4
}
->>
+>> #})
+patternStyle =
+#(define-music-function (parser location style) (symbol?)
+ #{
+ \pattern #(symbol->string style) \with {
+ \override NoteHead.style = #style
+ }
+ #})
\transpose c c {
\clef C
- \override Staff.NoteHead #'style = #'default
- s1*0^\markup { "default" }
- \pattern
-
- \override Staff.NoteHead #'style = #'altdefault
- s1*0^\markup { "altdefault" }
- \pattern
+ \patternStyle default
+ \patternStyle altdefault
\break
- \override Staff.NoteHead #'style = #'baroque
- s1*0^\markup { "baroque" }
- \pattern
-
- \override Staff.NoteHead #'style = #'neomensural
- s1*0^\markup { "neomensural" }
- \pattern
+ \patternStyle baroque
+ \patternStyle neomensural
\break
- \override Staff.NoteHead #'style = #'mensural
- s1*0^\markup { "mensural" }
- \pattern
-
- \override Staff.NoteHead #'style = #'petrucci
- s1*0^\markup { "petrucci" }
- \pattern
+ \patternStyle mensural
+ \patternStyle petrucci
\break
- \override Staff.NoteHead #'style = #'harmonic
- s1*0^\markup { "harmonic" }
- \pattern
-
- \override Staff.NoteHead #'style = #'harmonic-black
- s1*0^\markup { "harmonic-black" }
- \pattern
+ \patternStyle harmonic
+ \patternStyle harmonic-black
\break
- \override Staff.NoteHead #'style = #'harmonic-mixed
- s1*0^\markup { "harmonic-mixed" }
- \pattern
-
- \override Staff.NoteHead #'style = #'diamond
- s1*0^\markup { "diamond" }
- \pattern
+ \patternStyle harmonic-mixed
+ \patternStyle diamond
\break
- \override Staff.NoteHead #'style = #'cross
- s1*0^\markup { "cross" }
- \pattern
-
- \override Staff.NoteHead #'style = #'xcircle
- s1*0^\markup { "xcircle" }
- \pattern
+ \patternStyle cross
+ \patternStyle xcircle
\break
- \override Staff.NoteHead #'style = #'triangle
- s1*0^\markup { "triangle" }
- \pattern
-
- \override Staff.NoteHead #'style = #'slash
- s1*0^\markup { "slash" }
- \pattern
+ \patternStyle triangle
+ \patternStyle slash
\break
- \override Staff.NoteHead #'style = #'kievan
- s1*0^\markup { "kievan" }
- \pattern
+ \pattern "kievan" \with { \kievanOn }
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Note head lines (e.g. glissando)
\context PianoStaff
<<
\new Staff = "up" {
- \override Glissando #'breakable = ##t
+ \override Glissando.breakable = ##t
\set PianoStaff.connectArpeggios = ##t
\showStaffSwitch
\clef F
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc=" The number of stafflines of a staff can be set. Ledger
\new Staff \with {
- \override StaffSymbol #'line-count = #3
+ \override StaffSymbol.line-count = #3
}
\relative c {
- c' c c c | g' g g g \bar ":|"
+ c' c c c | g' g g g \bar ":|."
}
"Both edge heights of an ottava bracket can be specified."
}
-\version "2.16.0"
+\version "2.17.6"
\layout { ragged-right = ##t}
%override the left edge height to produce standard text with a left edge
\ottava #1
- \once \override Staff.OttavaBracket #'edge-height = #'(1.2 . 1.2)
+ \once \override Staff.OttavaBracket.edge-height = #'(1.2 . 1.2)
a b c
\ottava #0
a
% Look! we can make them go up!
\ottava #1
- \once \override Staff.OttavaBracket #'edge-height = #'(-1 . -1)
+ \once \override Staff.OttavaBracket.edge-height = #'(-1 . -1)
a b c
\ottava #0
a
% and have them go in different directions
\ottava #1
- \once \override Staff.OttavaBracket #'edge-height = #'(-1.2 . 1.2)
+ \once \override Staff.OttavaBracket.edge-height = #'(-1.2 . 1.2)
a b c
\ottava #0
a
--- /dev/null
+\version "2.17.6"
+
+\header {
+ texidoc = "@code{VerticalAxisGroup} grobs can place outside staff objects
+using one of the four directives shown below.
+"
+}
+
+
+\layout {
+ ragged-right = ##t
+ indent = 0.0
+ \context {
+ \Voice
+ \remove "Ligature_bracket_engraver"
+ \consists "Mensural_ligature_engraver"
+ }
+ \context {
+ \Score
+ \override SpacingSpanner.packed-spacing = ##t
+ \override PaperColumn.keep-inside-line = ##f
+ }
+}
+
+music = \context Voice {
+ \clef "petrucci-c4"
+ \set Staff.printKeyCancellation = ##f
+ \cadenzaOn % turn off bar lines
+ \accidentalStyle forget
+ \textLengthOn
+
+% ligaturae binaria
+
+ \[
+ b\breve^\markup { \column { { \bold "ligaturae binaria" } "BL" } }
+ g\longa
+ \]
+
+ \[
+ g\breve^\markup { "BL" }
+ b\longa
+ \]
+
+ \[
+ b\longa^\markup { "LL" }
+ g
+ \]
+
+ \[
+ g\longa^\markup { "LL" }
+ b
+ \]
+
+ \[
+ b\breve^\markup { "BB" }
+ g
+ \]
+
+ \[
+ g\breve^\markup { "BB" }
+ b
+ \]
+
+ \[
+ b\longa^\markup { "LB" }
+ g\breve
+ \]
+
+ \[
+ g\longa^\markup { "LB" }
+ b\breve
+ \]
+
+ \[
+ b1^\markup { "SS" }
+ g
+ \]
+
+ \[
+ g1^\markup { "SS" }
+ b
+ \]
+
+ \bar "|"
+}
+
+{
+ \override Staff.VerticalAxisGroup.outside-staff-placement-directive =
+ #'left-to-right-polite
+ \music
+}
+{
+ \override Staff.VerticalAxisGroup.outside-staff-placement-directive =
+ #'left-to-right-greedy
+ \music
+}
+{
+ \override Staff.VerticalAxisGroup.outside-staff-placement-directive =
+ #'right-to-left-polite
+ \music
+}
+{
+ \override Staff.VerticalAxisGroup.outside-staff-placement-directive =
+ #'right-to-left-greedy
+ \music
+}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "A sublist of grob property lists may be overridden within a callback.
}
\relative c' {
- \override Glissando #'after-line-breaking =
+ \override Glissando.after-line-breaking =
#(lambda (grob)
(ly:grob-set-nested-property! grob '(bound-details right Y) 3))
c1 \glissando
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Sublist of grob property lists may be also tuned. In the
}
\relative c' {
- \override Stem #'details #'beamed-lengths = #'(6 10 8)
+ \override Stem.details.beamed-lengths = #'(6 10 8)
c8[ c] c16[ c] c32[ c]
- \revert Stem #'details
+ \revert Stem.details
c8[ c] c16[ c] c32[ c]
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "minimum-distance within a system is correctly accounted for in page breaking."
\layout {
\context {
\Score
- \override VerticalAxisGroup #'staff-staff-spacing =
+ \override VerticalAxisGroup.staff-staff-spacing =
#'((minimum-distance . 20))
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "minimum-distance within a system is correctly accounted for in page breaking."
\layout {
\context {
\Score
- \override NonMusicalPaperColumn #'line-break-system-details = #'((alignment-distances . (20)))
+ \override NonMusicalPaperColumn.line-break-system-details = #'((alignment-distances . (20)))
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Page labels may be placed inside music or at top-level,
\mark "B" \label #'markB
d' d'
d' d'
- \once \override Score . RehearsalMark #'break-visibility = #begin-of-line-invisible
+ \once \override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
\mark "C" \label #'markC
}
\header { piece = "First score" }
}
-\version "2.16.0"
+\version "2.17.6"
#(set-default-paper-size "a6" 'portrait)
\score {
{
\overrideProperty
- #"Score.NonMusicalPaperColumn"
- #'line-break-system-details
+ Score.NonMusicalPaperColumn.line-break-system-details
#'((Y-offset . 0.0))
c1 c1 \break
\overrideProperty
- #"Score.NonMusicalPaperColumn"
- #'line-break-system-details
+ Score.NonMusicalPaperColumn.line-break-system-details
#'((Y-offset . 62.0)
(X-offset . 8.0)
)
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "@var{alignment-distances} applies to the toplevel
\score {
<<
\new Staff {
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details #'((alignment-distances . (15)))
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((alignment-distances . (15)))
c'4
}
\new Staff <<
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Dynamic centering still works with alignment-distances."
\layout {
\context {
\Score
- \override NonMusicalPaperColumn #'line-break-system-details =
+ \override NonMusicalPaperColumn.line-break-system-details =
#'((alignment-distances . (20)))
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Non-staff lines between two systems don't confuse the
<<
\new Lyrics
- \with { \override VerticalAxisGroup #'staff-affinity = #DOWN }
+ \with { \override VerticalAxisGroup.staff-affinity = #DOWN }
\lyricmode {
My2 first Li4 -- ly song,2
My2 first Li4 -- ly song,2
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "A non-staff line (such as @code{Lyrics}) at the
ragged-right = ##t
\context {
\Lyrics
- \override VerticalAxisGroup #'nonstaff-nonstaff-spacing #'basic-distance = #20
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing.basic-distance = #20
}
}
<<
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Padding from the header and footer is measured to the
\score {
<<
- \new Lyrics \with { \override VerticalAxisGroup #'staff-affinity = #DOWN } \lyricmode { foo }
- \new Lyrics \with { \override VerticalAxisGroup #'staff-affinity = #DOWN } \lyricmode { foo }
- \new Lyrics \with { \override VerticalAxisGroup #'staff-affinity = #DOWN } \lyricmode { foo }
- \new Lyrics \with { \override VerticalAxisGroup #'staff-affinity = #DOWN } \lyricmode { foo }
+ \new Lyrics \with { \override VerticalAxisGroup.staff-affinity = #DOWN } \lyricmode { foo }
+ \new Lyrics \with { \override VerticalAxisGroup.staff-affinity = #DOWN } \lyricmode { foo }
+ \new Lyrics \with { \override VerticalAxisGroup.staff-affinity = #DOWN } \lyricmode { foo }
+ \new Lyrics \with { \override VerticalAxisGroup.staff-affinity = #DOWN } \lyricmode { foo }
\new Staff { c'1 }
\new Staff { c'1 }
\new Lyrics \lyricmode { foo }
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Spacing rules between Staves coexist with rules affecting
\layout {
\context {
\Lyrics
- \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #'((padding . 0.2))
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #'((padding . 0.2))
} \context {
\Staff
- \override VerticalAxisGroup #'default-staff-staff-spacing = #'((padding . 4))
+ \override VerticalAxisGroup.default-staff-staff-spacing = #'((padding . 4))
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "A non-staff line (such as @code{Lyrics}) at the top
ragged-right = ##t
\context {
\Lyrics
- \override VerticalAxisGroup
- #'nonstaff-nonstaff-spacing #'minimum-distance = #20
- \override VerticalAxisGroup #'staff-affinity = #DOWN
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing.minimum-distance = #20
+ \override VerticalAxisGroup.staff-affinity = #DOWN
}
}
<<
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Non-staff lines (such as @code{Lyrics}) can specify
<<
\new Staff { c'1 }
\new Lyrics \with {
- \override VerticalAxisGroup
- #'nonstaff-unrelatedstaff-spacing #'padding = #'20
+ \override VerticalAxisGroup.nonstaff-unrelatedstaff-spacing.padding = #'20
} \lyricmode { foo }
\new Staff { c'1 }
>>
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "StaffGrouper interacts correctly with \RemoveEmptyStaffContext.
\score {
<<
\new StaffGroup = "G1" \with {
- \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20
+ \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
}
<<
\new Staff { c'1 \break c'1 \break R1 }
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "StaffGroups can be nested, in which case the inner StaffGroup wins."
\score {
<<
\new StaffGroup \with {
- \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #15
+ \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #15
}
<<
\new Staff {
c'1
}
\new StaffGroup \with {
- \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20
+ \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
} <<
\new Staff {
c'1
-\version "2.16.0"
+\version "2.17.6"
#(set-default-paper-size "a6")
<<
\new Staff { c'1 \pageBreak c'1 }
\new Staff \with {
- \override VerticalAxisGroup
- #'default-staff-staff-spacing #'stretchability = #50
+ \override VerticalAxisGroup.default-staff-staff-spacing.stretchability = #50
} { c'1 c'1 }
\new Staff { c'1 c'1 }
>>
}
-\version "2.16.0"
+\version "2.17.6"
#(set-global-staff-size 11)
c\break
\overrideProperty
- #"Score.NonMusicalPaperColumn"
- #'line-break-system-details
+ Score.NonMusicalPaperColumn.line-break-system-details
#'((Y-extent . (-30 . 10)))
c_"Big bounding box (property Y-extent)"\break
\overrideProperty
- #"Score.NonMusicalPaperColumn"
- #'line-break-system-details
+ Score.NonMusicalPaperColumn.line-break-system-details
#'((refpoint-Y-extent . (-37 . -10)))
c_\markup {
\column {
\break
\overrideProperty
- #"Score.NonMusicalPaperColumn"
- #'line-break-system-details
+ Score.NonMusicalPaperColumn.line-break-system-details
#'((next-padding . 10))
c_"Followed by padding, ie unstretchable space. (property next-padding)" \break
\overrideProperty
- #"Score.NonMusicalPaperColumn"
- #'line-break-system-details
+ Score.NonMusicalPaperColumn.line-break-system-details
#'((next-space . 20))
c_"Followed by stretchable space (property next-space)"\break
c\break
\overrideProperty
- #"Score.NonMusicalPaperColumn" #'line-break-system-details
+ Score.NonMusicalPaperColumn.line-break-system-details
#'((bottom-space . 25.0))
c_"25 staff space to the bottom of the page. (property bottom-space)"\break
first system can be forced to be uniform."
}
-\version "2.16.0"
+\version "2.17.6"
#(set-default-paper-size "a6")
c1\break\pageBreak
c1
\break\pageBreak
- \override TextScript #'padding = #20
+ \override TextScript.padding = #20
c1^"bla"
}
}
ragged-right = ##t
}
-\version "2.16.0"
+\version "2.17.6"
\relative c' {
c4 -\parenthesize -.
- \override ParenthesesItem #'padding = #0.1
+ \override ParenthesesItem.padding = #0.1
<d \parenthesize fis a>
}
-\version "2.16.0"
+\version "2.17.6"
\header
{
texidoc = "The standard piano pedals style comes with Ped symbols.
c, d16[ c c c] e[ e \sustainOff \sustainOn e e ] f4 \sustainOff
g\sustainOn b \sustainOff c
\set Staff.pedalSustainStrings = #'("-" "-P" "P")
- \override Staff.SustainPedal #'padding = #-2
+ \override Staff.SustainPedal.padding = #-2
c, \sustainOn d e \sustainOff \sustainOn f
\sustainOff g b c
}
-\version "2.16.0"
+\version "2.17.6"
\header { texidoc = "
The appearance of phrasing slurs may be changed from solid to dotted or dashed.
"
c\( d e c\) |
\phrasingSlurDashPattern #0.4 #2.0
c\( d e c\) |
- \once \override Slur #'dash-definition = #'((0 0.25 1 1)
+ \once \override Slur.dash-definition = #'((0 0.25 1 1)
(0.3 0.7 0.4 0.75)
(0.75 1.0 1.0 1.0))
c\( d e c\) |
-\version "2.16.0"
+\version "2.17.5"
\header {
texidoc = "Distances between prefatory items (e.g. clef, bar,
\relative c'' {
\set Staff.instrumentName = "fobar"
- \bar "||:"
+ \bar ".|:-||"
\key cis \major
cis4 cis4 cis4 cis4 \clef bass cis,1
\clef treble
- \bar ":|"
+ \bar ":|."
\key g \minor
c1
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Nested properties may be overridden using Scheme list
syntax. This test performs two property overrides: the first
}
\relative c' {
- \once \override TextSpanner #'bound-details #'left #'text = #"foo"
+ \once \override TextSpanner.bound-details.left.text = #"foo"
c4\startTextSpan
- \once \override Tie #'details #'note-head-gap = #1
+ \once \override Tie.details.note-head-gap = #1
c4 ~ c c\stopTextSpan
- \once \override TextSpanner #'(bound-details left text) = #"foo"
+ \once \override TextSpanner.bound-details.left.text = #"foo"
c4\startTextSpan
- \once \override Tie #'(details note-head-gap) = #1
+ \once \override Tie.details.note-head-gap = #1
c4 ~ c c\stopTextSpan
}
}
-\version "2.16.0"
+\version "2.17.6"
\relative c' {
f2 \glissando c
- \override Glissando #'bound-details #'right #'Y = #4
+ \override Glissando.bound-details.right.Y = #4
f2 \glissando c |
- \override Glissando #'bound-details #'left #'Y = #-6
+ \override Glissando.bound-details.left.Y = #-6
f2 \glissando c
- \revert Glissando #'(bound-details right Y)
+ \revert Glissando.bound-details.right.Y
f2 \glissando c
- \revert Glissando #'(bound-details left Y)
+ \revert Glissando.bound-details.left.Y
f2 \glissando c
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Once properties take effect during a single time step only."
}
\relative c' {
c4
- \once \override Stem #'thickness = #5.0
+ \once \override Stem.thickness = #5.0
c4
c4
c4
@code{rest-event} is not in @code{quotedEventTypes}."
}
-\version "2.16.0"
+\version "2.17.6"
\layout {
ragged-right = ##t
}
\set Staff.instrumentName = "orig+quote"
\set Staff.quotedEventTypes = #'(note-event articulation-event)
\new Voice {\voiceOne
- \override Voice . Beam #'collision-voice-only = ##t
+ \override Voice.Beam.collision-voice-only = ##t
\original }
\new Voice {\voiceTwo s4 \quoteDuring #"quoteMe" { s2. } }
>>
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The @code{\\quoteDuring} command shall also quote correctly all
}
mus = \relative c' {
- % Acciaccaturas contain a slur and \override Flag #'stroke-style
+ % Acciaccaturas contain a slur and \override Flag.stroke-style
% Thus, we're checking \override here
c4 \acciaccatura d8 c4
% Checking \set and \unset
\set autoBeaming = ##f
% Checking \once \override
- \once \override Stem #'thickness = #8.0 d8
+ \once \override Stem.thickness = #8.0 d8
% Checking two overrides
- \override Stem #'thickness = #8.0 \override Flag #'stroke-style = "grace"
+ \override Stem.thickness = #8.0 \override Flag.stroke-style = "grace"
d8
% reverting one of them
- \revert Stem #'thickness d8
+ \revert Stem.thickness d8
% and the other
- \revert Flag #'stroke-style c8
+ \revert Flag.stroke-style c8
% checking tweaks
- c2-\tweak #'color #red ->
+ c2-\tweak color #red ->
}
\addQuote "music" \mus
-\version "2.16.0"
+\version "2.17.6"
\header {
\new Staff
<<
\new Voice \transpose c c' {
- \override Stem #'direction = #UP
+ \override Stem.direction = #UP
\foo
}
\new Voice {
@code{rest-event} is not in @code{quotedEventTypes}."
}
-\version "2.16.0"
+\version "2.17.6"
\layout {
ragged-right = ##t
}
\new Voice {\voiceTwo
s4
\set fontSize = #-4
- \override Stem #'length-fraction = #(magstep -4)
+ \override Stem.length-fraction = #(magstep -4)
\quoteDuring #"quoteMe" { \skip 2. }
}
>>
the alignment depends on which symbols are visible."
}
-\version "2.16.0"
+\version "2.17.6"
\relative c' {
- \override Score.RehearsalMark #'break-align-symbols = #'(clef key-signature staff-bar)
+ \override Score.RehearsalMark.break-align-symbols = #'(clef key-signature staff-bar)
c1
\clef "bass"
\mark "clef"
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "RehearsalMarks still align correctly if Mark_engraver is moved to
c1
\key cis \major
\clef alto
- \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+ \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\mark "on-key"
cis
\key ces \major
- \override Score.RehearsalMark #'break-align-symbols = #'(clef)
+ \override Score.RehearsalMark.break-align-symbols = #'(clef)
\clef treble
\mark "on clef"
ces
}
-\version "2.16.0"
+\version "2.17.6"
\relative c' {
c1 \mark "foo"
c1
\key cis \major
\clef alto
- \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+ \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\mark "on-key"
cis
\key ces \major
- \override Score.RehearsalMark #'break-align-symbols = #'(clef)
+ \override Score.RehearsalMark.break-align-symbols = #'(clef)
\clef treble
\mark "on clef"
ces
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Rehearsal marks with direction DOWN get placed at
\new Staff { g'1 }
\new Staff {
c'1
- \once \override Score . RehearsalMark #'break-visibility = #begin-of-line-invisible
- \once \override Score . RehearsalMark #'direction = #DOWN
+ \once \override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
+ \once \override Score.RehearsalMark.direction = #DOWN
\mark \markup \italic "Fine."
}
>>
\header {
- texidoc = "Relative mode for repeats uses order of entry."
+ texidoc = "Using repeat unfold within a relative block gives a
+different result from writing the notes out in full. The first
+system has all the notes within the stave. In the second, the
+notes get progressively higher."
}
\version "2.16.0"
\relative c' {
- \repeat "unfold" 3
- { f2 bes2 }
- \alternative { a1 e b }
+ c'1^"Using unfold"
+ \repeat unfold 3 { f,2^"Repeated" bes2 }
+ \alternative { { a2_"Alt1" c } { e_"Alt2" c } { b_"Alt3" d } }
+}
+
+\relative c' {
+ c'1^"The same notes, written out"
+ f,2 bes2 a2 c f2 bes2 e c f2 bes2 b d
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "
ragged-right = ##t
\context {
\Staff
- \override Beam #'auto-knee-gap = #4.5
+ \override Beam.auto-knee-gap = #4.5
\RemoveEmptyStaves
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "
>>
\layout { \context { \RemoveEmptyStaffContext
- \override VerticalAxisGroup #'remove-first = ##t } }
+ \override VerticalAxisGroup.remove-first = ##t } }
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The positioning of dots and slashes in percent repeat
glyphs can be altered using @code{dot-negative-kern} and
\repeat percent 2 { d'1 e' }
}
\new Staff {
- \override PercentRepeat #'dot-negative-kern = #1.1
+ \override PercentRepeat.dot-negative-kern = #1.1
\repeat percent 2 { c'1 }
- \override DoublePercentRepeat #'dot-negative-kern = #0
- \override DoublePercentRepeat #'slash-negative-kern = #1
+ \override DoublePercentRepeat.dot-negative-kern = #0
+ \override DoublePercentRepeat.slash-negative-kern = #1
\repeat percent 2 { d'1 e' }
}
>>
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The two dots of a repeat sign should be symmetric
to the staff centre and avoid staff lines even for exotic staves.
\score {
<<
\context Staff = "s1" \with {
- \override StaffSymbol #'staff-space = #0.6
+ \override StaffSymbol.staff-space = #0.6
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s2" \with {
- \override StaffSymbol #'line-positions = #'(-4 -2 0 2)
- \override StaffSymbol #'staff-space = #0.7
+ \override StaffSymbol.line-positions = #'(-4 -2 0 2)
+ \override StaffSymbol.staff-space = #0.7
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s3" {
- s1 \bar ":|"
+ s1 \bar ":|."
}
>>
}
\score {
<<
\context Staff = "s1" {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s2" \with {
- \override StaffSymbol #'staff-space = #1.7
- \override StaffSymbol #'line-positions = #'(-4 -2 0 2)
+ \override StaffSymbol.staff-space = #1.7
+ \override StaffSymbol.line-positions = #'(-4 -2 0 2)
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s3" \with {
- \override StaffSymbol #'staff-space = #3
+ \override StaffSymbol.staff-space = #3
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
>>
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The two dots of a repeat sign should be symmetric
to the staff centre and avoid staff lines even for exotic staves.
\score {
<<
\context Staff = "s1" \with {
- \override StaffSymbol #'staff-space = #0.5
+ \override StaffSymbol.staff-space = #0.5
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s2" \with {
- \override StaffSymbol #'staff-space = #0.6
- \override StaffSymbol #'line-positions = #'(-4 -2 0 2)
+ \override StaffSymbol.staff-space = #0.6
+ \override StaffSymbol.line-positions = #'(-4 -2 0 2)
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s3" {
- s1 \bar ":|"
+ s1 \bar ":|."
}
>>
}
\score {
<<
\context Staff = "s1" {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s2" \with {
- \override StaffSymbol #'staff-space = #0.33
+ \override StaffSymbol.staff-space = #0.33
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s3" \with {
- \override StaffSymbol #'staff-space = #0.33
- \override StaffSymbol #'line-positions = #'(-4 -2 0 2)
+ \override StaffSymbol.staff-space = #0.33
+ \override StaffSymbol.line-positions = #'(-4 -2 0 2)
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
>>
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The two dots of a repeat sign should be symmetric
to the staff centre and avoid staff lines even for exotic staves.
\score {
<<
\context Staff = "s1" \with {
- \override StaffSymbol #'staff-space = #0.7
+ \override StaffSymbol.staff-space = #0.7
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s2" \with {
- \override StaffSymbol #'line-positions = #'(-4 -2 0 2)
+ \override StaffSymbol.line-positions = #'(-4 -2 0 2)
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s3" {
- s1 \bar ":|"
+ s1 \bar ":|."
}
>>
}
\score {
<<
\context Staff = "s1" {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s2" \with {
- \override StaffSymbol #'staff-space = #3
- \override StaffSymbol #'line-positions = #'(-4 -2 0 2)
+ \override StaffSymbol.staff-space = #3
+ \override StaffSymbol.line-positions = #'(-4 -2 0 2)
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s3" \with {
- \override StaffSymbol #'staff-space = #6
+ \override StaffSymbol.staff-space = #6
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
>>
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The two dots of a repeat sign should be symmetric
to the staff centre and avoid staff lines even for exotic staves.
\score {
<<
\context Staff = "s1" \with {
- \override StaffSymbol #'staff-space = #0.3
+ \override StaffSymbol.staff-space = #0.3
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s2" \with {
- \override StaffSymbol #'staff-space = #0.5
+ \override StaffSymbol.staff-space = #0.5
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s3" {
- s1 \bar ":|"
+ s1 \bar ":|."
}
>>
{
<<
\context Staff = "s1" \with {
- \override StaffSymbol #'staff-space = #0.5
+ \override StaffSymbol.staff-space = #0.5
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s2" \with {
- \override StaffSymbol #'staff-space = #0.6
+ \override StaffSymbol.staff-space = #0.6
} {
- s1 \bar ":|"
+ s1 \bar ":|."
}
\context Staff = "s3" {
- s1 \bar ":|"
+ s1 \bar ":|."
}
>>
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The two dots of a repeat sign should be symmetric
to the staff centre and avoid staff lines even for exotic staves."
}
-mus = \context Voice { \relative f' { d e f g \bar ":|" } }
+mus = \context Voice { \relative f' { d e f g \bar ":|." } }
\new Staff {
<<
}
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(-6 -4 -2 0 2)
+ \override StaffSymbol.line-positions = #'(-6 -4 -2 0 2)
} {
<<
\clef french
}
\new Staff \with {
- \override StaffSymbol #'line-count = #4
+ \override StaffSymbol.line-count = #4
} {
<<
\mus
}
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(-2 0 2 4)
+ \override StaffSymbol.line-positions = #'(-2 0 2 4)
} {
<<
\mus
}
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(-8 -4)
+ \override StaffSymbol.line-positions = #'(-8 -4)
} {
<<
\clef french
}
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(-2 0)
- \override StaffSymbol #'staff-space = #1.5
+ \override StaffSymbol.line-positions = #'(-2 0)
+ \override StaffSymbol.staff-space = #1.5
} {
<<
\mus
}
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(-2 0)
+ \override StaffSymbol.line-positions = #'(-2 0)
} {
<<
\mus
}
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(-2.9 -2)
+ \override StaffSymbol.line-positions = #'(-2.9 -2)
} {
<<
\mus
}
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(-4 -3 -2)
+ \override StaffSymbol.line-positions = #'(-4 -3 -2)
} {
<<
\mus
}
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(-6 -5 -2 0 3 5)
+ \override StaffSymbol.line-positions = #'(-6 -5 -2 0 3 5)
} {
<<
\mus
}
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(-4 -2 -1)
- \override StaffSymbol #'staff-space = #1.5
+ \override StaffSymbol.line-positions = #'(-4 -2 -1)
+ \override StaffSymbol.staff-space = #1.5
} {
<<
\mus
}
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(-10 -2 6 14)
+ \override StaffSymbol.line-positions = #'(-10 -2 6 14)
} {
<<
\mus
}
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(-5 -4 -2 2 4 6)
+ \override StaffSymbol.line-positions = #'(-5 -4 -2 2 4 6)
} {
<<
\mus
}
\new Staff \with {
- \override StaffSymbol #'thickness = #4
+ \override StaffSymbol.thickness = #4
} {
<<
\clef french
}
\new Staff \with {
- \override StaffSymbol #'line-positions = #'(-2)
+ \override StaffSymbol.line-positions = #'(-2)
} {
<<
\mus
account properly."
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
}
\relative c''' {
- \override Rest #'direction = #UP
+ \override Rest.direction = #UP
\stemDown b8[ r b]
- \override Rest #'direction = #DOWN
+ \override Rest.direction = #DOWN
\stemDown b8[ r b]
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Breve, whole and half rests moving outside the staff should get
ledger lines."
rPos =
#(define-music-function (parser location y) (number?)
- #{ \override Rest #'staff-position = #y #})
+ #{ \override Rest.staff-position = #y #})
{
\set Score.timing = ##f
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "half rests should lie on a staff line, whole rests should hang
}
\new Staff {
- \override Staff.StaffSymbol #'line-positions = #'(-4 -2 0 2)
+ \override Staff.StaffSymbol.line-positions = #'(-4 -2 0 2)
\mus
}
\new Staff {
- \override Staff.StaffSymbol #'line-count = #4
+ \override Staff.StaffSymbol.line-count = #4
\mus
}
\new Staff {
- \override Staff.StaffSymbol #'line-positions = #'(-4 -2 1 5)
+ \override Staff.StaffSymbol.line-positions = #'(-4 -2 1 5)
\mus
}
(set! pitch (modulo (1+ pitch) 7)))))
oneNoteScore =
-#(define-music-function (parser location) ()
- (add-one-note-score parser)
- (make-music 'Music 'void #t))
+#(define-void-function (parser location) ()
+ (add-one-note-score parser))
%%%
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Use @code{define-event-class}, scheme engraver methods,
a4 b\schemeTextSpannerStart c d |
\repeat unfold 20 { a4 b c d | }
a4 b c\schemeTextSpannerEnd d |
- \override SchemeTextSpanner #'to-barline = ##t
+ \override SchemeTextSpanner.to-barline = ##t
a4\schemeTextSpannerStart b d c |
\repeat unfold 20 { a4 b c d | }
a1\schemeTextSpannerEnd |
"
}
-\version "2.16.0"
+\version "2.17.6"
\relative c''
{
- \override Script #'toward-stem-shift = #0.0
+ \override Script.toward-stem-shift = #0.0
a4^. c_.
- \override Script #'toward-stem-shift = #1.0
+ \override Script.toward-stem-shift = #1.0
a4^. c_.
}
--- /dev/null
+\version "2.17.2"
+
+\header {
+ texidoc = "Scripts avoid ties.
+"
+}
+
+% Managing what note heads' scripts have been accounted for in
+% the Tie_engraver is tricky.
+% This regtest tries to confuse it with various configurations
+% Of notes with and without ties, with multiple scripts, etc..
+
+\relative c''' {
+ r2. c4~-> | c-> r2. |
+ r2. c4-> | c-> r2. |
+ r2. c4~-> | c r2. |
+ r2. c4~ | c-> r2. | \break
+ r2. <g-- c-> >4--~ | <g-- c>-> ~ <g c---_>-> r2 |
+ r2. c4~ | c-> ~ c-> r2 |
+ r2. c4~-> | c ~ c-> r2 |
+ r2. c4~-> | c-> ~ c r2 |
+ r2. c4-> |
+}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "In addition to @code{Slur}, the music function @code{\\shape} works
\relative c'' {
% PhrasingSlur
d4\( d' b g g,8 f' e d c2\)
- \override PhrasingSlur #'color = #blue
- \shape PhrasingSlur #'((0 . -2) (-1 . 3.5) (0.5 . 0.5) (0 . -2.5))
+ \override PhrasingSlur.color = #blue
+ \shape #'((0 . -2) (-1 . 3.5) (0.5 . 0.5) (0 . -2.5)) PhrasingSlur
d4\( d' b g g,8 f' e d c2\)
\break
cis1~
\break
cis
- \override Tie #'color = #blue
- \shape Tie #'(() ((0 . -0.9) (0 . -0.5) (0 . -0.5) (0 . -0.9)))
+ \override Tie.color = #blue
+ \shape #'(() ((0 . -0.9) (0 . -0.5) (0 . -0.5) (0 . -0.9))) Tie
cis~
\break
cis
% LaissezVibrerTie
c\laissezVibrer
- \override LaissezVibrerTie #'color = #blue
- \shape LaissezVibrerTie #'((0 . 0) (0.5 . 0.2) (1.5 . 0.2) (2 . 0))
+ \override LaissezVibrerTie.color = #blue
+ \shape #'((0 . 0) (0.5 . 0.2) (1.5 . 0.2) (2 . 0)) LaissezVibrerTie
c\laissezVibrer
\break
% RepeatTie
c\repeatTie
- \override RepeatTie #'color = #blue
- \shape RepeatTie #'((-1 . 0) (-0.7 . 0) (-0.3 . 0) (0 . 0))
+ \override RepeatTie.color = #blue
+ \shape #'((-1 . 0) (-0.7 . 0) (-0.3 . 0) (0 . 0)) RepeatTie
c\repeatTie
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The control points of a broken or unbroken slur may be offset by
% modified
\relative c'' {
- \override Slur #'color = #blue
- \shape Slur #'((0 . -2) (-1 . 3.5) (0.5 . 0.5) (0 . -2.5))
+ \override Slur.color = #blue
+ \shape #'((0 . -2) (-1 . 3.5) (0.5 . 0.5) (0 . -2.5)) Slur
d4( d' b g g,8 f' e d c2)
- \shape Slur #'(
+ \shape #'(
((0 . -2.5) (0 . 1.5) (0 . 1) (0 . -0.5))
((1 . 2.5) (0 . 1.5) (0 . 1) (0 . 0))
- )
+ ) Slur
d4( d' b g
\break
g,8 f' e d c2)
\version "2.16.0"
-#(ly:expect-warning (_ "didn't find a vertical alignment in this system"))
-#(ly:expect-warning (_ "didn't find a vertical alignment in this system"))
-#(ly:expect-warning (_ "didn't find a vertical alignment in this system"))
-#(ly:expect-warning (_ "didn't find a vertical alignment in this system"))
-#(ly:expect-warning (_ "didn't find a vertical alignment in this system"))
-#(ly:expect-warning (_ "didn't find a vertical alignment in this system"))
#(ly:expect-warning (_ "system with empty extent"))
#(ly:expect-warning (_ "didn't find a vertical alignment in this system"))
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "
\book {
\score {
{
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
\repeat unfold 3 { <c'''-1 e'''-3 g'''-5> c' <c,-1 e,-3 g,-5> c' \break}
}
\layout {
ragged-right = ##t
\context {
\Score
- \override System #'skyline-horizontal-padding = #1.5
+ \override System.skyline-horizontal-padding = #3.0
}
}
}
\layout {ragged-right = ##t}
-\version "2.16.0"
+\version "2.17.6"
\relative c''' {
- \override Score.PaperColumn #'keep-inside-line = ##f
- \override TextScript #'outside-staff-priority = #2
- \override DynamicLineSpanner #'outside-staff-priority = #1
+ \override Score.PaperColumn.keep-inside-line = ##f
+ \override TextScript.outside-staff-priority = #2
+ \override DynamicLineSpanner.outside-staff-priority = #1
c
- \once \override TextScript #'self-alignment-X = #CENTER
+ \once \override TextScript.self-alignment-X = #CENTER
a,^"this doesn't collide with the c"
b^"this goes above the previous markup"
a8_"this goes below the dynamic"
-\version "2.16.0"
+\version "2.17.6"
\header {texidoc = "@cindex Slur, dotted, dashed
The appearance of slurs may be changed from solid to dotted or dashed.
"
c( d e c) |
\slurDashPattern #0.4 #2.0
c( d e c) |
- \once \override Slur #'dash-definition = #'((0 0.25 1 1)
+ \once \override Slur.dash-definition = #'((0 0.25 1 1)
(0.3 0.7 0.4 0.75)
(0.75 1.0 1.0 1.0))
c( d e c) |
}
\relative
{
- b(^"dyn outside" b f'\p b,)
+ b( b f'\p b,)
g( d'\< d \! g,)
}
-\version "2.16.0"
+\version "2.17.6"
\header {
\slurUp
d,8[( a' d f] a[ d f d] a[ f d a)]
d,8[( a' d f] a[ a a d] f[ d d, a)]
- \once\override Slur #'eccentricity = #6.0
+ \once\override Slur.eccentricity = #6.0
d,8[( a' d f] a[ a a d] f[ d d, a)]
}
the given pair. "
}
-\version "2.16.0"
+\version "2.17.6"
\paper { ragged-right = ##T }
\relative c' {
- \override Slur #'positions = #'(-4 . -5)
+ \override Slur.positions = #'(-4 . -5)
e( f g)
}
}
-\version "2.16.0"
+\version "2.17.6"
\layout {
ragged-right = ##t
% #(define debug-slur-scoring #t)
f=''2( d4 f | g c a f | d c f2 | f1) |
}
-% \override Slur #'eccentricity = #-2
+% \override Slur.eccentricity = #-2
c=''8 ( d[ b f d] a'[ c])
}
}
-\version "2.16.0"
+\version "2.17.6"
\layout { ragged-right = ##t }
\relative c''{
\clef alto
\slurUp
- \override Script #'slur-padding = #0.2
- \override Script #'avoid-slur = #'inside
+ \override Script.slur-padding = #0.2
+ \override Script.avoid-slur = #'inside
c4(^\downbow b)
- \override Script #'avoid-slur = #'around
+ \override Script.avoid-slur = #'around
c4(^\downbow b)
c4^\downbow b
}
slur responds appropriately if a script is moved."
}
-\version "2.16.0"
+\version "2.17.6"
\layout {
indent = 0\mm
ragged-right = ##t
\relative
{
b4-.( b-.)
- \once \override Script #'padding = #1.5
+ \once \override Script.padding = #1.5
b-.( b-.)
b_\downbow( b_\downbow)
- \once \override Script #'padding = #1.5
+ \once \override Script.padding = #1.5
b_\downbow( b_\downbow)
}
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
\relative c' {
\slurUp
- \override TupletBracket #'bracket-visibility = ##f
- \override Slur #'(details region-size) = #6
+ \override TupletBracket.bracket-visibility = ##f
+ \override Slur.details.region-size = #6
\times 2/3
{
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Outside staff callbacks that no longer apply to grobs
\relative c'' {
\set strokeFingerOrientations = #'(up)
- \override StrokeFinger #'avoid-slur = #'outside
+ \override StrokeFinger.avoid-slur = #'outside
\autoBeamOff
<a-\rightHandFinger #2 >16 b
<a-\rightHandFinger #2 >16( b)
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="Festival song synthesis output supports
reordered lyrics.
\context Voice = alternative {
\voiceOne
\times 2/3 {
- \override NoteColumn #'force-hshift = #-3
+ \override NoteColumn.force-hshift = #-3
f8 f g
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="Festival song synthesis output supports
reordered lyrics.
\context Voice = alternative {
\voiceOne
\times 2/3 {
- \override NoteColumn #'force-hshift = #-3
+ \override NoteColumn.force-hshift = #-3
f8 f g
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Accidentals do not influence the amount of stretchable space.
line-width = 18.\cm
}
\relative c'' {
- \accidentalStyle "piano-cautionary"
+ \accidentalStyle piano-cautionary
\time 2/4
d16 d d d d d cis d dis dis dis dis
}
-\version "2.16.0"
+\version "2.17.6"
\layout{
ragged-right = ##t
}
\relative c'' {
- \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print
- \override Score.NonMusicalPaperColumn #'layer = #2
+ \override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
+ \override Score.NonMusicalPaperColumn.layer = #2
\time 2/4
\stemUp
}
-\version "2.16.0"
+\version "2.17.6"
\layout{ragged-right=##t}
\new Staff {
- \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print
- \override Score.NonMusicalPaperColumn #'layer = #1
+ \override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
+ \override Score.NonMusicalPaperColumn.layer = #1
s1
<b' c'' c'>2\arpeggio
}
-\version "2.16.0"
+\version "2.17.6"
\layout{
ragged-right = ##t
}
\relative c'' {
- \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print
- \override Score.NonMusicalPaperColumn #'layer = #2
+ \override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
+ \override Score.NonMusicalPaperColumn.layer = #2
\time 2/4
\stemDown
}
-\version "2.16.0"
+\version "2.17.6"
\layout{
ragged-right=##t
}
\new Staff \relative c' {
- \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print
- \override Score.NonMusicalPaperColumn #'layer = #1
+ \override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
+ \override Score.NonMusicalPaperColumn.layer = #1
\time 4/4
s1
\time 3/4
s2.
c2.
- \override Score.NonMusicalPaperColumn #'full-measure-extra-space = #3.0
+ \override Score.NonMusicalPaperColumn.full-measure-extra-space = #3.0
s2.
c2.
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "A clef can be folded below notes in a different staff, if
\context {
\Score
- \override NonMusicalPaperColumn #'stencil = #ly:paper-column::print
- \override PaperColumn #'stencil = #ly:paper-column::print
- \override NonMusicalPaperColumn #'font-family = #'roman
- \override PaperColumn #'font-family = #'roman
+ \override NonMusicalPaperColumn.stencil = #ly:paper-column::print
+ \override PaperColumn.stencil = #ly:paper-column::print
+ \override NonMusicalPaperColumn.font-family = #'roman
+ \override PaperColumn.font-family = #'roman
}
}
run are spaced accordingly. "
}
-\version "2.16.0"
+\version "2.17.6"
\paper { ragged-right = ##t }
c
\grace { c8[ c16 d c8] }
c
- \override Score.GraceSpacing #'spacing-increment = #2.0
+ \override Score.GraceSpacing.spacing-increment = #2.0
\grace { c4 c16 d16 }
c
}
-\version "2.16.0"
+\version "2.17.6"
\paper
{
\new Staff
\relative c
{
- \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print
+ \override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
\time 6/8
\clef bass
s2. |
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Spacing corrections for kneed beams still work when
\layout {
\context {
\Voice
- \override Beam #'auto-knee-gap = #1
+ \override Beam.auto-knee-gap = #1
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "For knees, the spacing correction is such that the
g''8[ g g'' g'']
% check code independent of default settings.
- \override NoteSpacing #'knee-spacing-correction = #1.0
+ \override NoteSpacing.knee-spacing-correction = #1.0
g''8[ g g'' g'']
- \override Stem #'thickness = #10
+ \override Stem.thickness = #10
g''8[ g g'' g'']
}
-\version "2.16.0"
+\version "2.17.6"
#(ly:expect-warning (_ "Cannot determine neighbors for floating column. "))
#(ly:expect-warning (_ "Loose column does not have right side to attach to."))
%% breaking spacing-wishes links.
\score {
\new Staff {
- \override Score.SpacingSpanner #'strict-note-spacing = ##t
+ \override Score.SpacingSpanner.strict-note-spacing = ##t
\afterGrace c'4 {c'32 c'32 }
c'4
}
}
-\version "2.16.0"
+\version "2.17.6"
\layout {
\context {
\Score
- \override SpacingSpanner #'strict-grace-spacing = ##t
+ \override SpacingSpanner.strict-grace-spacing = ##t
}
}
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
}
<<
- \override Score.SpacingSpanner #'strict-grace-spacing = ##t
+ \override Score.SpacingSpanner.strict-grace-spacing = ##t
\new Staff {
c'4
\afterGrace
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
\relative c''
{
- \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible
+ \override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
c1
\mark "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "
}
}
-\version "2.16.0"
+\version "2.17.6"
\layout {
ragged-right = ##t
\remove "Separating_line_group_engraver"
} {
\relative c' {
- \override Score.SpacingSpanner #'uniform-stretching = ##t
+ \override Score.SpacingSpanner.uniform-stretching = ##t
\set Score.proportionalNotationDuration = #(ly:make-moment 4 25)
r1
\time 3/8 r4.
-\version "2.16.0"
+\version "2.17.6"
\header{
\layout{
\context{
\Score
- \override SpacingSpanner #'uniform-stretching = ##t
+ \override SpacingSpanner.uniform-stretching = ##t
}
}
--- /dev/null
+\version "2.17.3"
+\header {
+ texidoc = "The spacing engine avoids collisions between non-adjacent columns."
+}
+
+\paper{ragged-right = ##t }
+<<
+ \new ChordNames \chordmode {
+ \set additionalPitchPrefix = #"add"
+ f2:13.15 f2
+ }
+ \new Staff {
+ f'4 f'8 f' f'2 \break
+ \set fingeringOrientations = #'(left)
+ \grace { <d-1-2-3>8[ f a] }
+ <fis''-1-2-3-4-5>4 r4
+ \set fingeringOrientations = #'(right)
+ <g'-1-2-3-4-5>4 \grace { d''8[ e'' d'']}
+ g'4
+ }
+>>
"
}
-\version "2.16.0"
+\version "2.17.6"
\relative c' {
- \override Score.SpacingSpanner #'packed-spacing = ##t
+ \override Score.SpacingSpanner.packed-spacing = ##t
c2 d4 f8[ g] a
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The space after a paper column can be increased by overriding
\layout {
\context {
\Score
- \override PaperColumn #'padding = #10
- \override NonMusicalPaperColumn #'padding = #10
+ \override PaperColumn.padding = #10
+ \override NonMusicalPaperColumn.padding = #10
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "When space-to-barline is false, we measure the space between the note and the
\paper {ragged-right = ##t}
{
- \override Score.SpacingSpanner #'common-shortest-duration = #(ly:make-moment 1 16)
+ \override Score.SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 16)
c'2 \clef bass c'2 \clef treble
- \override NoteSpacing #'space-to-barline = ##f
+ \override NoteSpacing.space-to-barline = ##f
c'2 \clef bass c'2 \clef treble
% the following two measures should be spaced identically
- \override NoteSpacing #'space-to-barline = ##t
+ \override NoteSpacing.space-to-barline = ##t
c'2 c'2
- \override NoteSpacing #'space-to-barline = ##f
+ \override NoteSpacing.space-to-barline = ##f
c'2 c'2
c'1
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Upstem notes before a barline are printed with some extra
\relative e'
{
- \override Score.PaperColumn #'layer = #1
- \override Score.PaperColumn #'stencil = #ly:paper-column::print
+ \override Score.PaperColumn.layer = #1
+ \override Score.PaperColumn.stencil = #ly:paper-column::print
\time 2/8
-\version "2.16.0"
+\version "2.17.6"
\header{
\context Voice \relative c {
- \override Score.PaperColumn #'layer = #1
- \override Score.PaperColumn #'stencil = #ly:paper-column::print
+ \override Score.PaperColumn.layer = #1
+ \override Score.PaperColumn.stencil = #ly:paper-column::print
%% make sure neutral is down.
- \override Stem #'neutral-direction = #down
+ \override Stem.neutral-direction = #down
\time 16/4 c''4 c c, c' d, c' e, c' f, c' g c a c b c
}
-\version "2.16.0"
+\version "2.17.6"
\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'' {
- \override Score.PaperColumn #'layer = #1
- \override Score.PaperColumn #'stencil = #ly:paper-column::print
+ \override Score.PaperColumn.layer = #1
+ \override Score.PaperColumn.stencil = #ly:paper-column::print
\stemDown
\time 12/4
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
\relative c''
<<
- \override Score.SpacingSpanner #'strict-note-spacing = ##t
+ \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
}
-\version "2.16.0"
+\version "2.17.6"
<<
- \override Score.SpacingSpanner #'strict-grace-spacing = ##t
+ \override Score.SpacingSpanner.strict-grace-spacing = ##t
\new Staff {
c'4
\afterGrace
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "An empty barline does not confuse the spacing engine too much.
\consists "Bar_engraver"
\consists "Axis_group_engraver"
- \override BarLine #'transparent = ##t
+ \override BarLine.transparent = ##t
}
}
}
-\version "2.16.0"
+\version "2.17.6"
\relative c''
<<
- \override Score.SpacingSpanner #'uniform-stretching = ##t
+ \override Score.SpacingSpanner.uniform-stretching = ##t
\new Staff {
c16[ c c c c c c c c c16]
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The @code{SpanBarStub} grob takes care of horizontal spacing
\new Voice = "upper"
\relative c'' {
c2 c c c
- \once \override Staff . BarLine #'allow-span-bar = ##f
+ \once \override Staff.BarLine.allow-span-bar = ##f
c2 c c c
c2 c c c
- \once \override Staff . BarLine #'allow-span-bar = ##f
+ \once \override Staff.BarLine.allow-span-bar = ##f
c2 c c c
}
\new Lyrics \lyricsto "upper" \lyricmode {
c2 c c c
c2 c c c
c2 c c c
- \once \override Staff . BarLine #'allow-span-bar = ##f
+ \once \override Staff.BarLine.allow-span-bar = ##f
c2 c c c
}
\new Lyrics \lyricsto "middle" \lyricmode {
-\version "2.16.0"
+\version "2.17.5"
\header {
- texidoc = "At the beginning of a system, the @code{|:} repeat
-barline is drawn between the staves, but the @code{:|} is not."
+ texidoc = "At the beginning of a system, the @code{.|:} repeat
+barline is drawn between the staves, but the @code{:|.} is not."
}
\new PianoStaff <<
\new Staff = "up" {
- \bar "|:" r1
- \bar ":|" \break r1
+ \bar ".|:" r1
+ \bar ":|." \break r1
}
\new Staff = "down" { r r }
>>
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Span bars can be turned on/@/off on a staff-by-staff basis."
}
\relative c' \new StaffGroup <<
\new Staff {
c1
- \once \override Staff.BarLine #'allow-span-bar = ##f
+ \once \override Staff.BarLine.allow-span-bar = ##f
c1 c1 c1
\bar "|."
}
\new Staff {
a1 a1
- \once \override Staff.BarLine #'allow-span-bar = ##f
+ \once \override Staff.BarLine.allow-span-bar = ##f
a1 a1
}
\new Staff {
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Span bars are drawn only between staff bar lines. By setting
bar lines to transparent, they are shown only between systems.
\relative c' \new StaffGroup <<
\new Staff {
a1
- \once \override Score.BarLine #'transparent = ##t
+ \once \override Score.BarLine.transparent = ##t
a1
- \once \override Score.SpanBar #'transparent = ##t
+ \once \override Score.SpanBar.transparent = ##t
a1 a1
\bar "|."
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The visibility of left-broken line spanners and hairpins
\paper { ragged-right = ##t }
\relative c' {
- \override TextSpanner #'bound-details =
+ \override TextSpanner.bound-details =
#'((left
(Y . 0)
(padding . 0.25)
(right-broken
(text . #f)))
c1\startTextSpan\< \break
- \override Hairpin #'to-barline = ##f
- \override Hairpin #'after-line-breaking = ##f
+ \override Hairpin.to-barline = ##f
+ \override Hairpin.after-line-breaking = ##f
c2\stopTextSpan\!
- \override TextSpanner #'after-line-breaking =
+ \override TextSpanner.after-line-breaking =
#ly:spanner::kill-zero-spanned-time
c\startTextSpan\< \break
c1\!\stopTextSpan
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The @code{break-overshoot} property sets the amount that
\paper { ragged-right = ##t }
\relative c'' {
- \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
+ \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.. \times 2/3 { c8.[ \break c8.] }
}
later by setting the @code{ledger-extra} property."
}
-\version "2.16.0"
+\version "2.17.6"
\new Staff \relative c' {
- \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
+ \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
g,4 c e b' c'' e g
}
}
-\version "2.16.0"
+\version "2.17.6"
\new Staff \relative c' {
- \override Staff.StaffSymbol #'line-positions = #'(-7 -2 0 3 9)
+ \override Staff.StaffSymbol.line-positions = #'(-7 -2 0 3 9)
g c f b e a
}
}
-\version "2.16.0"
+\version "2.17.6"
\layout {
ragged-right = ##t
}
melody = \relative c''' {
- \override DynamicText #'extra-offset = #'(0 . 3)
+ \override DynamicText.extra-offset = #'(0 . 3)
s1-\f c8[(\< r a g]) e[ r d( <f a>])\! \times 2/3 { d4 d d }
}
<<
\new Staff \with {
fontSize = #-4
- \override StaffSymbol #'staff-space = #(magstep -4)
+ \override StaffSymbol.staff-space = #(magstep -4)
} {
\melody
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The staff is a grob (graphical object) which may be adjusted as well, for example, to have 6 thick lines and a slightly large @code{staff-space}.
<<
\new Staff {
- \override Staff.StaffSymbol #'thickness = #2.0
- \override Staff.StaffSymbol #'line-count = #6
- \override Staff.StaffSymbol #'staff-space = #1.1
+ \override Staff.StaffSymbol.thickness = #2.0
+ \override Staff.StaffSymbol.line-count = #6
+ \override Staff.StaffSymbol.staff-space = #1.1
\mus
}
\mus
}
-\version "2.16.0"
+\version "2.17.6"
\relative c'' \new Voice \with {
\consists "Melody_engraver"
- \override Stem #'neutral-direction = #'()
+ \override Stem.neutral-direction = #'()
} {
c4 b c b
c c c c
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Stems with overridden 'Y-extent should
\score {
\new Voice {
\voiceTwo
- \override Stem #'Y-extent = #'(0.0 . 0.0)
+ \override Stem.Y-extent = #'(0.0 . 0.0)
\repeat unfold 144 a4
}
\layout {
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Stem length and stem-begin-position can be set manually.
\autoBeamOff
\stemUp
a8 aes''8
- \override Stem #'length = #20
+ \override Stem.length = #20
a,,8
- \revert Stem #'length
+ \revert Stem.length
aes''!8
\stemNeutral
- \override Stem #'stem-begin-position = #-2
+ \override Stem.stem-begin-position = #-2
c,8
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Stemlets don't cause stems on whole notes."
}
\paper{ ragged-right=##t }
{
- \override Stem #'stemlet-length = #0.5
+ \override Stem.stemlet-length = #0.5
c''1
}
}
-\version "2.16.0"
+\version "2.17.6"
\layout { ragged-right = ##t }
\relative c' {
- \override Stem #'stemlet-length = #0.75
+ \override Stem.stemlet-length = #0.75
c8[ r8 c16 r16 c8]
c4
}
--- /dev/null
+\version "2.17.2"
+
+\header {
+ texidoc = "Tremolos should avoid other notes in the staff as
+best as possible and issue a warning otherwise.
+"
+}
+
+#(ly:expect-warning (_ "ignoring too many clashing note columns"))
+
+{
+<<
+ { b'4 f'2. }
+ \\
+ {
+ \grace a8
+ \repeat tremolo 32 <b g'>32
+ }
+>>
+}
\ No newline at end of file
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc="Stem tremolos count in a note column's horizontal skyline.
"
\relative c'' {
\autoBeamOff
- \override NoteHead #'stencil = #(ly:make-stencil '() '(0 . 0) '(0 . 0))
+ \override NoteHead.stencil = #(ly:make-stencil '() '(0 . 0) '(0 . 0))
\repeat unfold 8 { b8:32 }
}
}
-\version "2.16.0"
+\version "2.17.6"
\layout {
ragged-right = ##t
<<
\new Staff \with {
fontSize = #-4
- \override StaffSymbol #'staff-space = #(magstep -4)
+ \override StaffSymbol.staff-space = #(magstep -4)
}
\fragment
\new Staff \fragment
-\version "2.16.0"
+\version "2.17.6"
#(ly:set-option 'warning-as-error #f)
#(ly:expect-warning (_ "tremolo duration is too long"))
\context Voice \relative c''{
\textSpannerUp
- \override TextScript #'padding = #5
+ \override TextScript.padding = #5
% The following note should print a warning (quarter tremolo cannot be notated)
a1:4^":4" a:8^":8" c:16^":16" a:32^":32" a^"x" a:^":"
a':32 a,,:32
texidoc = "Combinations of rotation and color do work."
}
-\version "2.16.0"
+\version "2.17.6"
\relative c'{
- \override Hairpin #'rotation = #'(20 -1 0)
- \override Hairpin #'color = #(x11-color 'LimeGreen)
+ \override Hairpin.rotation = #'(20 -1 0)
+ \override Hairpin.color = #(x11-color 'LimeGreen)
g4\< b d f'\!
}
-\version "2.16.0"
+\version "2.17.6"
\header { texidoc=" You can write stencil callbacks in Scheme, thus
providing custom glyphs for notation elements. A simple example is
\relative c' {
c4 e
- \override NoteHead #'stencil
+ \override NoteHead.stencil
=
#(parenthesize-callback ly:note-head::print)
g bes
- \revert NoteHead #'stencil
+ \revert NoteHead.stencil
- \override Beam #'stencil
+ \override Beam.stencil
=
#(parenthesize-callback ly:beam::print)
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Stencils can be scaled using @code{ly:stencil-scale}.
}
\relative c' {
- \override Staff.Clef #'stencil =
+ \override Staff.Clef.stencil =
#(lambda (grob)
(ly:stencil-scale (ly:clef::print grob) 1 -1))
- \override Staff.TimeSignature #'stencil =
+ \override Staff.TimeSignature.stencil =
#(lambda (grob)
(ly:stencil-aligned-to
(ly:stencil-scale (ly:time-signature::print grob) -2 1)
X LEFT))
- \override MultiMeasureRestText #'stencil =
+ \override MultiMeasureRestText.stencil =
#(lambda (grob)
(ly:stencil-scale (ly:text-interface::print grob) 2 1.6))
R1\fermataMarkup
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The size of every system is correctly determined; this
\layout {
\context {
\Score
- \override System #'stencil = #box-grob-stencil
+ \override System.stencil = #box-grob-stencil
}
}
\new Voice
{
\unset Staff.minimumVerticalExtent
- \override Score.RehearsalMark #'font-size = #20
+ \override Score.RehearsalMark.font-size = #20
\slurDown c4 ( g4 c''4)
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "When the staff-space is increased, the system-start delimiter
length, but a multiple of staff-spaces)."
}
-\new Staff \with { \override StaffSymbol #'staff-space = #1.4 }
+\new Staff \with { \override StaffSymbol.staff-space = #1.4 }
{
a4 b c d
}
\header { texidoc = "A heavy-bar system start delimiter may be created by tuning the @code{SystemStartBar} grob."
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
\new StaffGroup
\relative <<
\set StaffGroup.systemStartDelimiter = #'SystemStartBar
- \override StaffGroup.SystemStartBar #'thickness = #8
- \override StaffGroup.SystemStartBar #'padding = #0.2
+ \override StaffGroup.SystemStartBar.thickness = #8
+ \override StaffGroup.SystemStartBar.padding = #0.2
\new Staff { c1 }
\new Staff { c1 }
>>
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "In a TabStaff, the chord repetition function needs
\new Staff {
\new Voice {
\clef "treble_8"
- \override Voice.StringNumber #'transparent = ##t
+ \override Voice.StringNumber.transparent = ##t
\Guitar
}
}
-\version "2.16.0"
+\version "2.17.6"
\header{ texidoc = "As default, tablature staves show only the fret numbers, because
in most situations, they are combined with normal staves.
\times 3/4 { b,4 c \glissando d\5 \glissando c } |
c4. d-_( |
e\varcoda-> )
- \override TextSpanner #'(bound-details left text) = "rit." f\startTextSpan |
+ \override TextSpanner.bound-details.left.text = "rit." f\startTextSpan |
g ~ g\prall |
g\thumb e-.\stopTextSpan
\bar "|."
}
+#(set-global-staff-size 18)
+
\score {
<<
\new Staff { \clef "G_8" \tabstuff }
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "
\score {
<<
\new Staff {
- \new Voice \with { \override StringNumber #'stencil = ##f } {
+ \new Voice \with { \override StringNumber.stencil = ##f } {
\clef "treble_8"
\test
}
texidoc = "How a repeat sign looks in tablature."
}
-\version "2.16.0"
+\version "2.17.2"
\paper
{
ragged-right = ##t
-\version "2.16.0"
+\version "2.17.6"
\header{ texidoc = "In tablature, notes that are tied to are invisible
except after a line break or within a second volta;
\context StaffGroup <<
\context Staff {
\clef "G_8"
- \override Voice.StringNumber #'transparent = ##t % remove circled string numbers
+ \override Voice.StringNumber.transparent = ##t % remove circled string numbers
\firstpart
\secondpart
\thirdpart
\context StaffGroup <<
\context Staff {
\clef "G_8"
- \override Voice.StringNumber #'transparent = ##t % remove circled string numbers
+ \override Voice.StringNumber.transparent = ##t % remove circled string numbers
\firstpart
\secondpart
\thirdpart
--- /dev/null
+\version "2.17.6"
+\header {
+
+ texidoc = "The @code{\\removeWithTag} and @code{\\keepWithTag}
+commands can name multiple tags to remove or to keep."
+
+}
+
+\layout { ragged-right= ##t }
+
+music =
+<<
+ \tag #'flood \new Voice { \voiceOne \repeat unfold 16 { c'''8 cis'''8 } }
+ \tag #'highball \new Voice { \voiceThree \repeat unfold 8 { a'4( as') } }
+ \tag #'buffoon \new Voice { \voiceFour \repeat unfold 2 { f1~ f } }
+>>
+
+demo =
+#(define-music-function (parser location fun syms m)
+ (ly:music-function? symbol-list? ly:music?)
+ #{
+ \new Staff
+ <<
+ { \mark #(string-join (map symbol->string syms) "&") \skip 1*4 }
+ $fun #syms #m
+ >>
+ #})
+
+#(set-global-staff-size 16)
+
+\markuplist {
+ \fill-line { \center-column \fontsize #5 \bold { "\\keepWithTag" } }
+ \vspace #1
+}
+\demo #keepWithTag #'(none) \music
+\demo #keepWithTag #'(flood highball buffoon) \music
+\demo #keepWithTag #'(flood buffoon) \music
+\demo #keepWithTag #'(buffoon) \music
+
+\markup \vspace #2
+
+\markuplist {
+ \fill-line { \center-column \fontsize #5 \bold { "\\removeWithTag" } }
+ \vspace #1
+}
+\demo #removeWithTag #'(none) \music
+\demo #removeWithTag #'(flood highball buffoon) \music
+\demo #removeWithTag #'(flood buffoon) \music
+\demo #removeWithTag #'(buffoon) \music
--- /dev/null
+\version "2.16.0"
+
+\header {
+ texidoc = "By default, @code{TextScript} vertical skylines allow
+for stack @code{TextScript} grobs to fit snugly over each other instead
+of moving the entire distance of the bounding box.
+"
+}
+
+\relative c' {
+ a^\markup { \filled-box #'(0 . 2) #'(0 . 20) #0 hello}
+ a^\markup { world }
+}
\ No newline at end of file
ragged-right = ##t
}
-\version "2.16.0"
+\version "2.17.6"
<<
\new Staff {
- \override TextSpanner #'(bound-details left text) = "*"
+ \override TextSpanner.bound-details.left.text = "*"
c'16 \startTrillSpan c' c' c' \stopTrillSpan
c'16 \startTextSpan c' c' c' \stopTextSpan
}
\new Staff {
- \override TextScript #'self-alignment-X = #RIGHT
+ \override TextScript.self-alignment-X = #RIGHT
\repeat unfold 2 {c'4 _ \markup { "FAT" } }
}
>>
}
-\version "2.16.0"
+\version "2.17.6"
sample = \relative c'' {
c2\startTextSpan c2 \break
}
<< {
- \override TextSpanner #'bound-details #'left-broken #' text =
+ \override TextSpanner.bound-details.left-broken #' text =
\markup { \large "BROKEN" }
- \override TextSpanner #'(bound-details left text) =
+ \override TextSpanner.bound-details.left.text =
\markup { "text" }
\sample
} \\ {
- \override TextSpanner #'(bound-details left text) =
+ \override TextSpanner.bound-details.left.text =
\markup { "text" }
- \override TextSpanner #'bound-details #'left-broken #' text =
+ \override TextSpanner.bound-details.left-broken #' text =
\markup { \large "BROKEN" }
\sample
} >>
" }
-\version "2.16.0"
+\version "2.17.6"
\paper {
debug-tie-scoring = ##t
}
\relative c'' {
- \override Tie #'layer = #2
+ \override Tie.layer = #2
a ~ <fis a>
}
-\version "2.16.0"
+\version "2.17.6"
\header {
}
\relative c' {
- \override Tie #'minimum-length = #5
+ \override Tie.minimum-length = #5
f2. f16 f f f ~ | \break
f1
}
-\version "2.16.0"
+\version "2.17.6"
\header { texidoc = "
\relative c'' {
\time 4/4 <bis bis>1 ~ \break
- \override Tie #'(details multi-tie-region-size) = #1
+ \override Tie.details.multi-tie-region-size = #1
\time 3/4 <bis bis>2.~ \break
\time 4/4 <bis bis>1
}
-\version "2.16.0"
+\version "2.17.6"
\header {texidoc = "@cindex Tie, dotted, dashed
The appearance of ties may be changed from solid to dotted or dashed.
"
c2 ~ c |
\tieDashPattern #0.4 #2.0
c2 ~ c |
- \once \override Tie #'dash-definition = #'((0 0.25 1 1)
+ \once \override Tie.dash-definition = #'((0 0.25 1 1)
(0.3 0.7 0.4 0.75)
(0.75 1.0 1.0 1.0))
c2 ~ c |
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "If using integers, the tie will vertically tuned for
}
\relative c'' {
- \override Tie #'staff-position = #3
+ \override Tie.staff-position = #3
d4 ~
- \override Tie #'staff-position = #3.0
+ \override Tie.staff-position = #3.0
d ~
d
}
}
-\version "2.16.0"
+\version "2.17.6"
\layout {
ragged-right = ##t
<b d f g>~
- \once \override TieColumn #'tie-configuration =
+ \once \override TieColumn.tie-configuration =
#'((0 . -1) (2 . -1) (5.5 . 1) (7 . 1))
<b d f g>
}
-\version "2.16.0"
+\version "2.17.6"
\layout{ragged-right=##t}
{
c''\laissezVibrer\repeatTie
r
- \override LaissezVibrerTie #'direction = #DOWN
- \override RepeatTie #'direction = #DOWN
+ \override LaissezVibrerTie.direction = #DOWN
+ \override RepeatTie.direction = #DOWN
c''\laissezVibrer_"override"\repeatTie
}
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
}
{
- \override Tie #'staff-position = #-5.5
+ \override Tie.staff-position = #-5.5
c'4 ~ c'
- \override Tie #'staff-position = #-6.5
+ \override Tie.staff-position = #-6.5
c'4 ~ c'
- \override Tie #'staff-position = #-7.5
+ \override Tie.staff-position = #-7.5
c'4 ~ c'
- \revert Tie #'staff-position
- \override Tie #'direction = #UP
+ \revert Tie.staff-position
+ \override Tie.direction = #UP
c'4 ~ c'
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Chained trills end at the next trill or barline.
Collisions can be prevented by overriding @code{bound-details}.
g8 f\startTrillSpan ~
f8 g\stopTrillSpan \startTrillSpan ~
g8 r\stopTrillSpan r4
- \once \override TrillSpanner #'to-barline = ##t
+ \once \override TrillSpanner.to-barline = ##t
c1\startTrillSpan ~
c1
- \once \override TrillSpanner #'(bound-details right padding) = #1.2
+ \once \override TrillSpanner.bound-details.right.padding = #1.2
c1\stopTrillSpan \startTrillSpan
c1\stopTrillSpan\startTrillSpan
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "
<<
\new Staff \with {
fontSize = #-6
- \override StaffSymbol #'staff-space = #(magstep -6)
+ \override StaffSymbol.staff-space = #(magstep -6)
}
\relative c' {
c1\startTrillSpan | c\stopTrillSpan |
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "@code{TupletBracket} grobs avoid @code{Fingering} grobs.
}
\relative d'' {
- \override TupletBracket #'direction = #UP
+ \override TupletBracket.direction = #UP
\times 2/3 { d4 a8-4 }
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "@code{TupletBracket} grobs avoid @code{StringNumber} grobs.
}
\relative d'' {
- \override TupletBracket #'direction = #UP
+ \override TupletBracket.direction = #UP
\times 2/3 { d4 <a\4>8 }
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
\layout {
\context {
\Score
- \override TupletBracket #'bracket-visibility = ##t
+ \override TupletBracket.bracket-visibility = ##t
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Tuplet brackets' outside staff priority can be
}
\relative c'' {
- \override TupletBracket #'avoid-scripts = ##f
+ \override TupletBracket.avoid-scripts = ##f
% Plain old tuplet
\times 2/3 { a8 r a }
% With nothing set, collisions abound both horizontally and
% vertically
\times 2/3 { a8^\espressivo r a^\espressivo }
% Setting the staff priority prevents collisions
- \override TupletBracket #'outside-staff-priority = #1
+ \override TupletBracket.outside-staff-priority = #1
\times 2/3 { a8^\espressivo r a^\espressivo }
% Note that, with the outside-staff-priority set, this bracket
% should be at the same vertical level as the first one
--- /dev/null
+\version "2.17.6"
+
+\header {
+ texidoc = "Tuplet brackets do not push objects with outside-staff-priority
+too high.
+"
+}
+
+\relative c' {
+ \override TupletBracket.direction = #UP
+ \times 1/1 { a^"foo" a' a' a' }
+}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "The default behavior of tuplet-bracket visibility is to print a bracket
\new Voice {
\relative c' {
<< \music s4^"default" >>
- \override TupletBracket #'bracket-visibility = #'if-no-beam
+ \override TupletBracket.bracket-visibility = #'if-no-beam
<< \music s4^"'if-no-beam" >>
- \override TupletBracket #'bracket-visibility = ##t
+ \override TupletBracket.bracket-visibility = ##t
<< \music s4^"#t" >>
- \override TupletBracket #'bracket-visibility = ##f
+ \override TupletBracket.bracket-visibility = ##f
<< \music s4^"#f" >>
}
}
}
-\version "2.16.0"
+\version "2.17.6"
\paper {
ragged-right = ##t
\relative c'' {
- \override TupletNumber #'text = #tuplet-number::calc-fraction-text
+ \override TupletNumber.text = #tuplet-number::calc-fraction-text
- \override TupletBracket #'edge-text = #(cons
+ \override TupletBracket.edge-text = #(cons
(markup #:fontsize 6
#:arrow-head X LEFT #f)
(markup #:arrow-head X RIGHT #f))
\times 11/19 {
c4 c4 c4 c4
- \bar "empty" \break
+ \bar "-" \break
c4 c4 c4 c4
c4 c4 c4 c4
- \bar "empty" \break
+ \bar "-" \break
c4 c4 c4 c4
c4 c4 c4
}
attaching column for a full-length tuplet bracket can be ignored."
}
-\version "2.16.0"
+\version "2.17.6"
\new Staff {
\set tupletFullLength = ##t
\time 1/8
\times 2/3 { c'16 c'16 c'16 }
\times 2/3 { c'16 c'16 c'16 }
- \override TupletBracket #'full-length-to-extent = ##f
+ \override TupletBracket.full-length-to-extent = ##f
\times 2/3 { c'16 c'16 c'16 }
- \override Score.RehearsalMark #'break-visibility = ##(#t #t #t)
- \override Score.RehearsalMark #'direction = #down
+ \override Score.RehearsalMark.break-visibility = ##(#t #t #t)
+ \override Score.RehearsalMark.direction = #down
\mark "xxxxxxxxxxxxxxxxxxxxxxx"
}
start of the next non-tuplet note. "
}
-\version "2.16.0"
+\version "2.17.6"
\paper { ragged-right = ##t
indent = 0.0 }
\relative c'' \new Voice \with {
\remove Forbid_line_break_engraver
- \override Beam #'breakable = ##t
+ \override Beam.breakable = ##t
}
{
\set tupletFullLength = ##t
c4
\times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c \bar "empty" \break c] }
+ \times 2/3 { c8[ c \bar "-" \break c] }
<< \times 2/3 { c8[ c c] }
- { s4*5/6 \bar "empty" \break } >>
+ { s4*5/6 \bar "-" \break } >>
c4
\times 2/3 { c8[ c c] }
}
-\version "2.16.0"
+\version "2.17.6"
\layout {
indent = 0.0\mm
\relative c'' {
- \override TupletNumber #'text = #tuplet-number::calc-fraction-text
+ \override TupletNumber.text = #tuplet-number::calc-fraction-text
\times 17/12 { c8 c4 c8 c8}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Broken nested tuplets avoid each other correctly.
\new Staff
<<
\relative c'' {
- \override Score . Beam #'breakable = ##t
+ \override Score.Beam.breakable = ##t
r2
\times 2/3 { a8[ a a] }
}
- \override TupletNumber #'text = #tuplet-number::calc-fraction-text
+ \override TupletNumber.text = #tuplet-number::calc-fraction-text
\times 4/6 {
\times 2/3 {
a4 a a
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc=" Tuplets may be nested."
\times 2/3 { a8[ a a] }
}
- \override TupletNumber #'text = #tuplet-number::calc-fraction-text
+ \override TupletNumber.text = #tuplet-number::calc-fraction-text
\times 4/6 {
\times 2/3 {
a4 a a
}
-\version "2.16.0"
+\version "2.17.6"
\layout{
\context{
\TabStaff
- \override TimeSignature #'stencil = ##f
+ \override TimeSignature.stencil = ##f
}
\context{
\TabVoice
\remove "Beam_engraver"
\remove "Stem_engraver"
- \override TupletBracket #'number-visibility = ##f
+ \override TupletBracket.number-visibility = ##f
}
}
--- /dev/null
+\version "2.17.6"
+
+\header {
+
+ texidoc = "Grobs whose parents have @code{outside-staff-priority} set
+should figure into the vertical skyline of the @code{VerticalAxisGroup}
+such that grobs with a higher @code{outside-staff-priority} are correctly
+positioned above them.
+"
+
+}
+
+\relative c'' {
+ \override TupletBracket.outside-staff-priority = #1
+ \override TupletNumber.font-size = #5
+ \times 2/3 { a4\trill a\trill^"foo" a\trill }
+}
\ No newline at end of file
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Tuplet numbers' outside staff priority can be
}
\relative c'' {
- \override TupletBracket #'avoid-scripts = ##f
+ \override TupletBracket.avoid-scripts = ##f
\times 2/3 { a8\trill a\trill a\trill }
- \override TupletNumber #'outside-staff-priority = #1
+ \override TupletNumber.outside-staff-priority = #1
\times 2/3 { a8\trill a\trill a\trill }
- \override Script #'outside-staff-priority = #2
+ \override Script.outside-staff-priority = #2
\times 2/3 { a8\trill a\trill a\trill }
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "Tuplet bracket formatting supports numerous options,
\times 2/3 { c8^"B" c[ c] }
\times 2/4 { r8_"B" c,[ c'] r8 }
- \override TupletBracket #'bracket-visibility = #'if-no-beam
+ \override TupletBracket.bracket-visibility = #'if-no-beam
\times 2/3 { c8[ c c] }
\tupletUp
- \override TupletNumber #'stencil = ##f
+ \override TupletNumber.stencil = ##f
\times 2/3 { c8^""^""^"up, no digit" c[ c] }
- \revert TupletNumber #'stencil
+ \revert TupletNumber.stencil
- \override TupletBracket #'bracket-visibility = ##t
- \override TupletBracket #'edge-height = #'(0 . 0)
- \override TupletBracket #'shorten-pair = #'(2.0 . 2.0)
+ \override TupletBracket.bracket-visibility = ##t
+ \override TupletBracket.edge-height = #'(0 . 0)
+ \override TupletBracket.shorten-pair = #'(2.0 . 2.0)
\times 4/6 { c_"shorter, no edges" f b b f c}
- \revert TupletBracket #'edge-height
- \revert TupletBracket #'shorten-pair
+ \revert TupletBracket.edge-height
+ \revert TupletBracket.shorten-pair
- \override TupletBracket #'bracket-flare = #'(0.5 . 0.5)
+ \override TupletBracket.bracket-flare = #'(0.5 . 0.5)
\times 2/3 { b^""^""^"angled edges" b b }
\tupletNeutral
\times 2/3 { b b b }
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc="Non-standard tuplet texts: Printing other tuplet fractions than the ones actually assigned."
}
\context Voice \relative c'' {
- \once \override TupletNumber #'text = #(tuplet-number::non-default-tuplet-denominator-text 7)
+ \once \override TupletNumber.text = #(tuplet-number::non-default-tuplet-denominator-text 7)
\times 2/3 { c4. c4. c4. c4. }
- \once \override TupletNumber #'text = #(tuplet-number::non-default-tuplet-fraction-text 12 7)
+ \once \override TupletNumber.text = #(tuplet-number::non-default-tuplet-fraction-text 12 7)
\times 2/3 { c4. c4. c4. c4. }
- \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper (tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
+ \once \override TupletNumber.text = #(tuplet-number::append-note-wrapper (tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
\times 2/3 { c4. c4. c4. c4. }
}
-\version "2.16.0"
+\version "2.17.6"
\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'' {
- \once \override TupletNumber #'text = #(tuplet-number::fraction-with-notes "4." "8")
+ \once \override TupletNumber.text = #(tuplet-number::fraction-with-notes "4." "8")
\times 2/3 { c4. c4. c4. c4. }
- \once \override TupletNumber #'text = #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
+ \once \override TupletNumber.text = #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
\times 2/3 { c4. c4. c4. c4. }
}
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc="Non-standard tuplet texts: Appending a note value to the normal text and to the fraction text."
}
\context Voice \relative c'' {
- \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4")
+ \once \override TupletNumber.text = #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4")
\times 2/3 { c8 c8 c8 c8 c8 c8 }
- \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4")
+ \once \override TupletNumber.text = #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4")
\times 2/3 { c8 c8 c8 c8 c8 c8 }
}
-\version "2.16.0"
+\version "2.17.6"
\header{
texidoc="
\context Voice \relative c'' {
\times 2/3 { a8 b c }
\times 2/3 { r8 b[ f] }
- \override TupletBracket #'bracket-flare = #'(0.5 . 0.5)
+ \override TupletBracket.bracket-flare = #'(0.5 . 0.5)
\times 2/3 { r8 b r8 }
c4 |
}
-\version "2.16.0"
+\version "2.17.6"
#(ly:expect-warning (_ "(De)crescendo with unspecified starting volume in MIDI."))
#(ly:expect-warning (_ "(De)crescendo with unspecified starting volume in MIDI."))
}
pianoRH = \relative c''' \repeat volta 2\new Voice {
- \accidentalStyle "modern"
+ \accidentalStyle modern
\voiceOne
g16( fis a g fis g f e d c b
\oneVoice
a ) |
<g e>8( <es fis a> <d e bes'> <c e c'>\arpeggio) r8 r |
r8 c'( e,) f r a |
- \once \override DynamicLineSpanner #'padding =#3
+ \once \override DynamicLineSpanner.padding =#3
r8
<< { fis( g) } \\
<< { a4 } { s8\> s8\! } >>
}
pianoLH = \relative c'' \repeat volta 2\new Voice {
- \accidentalStyle "modern"
+ \accidentalStyle modern
\voiceTwo
g16( fis a g fis g
<< \time 6/8
\new Staff \with {
fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
+ \override StaffSymbol.staff-space = #(magstep -3)
} <<
- \context Staff \accidentalStyle "modern"
+ \context Staff \accidentalStyle modern
\melody >>
\lyricsto "singer" \new Lyrics \firstVerse
\lyricsto "singer" \new Lyrics \secondVerse
\layout {
\context {
\Lyrics
- \override LyricText #'font-size = #-1
+ \override LyricText.font-size = #-1
}
\context {
\Score
- \override Beam #'beam-thickness = #0.55
- \override Beam #'auto-knee-gap = #4.0
- \override SpacingSpanner #'spacing-increment = #1.0
- \override Stem #'stemlet-length = #0.5
- \override Slur #'height-limit = #1.5
+ \override Beam.beam-thickness = #0.55
+ \override Beam.auto-knee-gap = #4.0
+ \override SpacingSpanner.spacing-increment = #1.0
+ \override Stem.stemlet-length = #0.5
+ \override Slur.height-limit = #1.5
}
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc = "unpure-pure containers take two arguments: an unpure property and
\relative c'' {
\stemUp \autoBeamOff
d,8 eis'
- \once \override Flag #'Y-offset =
+ \once \override Flag.Y-offset =
#(ly:make-unpure-pure-container ly:flag::calc-y-offset 8)
d,8 eis'!
- \once \override Flag #'Y-offset = #8
+ \once \override Flag.Y-offset = #8
d,8 eis'!
}
--- /dev/null
+\version "2.17.5"
+
+\header {
+ texidoc = "Volta bracket end hooks can be added for other bar line types.
+"
+}
+
+#(allow-volta-hook "|")
+
+\new Staff {
+ \repeat volta 2 { c'1 }
+ \alternative { { c'1 } { d'1 } }
+ e'1
+}
\ No newline at end of file
--- /dev/null
+\version "2.16.0"
+
+\header {
+ texidoc = "Volta brackets are vertically fit to objects below them.
+"
+}
+
+\new Staff {
+ \repeat volta 3 { r2 a''''4 r4 }
+ \alternative { { r2 d''''4 r4 } { r2 d''''4 r4 } { r2 d''''4 r4 } }
+ \repeat volta 3 { r2 a''''4 r4 }
+ \alternative { { r2 a''''4 r4 } { r2 a''''4 r4 } { r2 a''''4 r4 } }
+}
\ No newline at end of file
-\version "2.16.0"
+\version "2.17.6"
\header { texidoc = "If the 'whiteout property of a
grob is set to #t, that part of all objects in lower
\relative c' {
\time 3/4
- \override Staff.StaffSymbol #'layer = #4
- \once \override Tie #'layer = #2
+ \override Staff.StaffSymbol.layer = #4
+ \once \override Tie.layer = #2
b'2.~
- \once \override Staff.TimeSignature #'whiteout = ##t
- \once \override Staff.TimeSignature #'layer = #3
+ \once \override Staff.TimeSignature.whiteout = ##t
+ \once \override Staff.TimeSignature.layer = #3
\time 5/4
b4
}
markup. "
}
-\version "2.16.0"
+\version "2.17.6"
\paper
{
}
\relative c'' {
- \override TextScript #'layer = #'2
- \override TextScript #'extra-offset = #'(2 . 4)
+ \override TextScript.layer = #'2
+ \override TextScript.extra-offset = #'(2 . 4)
c4-\markup { \whiteout \pad-markup #0.5 foo } c
}
-\version "2.16.0"
+\version "2.17.6"
\header {
texidoc="
}
\new Staff \with {
- \override StaffSymbol #'staff-space = #0
+ \override StaffSymbol.staff-space = #0
} {
\relative c' {
- c1 \bar ":|"
+ c1 \bar ":|."
}
}
depth = ..
NAME = lilypond
-SUBDIRS = include
MODULE_LIBS=$(depth)/flower
MODULE_INCLUDES= $(depth)/flower/include
$(outdir)/lexer.cc: $(config_h)
$(outdir)/parser.cc: $(config_h)
+ifneq ($(LILYPOND_EXTERNAL_BINARY),)
+$(outdir)/lilypond.1: $(LILYPOND_EXTERNAL_BINARY) $(buildscript-dir)/help2man
+ $(buildscript-dir)/help2man $(LILYPOND_EXTERNAL_BINARY) > $@
+endif
+
$(outdir)/general-scheme.o: $(outdir)/version.hh
$(outdir)/lily-guile.o: $(outdir)/version.hh
$(outdir)/lily-version.o: $(outdir)/version.hh
TRANSLATOR_DECLARATIONS (Accidental_engraver);
void process_music ();
- void acknowledge_tie (Grob_info);
+ void acknowledge_end_tie (Grob_info);
void acknowledge_arpeggio (Grob_info);
void acknowledge_rhythmic_head (Grob_info);
void acknowledge_finger (Grob_info);
}
void
-Accidental_engraver::acknowledge_tie (Grob_info info)
+Accidental_engraver::acknowledge_end_tie (Grob_info info)
{
ties_.push_back (dynamic_cast<Spanner *> (info.grob ()));
}
ADD_ACKNOWLEDGER (Accidental_engraver, arpeggio);
ADD_ACKNOWLEDGER (Accidental_engraver, finger);
ADD_ACKNOWLEDGER (Accidental_engraver, rhythmic_head);
-ADD_ACKNOWLEDGER (Accidental_engraver, tie);
+ADD_END_ACKNOWLEDGER (Accidental_engraver, tie);
ADD_ACKNOWLEDGER (Accidental_engraver, note_column);
ADD_TRANSLATOR (Accidental_engraver,
#include "pointer-group-interface.hh"
#include "rhythmic-head.hh"
#include "skyline.hh"
+#include "skyline-pair.hh"
#include "stream-event.hh"
#include "warn.hh"
struct Accidental_placement_entry
{
- Skyline left_skyline_;
- Skyline right_skyline_;
- Interval vertical_extent_;
- vector<Box> extents_;
+ Skyline_pair horizontal_skylines_;
vector<Grob *> grobs_;
};
Real ape_priority (Accidental_placement_entry const *a)
{
- return a->vertical_extent_[UP];
+ // right is up because we're horizontal
+ return a->horizontal_skylines_.right ();
}
bool ape_less (Accidental_placement_entry *const &a,
offset -= a->extent (a, X_AXIS).length () + padding;
}
- vector<Box> boxes = Accidental_interface::accurate_boxes (a, common);
- ape->extents_.insert (ape->extents_.end (), boxes.begin (), boxes.end ());
-
- for (vsize j = boxes.size (); j--;)
- ape->vertical_extent_.unite (boxes[j][Y_AXIS]);
+ if (Skyline_pair *sky = Skyline_pair::unsmob (a->get_property ("horizontal-skylines")))
+ {
+ Skyline_pair copy (*sky);
+ copy.raise (a->relative_coordinate (common[X_AXIS], X_AXIS));
+ copy.shift (a->relative_coordinate (common[Y_AXIS], Y_AXIS));
+ ape->horizontal_skylines_.merge (copy);
+ }
last_octave = p->get_octave ();
last_alteration = p->get_alteration ();
}
- ape->left_skyline_ = Skyline (ape->extents_, 0, Y_AXIS, LEFT);
- ape->right_skyline_ = Skyline (ape->extents_, 0, Y_AXIS, RIGHT);
}
static vector<Grob *>
head_extents.push_back (Box (heads_and_stems[i]->extent (common[X_AXIS], X_AXIS),
heads_and_stems[i]->pure_height (common[Y_AXIS], 0, INT_MAX)));
- return Skyline (head_extents, 0, Y_AXIS, LEFT);
+ return Skyline (head_extents, Y_AXIS, LEFT);
}
/*
{
Accidental_placement_entry *ape = apes[i];
- Real offset = -ape->right_skyline_.distance (left_skyline);
+ Real offset = -ape->horizontal_skylines_[RIGHT].distance (left_skyline);
if (isinf (offset))
offset = last_offset;
else
offset -= padding;
- Skyline new_left_skyline = ape->left_skyline_;
+ Skyline new_left_skyline = ape->horizontal_skylines_[LEFT];
new_left_skyline.raise (offset);
new_left_skyline.merge (left_skyline);
left_skyline = new_left_skyline;
for (vsize j = ape->grobs_.size (); j--;)
ape->grobs_[j]->translate_axis (offset, X_AXIS);
- for (vsize j = ape->extents_.size (); j--;)
- width.unite (offset + ape->extents_[j][X_AXIS]);
+ for (LEFT_and_RIGHT (d))
+ {
+ Real mh = ape->horizontal_skylines_[d].max_height ();
+ if (!isinf (mh))
+ width.add_point (mh);
+ }
last_offset = offset;
}
#include "paper-column.hh"
#include "pitch.hh"
#include "stencil.hh"
+#include "skyline-pair.hh"
Stencil
parenthesize (Grob *me, Stencil m)
return get_extent (unsmob_grob (smob), X_AXIS);
}
+MAKE_SCHEME_CALLBACK (Accidental_interface, horizontal_skylines, 1);
+SCM
+Accidental_interface::horizontal_skylines (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ if (!me->is_live ())
+ return Skyline_pair ().smobbed_copy ();
+
+ /*
+ * Using the print function may trigger a suicide
+ * before line breaking. It is therefore `unpure' (c).
+ * We use the more basic get_stencil.
+ */
+ Stencil *my_stencil = unsmob_stencil (get_stencil (me));
+ Skyline_pair *sky =
+ Skyline_pair::unsmob
+ (Stencil::skylines_from_stencil
+ (my_stencil->smobbed_copy (), 0.0, Y_AXIS));
+
+ if (!sky)
+ return Skyline_pair ().smobbed_copy ();
+
+ SCM alist = me->get_property ("glyph-name-alist");
+ SCM alt = me->get_property ("alteration");
+ string glyph_name = robust_scm2string (ly_assoc_get (alt, alist, SCM_BOOL_F),
+ "");
+ if (glyph_name == "accidentals.flat"
+ || glyph_name == "accidentals.flatflat")
+ {
+ // a bit more padding for the right of the stem
+ // we raise the stem horizontally to a bit less than the average
+ // horizontal "height" of the entire glyph. This will bring flats
+ // closer to doubleflats, which looks better (MS opinion).
+ // this should work for all fonts where the flat is not
+ // completely bizarre
+ Real left = my_stencil->extent (X_AXIS)[LEFT];
+ Real right = my_stencil->extent (X_AXIS)[RIGHT] * 0.375;
+ Real down = my_stencil->extent (Y_AXIS)[DOWN];
+ Real up = my_stencil->extent (Y_AXIS)[UP];
+ vector<Box> boxes;
+ boxes.push_back (Box (Interval (left, right), Interval (down, up)));
+ Skyline merge_with_me (boxes, Y_AXIS, RIGHT);
+ (*sky)[RIGHT].merge (merge_with_me);
+ }
+ return sky->smobbed_copy ();
+}
+
MAKE_SCHEME_CALLBACK (Accidental_interface, pure_height, 3);
SCM
Accidental_interface::pure_height (SCM smob, SCM start_scm, SCM)
return ly_interval2scm (Interval ());
}
-vector<Box>
-Accidental_interface::accurate_boxes (Grob *me, Grob **common)
-{
- Box b;
- b[X_AXIS] = me->extent (me, X_AXIS);
- b[Y_AXIS] = me->extent (me, Y_AXIS);
-
- vector<Box> boxes;
-
- bool parens = to_boolean (me->get_property ("parenthesized"));
- if (!me->is_live ())
- return boxes;
-
- if (!to_boolean (me->get_property ("restore-first"))
- && !parens)
- {
- SCM alist = me->get_property ("glyph-name-alist");
- SCM alt = me->get_property ("alteration");
- string glyph_name = robust_scm2string (ly_assoc_get (alt, alist, SCM_BOOL_F),
- "");
-
- if (glyph_name == "accidentals.flat"
- || glyph_name == "accidentals.mirroredflat")
- {
- Box stem = b;
- Box bulb = b;
-
- /*
- we could make the stem thinner, but that places the flats
- really close.
- */
- Direction bulb_dir
- = glyph_name == "accidentals.mirroredflat" ? LEFT : RIGHT;
- stem[X_AXIS][bulb_dir] = stem[X_AXIS].center ();
-
- /*
- To prevent vertical alignment for 6ths
- */
- stem[Y_AXIS] *= 1.1;
- bulb[Y_AXIS][UP] *= .35;
-
- boxes.push_back (bulb);
- boxes.push_back (stem);
- }
- else if (glyph_name == "accidentals.natural")
- {
- Box lstem = b;
- Box rstem = b;
- Box belly = b;
-
- lstem[Y_AXIS] *= 1.1;
- rstem[Y_AXIS] *= 1.1;
-
- belly[Y_AXIS] *= 0.75;
- lstem[X_AXIS][RIGHT] *= .33;
- rstem[X_AXIS][LEFT] = rstem[X_AXIS].linear_combination (1.0 / 3.0);
- lstem[Y_AXIS][DOWN] = belly[Y_AXIS][DOWN];
- rstem[Y_AXIS][UP] = belly[Y_AXIS][UP];
- boxes.push_back (belly);
- boxes.push_back (lstem);
- boxes.push_back (rstem);
- }
- /*
- TODO: add support for, double flat.
- */
- }
-
- if (!boxes.size ())
- boxes.push_back (b);
-
- Offset o (me->relative_coordinate (common[X_AXIS], X_AXIS),
- me->relative_coordinate (common[Y_AXIS], Y_AXIS));
-
- for (vsize i = boxes.size (); i--;)
- boxes[i].translate (o);
-
- return boxes;
-}
-
MAKE_SCHEME_CALLBACK (Accidental_interface, print, 1);
SCM
Accidental_interface::print (SCM smob)
"avoid-slur "
"forced "
"glyph-name-alist "
+ "glyph-name "
"hide-tied-accidental-after-break "
"parenthesized "
"restore-first "
Box b;
b[a] = begin_of_line_extent;
b[other_axis (a)] = Interval (-infinity_f, -1);
- skylines.insert (b, 0, other_axis (a));
+ skylines.insert (b, other_axis (a));
}
}
Box b;
b[a] = extent;
b[other_axis (a)] = Interval (0, infinity_f);
- skylines.insert (b, 0, other_axis (a));
+ skylines.insert (b, other_axis (a));
}
}
if (!pure && a == Y_AXIS && dynamic_cast<Spanner *> (me) && !me->get_system ())
me->programming_error ("vertical alignment called before line-breaking");
+ // check the cache
+ if (pure)
+ {
+ SCM fv = ly_assoc_get (scm_cons (scm_from_int (start), scm_from_int (end)),
+ me->get_property ("minimum-translations-alist"),
+ SCM_EOL);
+ if (fv != SCM_EOL)
+ return ly_scm2floatvector (fv);
+ }
+
// If include_fixed_spacing is true, we look at things like system-system-spacing
// and alignment-distances, which only make sense for the toplevel VerticalAlignment.
// If we aren't toplevel, we're working on something like BassFigureAlignment
all_translates.push_back (w);
}
}
+
+ if (pure)
+ {
+ SCM mta = me->get_property ("minimum-translations-alist");
+ mta = scm_cons (scm_cons (scm_cons (scm_from_int (start), scm_from_int (end)),
+ ly_floatvector2scm (all_translates)),
+ mta);
+ me->set_property ("minimum-translations-alist", mta);
+ }
return all_translates;
}
all_grobs[j]->translate_axis (translates[j], a);
}
-MAKE_SCHEME_CALLBACK (Align_interface, full_score_pure_minimum_translations, 1);
-SCM
-Align_interface::full_score_pure_minimum_translations (SCM smob)
-{
- Grob *me = unsmob_grob (smob);
- extract_grob_set (me, "elements", all_grobs);
-
- vector<Real> pure_minimum_translations = Align_interface::get_pure_minimum_translations (me, all_grobs, Y_AXIS, 0, INT_MAX);
- return ly_floatvector2scm (pure_minimum_translations);
-}
-
Real
Align_interface::get_pure_child_y_translation (Grob *me, Grob *ch, int start, int end)
{
extract_grob_set (me, "elements", all_grobs);
- vector<Real> translates = start == 0 && end == INT_MAX
- ? ly_scm2floatvector (me->get_object ("full-score-pure-minimum-translations"))
- : get_pure_minimum_translations (me, all_grobs, Y_AXIS, start, end);
+ vector<Real> translates = get_pure_minimum_translations (me, all_grobs, Y_AXIS, start, end);
if (translates.size ())
{
/* properties */
"align-dir "
"axes "
- "full-score-pure-minimum-translations "
"elements "
+ "minimum-translations-alist "
"padding "
"positioning-done "
"stacking-dir "
vector<Stream_event *> articulation_events,
char const *articulation_name)
{
- vector<Stream_event *> string_events;
SCM articulations = SCM_EOL;
vsize j = 0;
#include "axis-group-interface.hh"
+#include <map>
+
#include "align-interface.hh"
#include "directional-element-interface.hh"
#include "grob-array.hh"
#include "hara-kiri-group-spanner.hh"
#include "international.hh"
+#include "interval-set.hh"
#include "lookup.hh"
#include "paper-column.hh"
#include "paper-score.hh"
static bool
pure_staff_priority_less (Grob *const &g1, Grob *const &g2);
+Real Axis_group_interface::default_outside_staff_padding_ = 0.46;
+
+Real
+Axis_group_interface::get_default_outside_staff_padding ()
+{
+ return default_outside_staff_padding_;
+}
+
void
Axis_group_interface::add_element (Grob *me, Grob *e)
{
continue;
bool outside_staff = scm_is_number (g->get_property ("outside-staff-priority"));
- Real padding = robust_scm2double (g->get_property ("outside-staff-padding"), 0.5);
+ Real padding = robust_scm2double (g->get_property ("outside-staff-padding"), get_default_outside_staff_padding ());
// When we encounter the first outside-staff grob, make a copy
// of the current heights to use as an estimate for the staff heights.
Axis_group_interface::calc_skylines (SCM smob)
{
Grob *me = unsmob_grob (smob);
- extract_grob_set (me, "elements", elts);
+ extract_grob_set (me, Grob_array::unsmob (me->get_object ("vertical-skyline-elements")) ? "vertical-skyline-elements" : "elements", elts);
Skyline_pair skylines = skyline_spacing (me, elts);
return skylines.smobbed_copy ();
}
static void
-add_boxes (Grob *me, Grob *x_common, Grob *y_common, vector<Box> *const boxes, Skyline_pair *skylines)
+add_interior_skylines (Grob *me, Grob *x_common, Grob *y_common, vector<Skyline_pair> *skylines)
{
- /* if a child has skylines, use them instead of the extent box */
- if (Skyline_pair *pair = Skyline_pair::unsmob (me->get_property ("vertical-skylines")))
- {
- Skyline_pair s = *pair;
- s.shift (me->relative_coordinate (x_common, X_AXIS));
- s.raise (me->relative_coordinate (y_common, Y_AXIS));
- skylines->merge (s);
- }
- else if (Grob_array *elements = unsmob_grob_array (me->get_object ("elements")))
+ if (Grob_array *elements = unsmob_grob_array (me->get_object ("elements")))
{
for (vsize i = 0; i < elements->size (); i++)
- add_boxes (elements->grob (i), x_common, y_common, boxes, skylines);
+ 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")))
{
- boxes->push_back (Box (me->extent (x_common, X_AXIS),
- me->extent (y_common, Y_AXIS)));
+ Skyline_pair *maybe_pair = Skyline_pair::unsmob (me->get_property ("vertical-skylines"));
+ if (!maybe_pair)
+ return;
+ if (maybe_pair->is_empty ())
+ return;
+ skylines->push_back (Skyline_pair (*maybe_pair));
+ skylines->back ().shift (me->relative_coordinate (x_common, X_AXIS));
+ skylines->back ().raise (me->relative_coordinate (y_common, Y_AXIS));
}
}
-/* We want to avoid situations like this:
- still more text
- more text
- text
- -------------------
- staff
- -------------------
-
- The point is that "still more text" should be positioned under
- "more text". In order to achieve this, we place the grobs in several
- passes. We keep track of the right-most horizontal position that has been
- affected by the current pass so far (actually we keep track of 2
- positions, one for above the staff, one for below).
-
- In each pass, we loop through the unplaced grobs from left to right.
- If the grob doesn't overlap the right-most affected position, we place it
- (and then update the right-most affected position to point to the right
- edge of the just-placed grob). Otherwise, we skip it until the next pass.
-*/
+// Raises the grob elt (whose skylines are given by h_skyline
+// and v_skyline) so that it doesn't intersect with staff_skyline,
+// or with anything in other_h_skylines and other_v_skylines.
+void
+avoid_outside_staff_collisions (Grob *elt,
+ Skyline_pair *v_skyline,
+ Real padding,
+ Real horizon_padding,
+ vector<Skyline_pair> const &other_v_skylines,
+ vector<Real> const &other_padding,
+ vector<Real> const &other_horizon_padding,
+ Direction const dir)
+{
+ assert (other_v_skylines.size () == other_padding.size ());
+ assert (other_v_skylines.size () == other_horizon_padding.size ());
+ vector<Interval> forbidden_intervals;
+ for (vsize j = 0; j < other_v_skylines.size (); j++)
+ {
+ Skyline_pair const &v_other = other_v_skylines[j];
+ Real pad = (padding + other_padding[j]);
+ Real horizon_pad = (horizon_padding + other_horizon_padding[j]);
+
+ // We need to push elt up by at least this much to be above v_other.
+ Real up = (*v_skyline)[DOWN].distance (v_other[UP], horizon_pad) + pad;
+ // We need to push elt down by at least this much to be below v_other.
+ Real down = (*v_skyline)[UP].distance (v_other[DOWN], horizon_pad) + pad;
+
+ forbidden_intervals.push_back (Interval (-down, up));
+ }
+
+ Interval_set allowed_shifts
+ = Interval_set::interval_union (forbidden_intervals).complement ();
+ Real move = allowed_shifts.nearest_point (0, dir);
+ v_skyline->raise (move);
+ elt->translate_axis (move, Y_AXIS);
+}
+
+SCM
+valid_outside_staff_placement_directive (Grob *me)
+{
+ SCM directive = me->get_property ("outside-staff-placement-directive");
+
+ if ((directive == ly_symbol2scm ("left-to-right-greedy"))
+ || (directive == ly_symbol2scm ("left-to-right-polite"))
+ || (directive == ly_symbol2scm ("right-to-left-greedy"))
+ || (directive == ly_symbol2scm ("right-to-left-polite")))
+ return directive;
+
+ me->warning (_f ("\"%s\" is not a valid outside-staff-placement-directive",
+ robust_symbol2string (directive, "").c_str ()));
+
+ return ly_symbol2scm ("left-to-right-polite");
+}
+
+// Shifts the grobs in elements to ensure that they (and any
+// connected riders) don't collide with the staff skylines
+// or anything in all_X_skylines. Afterwards, the skylines
+// of the grobs in elements will be added to all_v_skylines.
static void
-add_grobs_of_one_priority (Skyline_pair *const skylines,
+add_grobs_of_one_priority (Grob *me,
+ Drul_array<vector<Skyline_pair> > *all_v_skylines,
+ Drul_array<vector<Real> > *all_paddings,
+ Drul_array<vector<Real> > *all_horizon_paddings,
vector<Grob *> elements,
Grob *x_common,
- Grob *y_common)
+ Grob *y_common,
+ multimap<Grob *, Grob *> const &riders)
{
- vector<Box> boxes;
- Drul_array<Real> last_affected_position;
- reverse (elements);
+ SCM directive
+ = valid_outside_staff_placement_directive (me);
+
+ bool l2r = ((directive == ly_symbol2scm ("left-to-right-greedy"))
+ || (directive == ly_symbol2scm ("left-to-right-polite")));
+
+ bool polite = ((directive == ly_symbol2scm ("left-to-right-polite"))
+ || (directive == ly_symbol2scm ("right-to-left-polite")));
+
+ vector<Box> boxes;
+ vector<Skyline_pair> skylines_to_merge;
+
+ // We want to avoid situations like this:
+ // still more text
+ // more text
+ // text
+ // -------------------
+ // staff
+ // -------------------
+
+ // The point is that "still more text" should be positioned under
+ // "more text". In order to achieve this, we place the grobs in several
+ // passes. We keep track of the right-most horizontal position that has been
+ // affected by the current pass so far (actually we keep track of 2
+ // positions, one for above the staff, one for below).
+
+ // In each pass, we loop through the unplaced grobs from left to right.
+ // If the grob doesn't overlap the right-most affected position, we place it
+ // (and then update the right-most affected position to point to the right
+ // edge of the just-placed grob). Otherwise, we skip it until the next pass.
while (!elements.empty ())
{
- last_affected_position[UP] = -infinity_f;
- last_affected_position[DOWN] = -infinity_f;
- /* do one pass */
- for (vsize i = elements.size (); i--;)
+ Drul_array<Real> last_end (-infinity_f, -infinity_f);
+ vector<Grob *> skipped_elements;
+ for (vsize i = l2r ? 0 : elements.size ();
+ l2r ? i < elements.size () : i--;
+ l2r ? i++ : 0)
{
- Direction dir = get_grob_direction (elements[i]);
+ Grob *elt = elements[i];
+ Real padding
+ = robust_scm2double (elt->get_property ("outside-staff-padding"), 0.25);
+ Real horizon_padding
+ = robust_scm2double (elt->get_property ("outside-staff-horizontal-padding"), 0.0);
+ Interval x_extent = elt->extent (x_common, X_AXIS);
+ x_extent.widen (horizon_padding);
+
+ Direction dir = get_grob_direction (elt);
if (dir == CENTER)
{
warning (_ ("an outside-staff object should have a direction, defaulting to up"));
dir = UP;
}
- Box b (elements[i]->extent (x_common, X_AXIS),
- elements[i]->extent (y_common, Y_AXIS));
- SCM horizon_padding_scm = elements[i]->get_property ("outside-staff-horizontal-padding");
- Real horizon_padding = robust_scm2double (horizon_padding_scm, 0.0);
+ if (x_extent[LEFT] <= last_end[dir] && polite)
+ {
+ skipped_elements.push_back (elt);
+ continue;
+ }
+ last_end[dir] = x_extent[RIGHT];
- if (b[X_AXIS][LEFT] - 2 * horizon_padding < last_affected_position[dir])
+ Skyline_pair *v_orig = Skyline_pair::unsmob (elt->get_property ("vertical-skylines"));
+ if (v_orig->is_empty ())
continue;
- if (!b[X_AXIS].is_empty () && !b[Y_AXIS].is_empty ())
+ // Find the riders associated with this grob, and merge their
+ // skylines with elt's skyline.
+ typedef multimap<Grob *, Grob *>::const_iterator GrobMapIterator;
+ pair<GrobMapIterator, GrobMapIterator> range = riders.equal_range (elt);
+ vector<Skyline_pair> rider_v_skylines;
+ for (GrobMapIterator j = range.first; j != range.second; j++)
{
- boxes.clear ();
- boxes.push_back (b);
- Skyline other = Skyline (boxes, horizon_padding, X_AXIS, -dir);
- Real padding = robust_scm2double (elements[i]->get_property ("outside-staff-padding"), 0.5);
- Real dist = (*skylines)[dir].distance (other) + padding;
-
- if (dist > 0)
+ Grob *rider = j->second;
+ Skyline_pair *v_rider = Skyline_pair::unsmob (rider->get_property ("vertical-skylines"));
+ if (v_rider)
{
- b.translate (Offset (0, dir * dist));
- elements[i]->translate_axis (dir * dist, Y_AXIS);
+ Skyline_pair copy (*v_rider);
+ copy.shift (rider->relative_coordinate (x_common, X_AXIS));
+ copy.raise (rider->relative_coordinate (y_common, Y_AXIS));
+ rider_v_skylines.push_back (copy);
}
- skylines->insert (b, 0, X_AXIS);
- elements[i]->set_property ("outside-staff-priority", SCM_BOOL_F);
- last_affected_position[dir] = b[X_AXIS][RIGHT];
}
-
- /*
- Ugh: quadratic. --hwn
- */
- elements.erase (elements.begin () + i);
+ Skyline_pair v_skylines (*v_orig);
+ v_skylines.shift (elt->relative_coordinate (x_common, X_AXIS));
+ v_skylines.raise (elt->relative_coordinate (y_common, Y_AXIS));
+ v_skylines.merge (Skyline_pair (rider_v_skylines));
+
+ avoid_outside_staff_collisions (elt,
+ &v_skylines,
+ padding,
+ horizon_padding,
+ (*all_v_skylines)[dir],
+ (*all_paddings)[dir],
+ (*all_horizon_paddings)[dir],
+ dir);
+
+ elt->set_property ("outside-staff-priority", SCM_BOOL_F);
+ (*all_v_skylines)[dir].push_back (v_skylines);
+ (*all_paddings)[dir].push_back (padding);
+ (*all_horizon_paddings)[dir].push_back (horizon_padding);
}
+ swap (elements, skipped_elements);
+ skipped_elements.clear ();
}
}
-bool
-Axis_group_interface::has_outside_staff_parent (Grob *me)
+// If the Grob has a Y-ancestor with outside-staff-priority, return it.
+// Otherwise, return 0.
+Grob *
+Axis_group_interface::outside_staff_ancestor (Grob *me)
{
- return (me
- ? (scm_is_number (me->get_property ("outside-staff-priority"))
- || has_outside_staff_parent (me->get_parent (Y_AXIS)))
- : false);
+ Grob *parent = me->get_parent (Y_AXIS);
+ if (!parent)
+ return 0;
+
+ if (scm_is_number (parent->get_property ("outside-staff-priority")))
+ return parent;
+
+ return outside_staff_ancestor (parent);
}
-// TODO: it is tricky to correctly handle skyline placement of cross-staff grobs.
+// It is tricky to correctly handle skyline placement of cross-staff grobs.
// For example, cross-staff beams cannot be formatted until the distance between
// staves is known and therefore any grobs that depend on the beam cannot be placed
// until the skylines are known. On the other hand, the distance between staves should
Skyline_pair
Axis_group_interface::skyline_spacing (Grob *me, vector<Grob *> elements)
{
+ for (vsize i = 0; i < elements.size (); i++)
+ /*
+ As a sanity check, we make sure that no grob with an outside staff priority
+ has a Y-parent that also has an outside staff priority, which would result
+ in two movings.
+ */
+ if (scm_is_number (elements[i]->get_property ("outside-staff-priority"))
+ && outside_staff_ancestor (elements[i]))
+ {
+ elements[i]->warning ("Cannot set outside-staff-priority for element and elements' Y parent.");
+ elements[i]->set_property ("outside-staff-priority", SCM_BOOL_F);
+ }
+
/* For grobs with an outside-staff-priority, the sorting function might
call extent and cause suicide. This breaks the contract that is required
for the STL sort function. To avoid this, we make sure that any suicides
assert (y_common == me);
- vsize i = 0;
- vector<Box> boxes;
+ // A rider is a grob that is not outside-staff, but has an outside-staff
+ // ancestor. In that case, the rider gets moved along with its ancestor.
+ multimap<Grob *, Grob *> riders;
- Skyline_pair skylines;
+ vsize i = 0;
+ vector<Skyline_pair> inside_staff_skylines;
for (i = 0; i < elements.size ()
&& !scm_is_number (elements[i]->get_property ("outside-staff-priority")); i++)
- if (!(to_boolean (elements[i]->get_property ("cross-staff")) || has_outside_staff_parent (elements[i])))
- add_boxes (elements[i], x_common, y_common, &boxes, &skylines);
+ {
+ Grob *elt = elements[i];
+ Grob *ancestor = outside_staff_ancestor (elt);
+ if (!(to_boolean (elt->get_property ("cross-staff")) || ancestor))
+ add_interior_skylines (elt, x_common, y_common, &inside_staff_skylines);
+ if (ancestor)
+ riders.insert (pair<Grob *, Grob *> (ancestor, elt));
+ }
+
+ Skyline_pair skylines (inside_staff_skylines);
+
+ // These are the skylines of all outside-staff grobs
+ // that have already been processed. We keep them around in order to
+ // check them for collisions with the currently active outside-staff grob.
+ Drul_array<vector<Skyline_pair> > all_v_skylines;
+ Drul_array<vector<Real> > all_paddings;
+ Drul_array<vector<Real> > all_horizon_paddings;
+ for (UP_and_DOWN (d))
+ {
+ all_v_skylines[d].push_back (skylines);
+ all_paddings[d].push_back (0);
+ all_horizon_paddings[d].push_back (0);
+ }
- SCM padding_scm = me->get_property ("skyline-horizontal-padding");
- Real padding = robust_scm2double (padding_scm, 0.1);
- skylines.merge (Skyline_pair (boxes, padding, X_AXIS));
for (; i < elements.size (); i++)
{
if (to_boolean (elements[i]->get_property ("cross-staff")))
continue;
+ // Collect all the outside-staff grobs that have a particular priority.
SCM priority = elements[i]->get_property ("outside-staff-priority");
vector<Grob *> current_elts;
current_elts.push_back (elements[i]);
++i;
}
- add_grobs_of_one_priority (&skylines, current_elts, x_common, y_common);
+ add_grobs_of_one_priority (me,
+ &all_v_skylines,
+ &all_paddings,
+ &all_horizon_paddings,
+ current_elts,
+ x_common,
+ y_common,
+ riders);
}
+
+ // Now everything in all_v_skylines has been shifted appropriately; merge
+ // them all into skylines to get the complete outline.
+ Skyline_pair other_skylines (all_v_skylines[UP]);
+ other_skylines.merge (Skyline_pair (all_v_skylines[DOWN]));
+ skylines.merge (other_skylines);
+
+ // We began by shifting my skyline to be relative to the common refpoint; now
+ // shift it back.
skylines.shift (-me->relative_coordinate (x_common, X_AXIS));
+
return skylines;
}
"nonstaff-nonstaff-spacing "
"nonstaff-relatedstaff-spacing "
"nonstaff-unrelatedstaff-spacing "
+ "outside-staff-placement-directive "
"pure-relevant-grobs "
"pure-relevant-items "
"pure-relevant-spanners "
"staff-grouper "
"staff-staff-spacing "
"system-Y-offset "
- "vertical-skylines "
+ "vertical-skyline-elements "
"X-common "
"Y-common "
);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+ Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
DECLARE_ACKNOWLEDGER (stem);
DECLARE_ACKNOWLEDGER (accidental);
DECLARE_ACKNOWLEDGER (clef);
+ DECLARE_ACKNOWLEDGER (octavate_eight);
DECLARE_ACKNOWLEDGER (key_signature);
DECLARE_ACKNOWLEDGER (time_signature);
DECLARE_ACKNOWLEDGER (beam);
covered_grobs_.push_back (i);
}
+void
+Beam_collision_engraver::acknowledge_octavate_eight (Grob_info i)
+{
+ covered_grobs_.push_back (i);
+}
+
void
Beam_collision_engraver::acknowledge_time_signature (Grob_info i)
{
ADD_ACKNOWLEDGER (Beam_collision_engraver, clef);
ADD_ACKNOWLEDGER (Beam_collision_engraver, key_signature);
ADD_ACKNOWLEDGER (Beam_collision_engraver, time_signature);
+ADD_ACKNOWLEDGER (Beam_collision_engraver, octavate_eight);
ADD_ACKNOWLEDGER (Beam_collision_engraver, flag);
ADD_ACKNOWLEDGER (Beam_collision_engraver, beam);
#include "lookup.hh"
#include "main.hh"
#include "misc.hh"
+#include "note-column.hh"
#include "note-head.hh"
#include "output-def.hh"
#include "pointer-group-interface.hh"
return m;
}
+//------ for whole note chord tremolos
+
+bool
+Beam::whole_note_close_chord_tremolo (Grob *me)
+{
+ if (!scm_is_integer (me->get_property ("gap-count")))
+ return false;
+
+ extract_grob_set (me, "stems", stems);
+ for (vsize i = 0; i < stems.size (); i++)
+ if (Stem::duration_log (stems[i]))
+ return false;
+
+ Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
+ if (staff)
+ {
+ Grob *outside_stems[2] = {Stem::extremal_heads (stems[0])[DOWN],
+ Stem::extremal_heads (stems.back ())[DOWN]};
+
+ Interval lines = Staff_symbol::line_span (staff);
+ for (int i = 0; i < 2; i++)
+ {
+ Real my_pos = Staff_symbol_referencer::get_position (outside_stems[i]);
+ if (my_pos > lines[UP] + 1)
+ return false;
+ else if (my_pos < lines[DOWN] - 1)
+ return false;
+ }
+ }
+
+ return (Staff_symbol_referencer::get_position (Stem::extremal_heads (stems.back ())[DOWN])
+ - Staff_symbol_referencer::get_position (Stem::extremal_heads (stems[0])[DOWN]))
+ < 2;
+}
+
+MAKE_SCHEME_CALLBACK (Beam, calc_beam_gap, 1);
+SCM
+Beam::calc_beam_gap (SCM smob)
+{
+ Spanner *me = unsmob_spanner (smob);
+ SCM default_value = scm_cons (scm_from_double (0.8), scm_from_double (0.8));
+ if (!whole_note_close_chord_tremolo (me))
+ return default_value;
+
+ Interval left = Note_column::accidental_width
+ (me->get_bound (RIGHT)->get_parent (X_AXIS));
+
+ if (left.length () > 0.4)
+ return scm_cons (scm_from_double (0.8), scm_from_double (1.3 + left.length ()));
+ else
+ return default_value;
+}
+
+MAKE_SCHEME_CALLBACK (Beam, calc_springs_and_rods, 1);
+SCM
+Beam::calc_springs_and_rods (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+
+ if (!whole_note_close_chord_tremolo (me))
+ return SCM_BOOL_F;
+
+ return scm_call_1 (Spanner::set_spacing_rods_proc, smob);
+}
+
+MAKE_SCHEME_CALLBACK (Beam, calc_minimum_length, 1);
+SCM
+Beam::calc_minimum_length (SCM smob)
+{
+ Spanner *me = unsmob_spanner (smob);
+ SCM default_value = scm_from_double (0.0);
+
+ if (!whole_note_close_chord_tremolo (me))
+ return SCM_BOOL_F;
+
+ Interval left = Note_column::accidental_width
+ (me->get_bound (RIGHT)->get_parent (X_AXIS));
+
+ if (left.length () > 0.4)
+ return scm_from_double (left.length () + 4.0);
+ else
+ return default_value;
+}
+
+//------ and everything else
+
MAKE_SCHEME_CALLBACK (Beam, calc_normal_stems, 1);
SCM
Beam::calc_normal_stems (SCM smob)
dir = to_dir (stem->get_property_data ("direction"));
else
dir = to_dir (stem->get_property ("default-direction"));
+
+ extract_grob_set (stem, "note-heads", heads);
+ /* default position of Kievan heads with beams is down
+ placing this here avoids warnings downstream */
+ if (heads.size())
+ {
+ if (heads[0]->get_property ("style") == ly_symbol2scm ("kievan"))
+ {
+ if (dir == CENTER)
+ dir = DOWN;
+ }
+ }
}
}
commonx = me->get_bound (d)->common_refpoint (commonx, X_AXIS);
int gap_count = robust_scm2int (me->get_property ("gap-count"), 0);
- Real gap_length = robust_scm2double (me->get_property ("gap"), 0.0);
+ Interval gap_lengths = robust_scm2interval (me->get_property ("beam-gap"), Interval (0.0, 0.0));
Position_stem_segments_map stem_segments;
Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
current.horizontal_[event_dir] += event_dir * seg.width_ / 2;
if (seg.gapped_)
{
- current.horizontal_[event_dir] -= event_dir * gap_length;
+ current.horizontal_[event_dir] -= event_dir * gap_lengths[event_dir];
if (Stem::is_invisible (seg.stem_))
{
for (vsize k = 0; k < heads.size (); k++)
current.horizontal_[event_dir]
= event_dir * min (event_dir * current.horizontal_[event_dir],
- - gap_length / 2
+ - gap_lengths[event_dir] / 2
+ event_dir
* heads[k]->extent (commonx,
X_AXIS)[-event_dir]);
}
SCM segments_scm = SCM_EOL;
- SCM *tail = &segments_scm;
- for (vsize i = 0; i < segments.size (); i++)
+ for (vsize i = segments.size (); i--;)
{
- *tail = scm_cons (scm_list_2 (scm_cons (ly_symbol2scm ("vertical-count"),
- scm_from_int (segments[i].vertical_count_)),
- scm_cons (ly_symbol2scm ("horizontal"),
- ly_interval2scm (segments[i].horizontal_))),
- SCM_EOL);
- tail = SCM_CDRLOC (*tail);
+ segments_scm = scm_cons (scm_list_2 (scm_cons (ly_symbol2scm ("vertical-count"),
+ scm_from_int (segments[i].vertical_count_)),
+ scm_cons (ly_symbol2scm ("horizontal"),
+ ly_interval2scm (segments[i].horizontal_))),
+ segments_scm);
}
return segments_scm;
if (!scm_is_number (scm))
return;
- Interval_set gaps;
-
- gaps.set_full ();
+ vector<Interval> forbidden_intervals;
extract_grob_set (me, "normal-stems", stems);
}
head_extents_array.push_back (head_extents);
- gaps.remove_interval (head_extents);
+ forbidden_intervals.push_back (head_extents);
}
Interval max_gap;
Real max_gap_len = 0.0;
- for (vsize i = gaps.allowed_regions_.size () - 1; i != VPOS; i--)
+ vector<Interval> allowed_regions
+ = Interval_set::interval_union (forbidden_intervals).complement ().intervals ();
+ for (vsize i = allowed_regions.size () - 1; i != VPOS; i--)
{
- Interval gap = gaps.allowed_regions_[i];
+ Interval gap = allowed_regions[i];
/*
the outer gaps are not knees.
rest_max_pos[UP]
) * ss / 2.0
- previous;
+
+ // So that ceil below kicks in for rests that would otherwise brush
+ // up against a beam quanted to a ledger line, add a bit of space
+ // between the beam and the rest.
+ shift += (0.01 * beamdir);
+
/* Always move by a whole number of staff spaces */
shift = ceil (fabs (shift / ss)) * ss * sign (shift);
"auto-knee-gap "
"beamed-stem-shorten "
"beaming "
+ "beam-gap "
"beam-segments "
"beam-thickness "
"break-overshoot "
"damping "
"details "
"direction "
- "gap "
"gap-count "
"grow-direction "
"inspect-quants "
return o;
}
+Real
+Bezier::slope_at_point (Real t) const
+{
+ Offset second_order[3];
+ Offset third_order[2];
+
+ for (vsize i = 0; i < 3; i++)
+ second_order[i] = ((control_[i + 1] - control_[i]) * t) + control_[i];
+
+ for (vsize i = 0; i < 2; i++)
+ third_order[i] = ((second_order[i + 1] - second_order[i]) * t) + second_order[i];
+
+ if (third_order[1][X_AXIS] - third_order[0][X_AXIS] == 0)
+ return infinity_f;
+
+ return (third_order[1][Y_AXIS] - third_order[0][Y_AXIS]) / (third_order[1][X_AXIS] - third_order[0][X_AXIS]);
+}
+
/*
Cache binom (3, j) t^j (1-t)^{3-j}
*/
interval_a_[i].unite (b[i]);
}
+Real
+Box::area () const
+{
+ return interval_a_[X_AXIS].length ()
+ * interval_a_[Y_AXIS].length ();
+}
+
Box::Box ()
{
}
Real blotdiameter = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
/*
- * Draw a vertical line that is vertically centered in the staff
- * (just like a bar). The height of this line should be a little
- * more than half the size of the staff, such that the endings of
- * the line are in the middle of a staff space.
- */
- Interval ydim = Staff_symbol_referencer::staff_span (me);
- ydim.widen (-0.25 * ydim.delta ());
- for (UP_and_DOWN (i))
+ Draw a vertical line that is roughly centered vertically in
+ the staff (just like a bar) with the following requirements:
+ 1. length should be at least half the size of the staff
+ 2. both ends should be in the middle of a staff space.
+
+ These two requirements contradict if the first or last space is
+ larger than half of the whole staff (e.g. the staff consists of
+ two lines only); in such cases the first prescription wins.
+ */
+ Interval ydim (0.0, 0.0);
+ if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me))
{
- int const int_dim = (int) ydim[i];
- if (int_dim == ydim[i]
- && Staff_symbol_referencer::on_staff_line (me, int_dim))
- ydim[i] += i;
+ std::vector<Real> line_pos = Staff_symbol::line_positions (staff);
+ if (!line_pos.empty ())
+ {
+ std::sort (line_pos.begin (), line_pos.end ());
+ ydim[DOWN] = line_pos.front ();
+ ydim[UP] = line_pos.back ();
+ if (Real const height = ydim.length ())
+ {
+ ydim.widen (-0.25 * height);
+
+ /*
+ ydim has now the required height; to satisfy req. 2
+ find the staff spaces containing current endpoints.
+
+ standard algorithms are suitable to find the upper
+ line of these spaces; we must choose between
+ upper_bound and lower_bound considering that if
+ there's a line exactly at quarter of the staff (the
+ lower end) then we need the space below it, while if
+ there's a line exactly at three quarters of the staff
+ (upper end) then we need the space above it.
+
+ if the middle of the space found is not low/high
+ enough, take the next space (if there are no more
+ spaces, ydim won't be enlarged further).
+ */
+ std::vector<Real>::const_iterator it
+ = std::lower_bound (line_pos.begin (), line_pos.end (),
+ ydim[DOWN]);
+ assert (line_pos.begin () < it);
+ double val = (it[-1] + it[0]) / 2;
+ if (ydim[DOWN] < val && line_pos.begin () < it + 1)
+ val = (it[-2] + it[-1]) / 2;
+ ydim.add_point (val);
+
+ it = std::upper_bound (line_pos.begin (), line_pos.end (),
+ ydim[UP]);
+ assert (it < line_pos.end ());
+ val = (it[-1] + it[0]) / 2;
+ if (val < ydim[UP] && it + 1 < line_pos.end ())
+ val = (it[0] + it[1]) / 2;
+ ydim.add_point (val);
+ }
+ }
}
- ydim *= 1.0 / Staff_symbol_referencer::staff_space (me);
+ ydim *= Staff_symbol_referencer::staff_space (me) / 2;
Interval xdim (0, thickness);
Box b (xdim, ydim);
void
Chord_name_engraver::process_music ()
{
+ if (!rest_event_ && !notes_.size ())
+ return;
+
+ chord_name_ = make_item ("ChordName",
+ rest_event_ ? rest_event_->self_scm () : notes_[0]->self_scm ());
+
+ SCM maybe_markup = chord_name_->get_property_data ("text");
+
+ bool make_markup = !(Text_interface::is_markup (maybe_markup)
+ || ly_is_procedure (maybe_markup));
+
SCM markup;
- SCM bass = SCM_EOL;
- SCM inversion = SCM_EOL;
- SCM pitches = SCM_EOL;
- if (rest_event_)
+ if (rest_event_ && !make_markup) { }
+ else if (rest_event_)
{
SCM no_chord_markup = get_property ("noChordSymbol");
if (!Text_interface::is_markup (no_chord_markup))
}
else
{
- if (!notes_.size ())
- return;
+ SCM bass = SCM_EOL;
+ SCM inversion = SCM_EOL;
+ SCM pitches = SCM_EOL;
Stream_event *inversion_event = 0;
for (vsize i = 0; i < notes_.size (); i++)
pitches = scm_sort_list (pitches, Pitch::less_p_proc);
SCM name_proc = get_property ("chordNameFunction");
- markup = scm_call_4 (name_proc, pitches, bass, inversion,
- context ()->self_scm ());
+ if (make_markup)
+ markup = scm_call_4 (name_proc, pitches, bass, inversion,
+ context ()->self_scm ());
}
/*
Ugh.
*/
- SCM chord_as_scm = scm_cons (pitches, scm_cons (bass, inversion));
-
- chord_name_ = make_item ("ChordName",
- rest_event_ ? rest_event_->self_scm () : notes_[0]->self_scm ());
- chord_name_->set_property ("text", markup);
+ if (make_markup)
+ chord_name_->set_property ("text", markup);
+ else if (Text_interface::is_markup (maybe_markup))
+ markup = maybe_markup;
SCM chord_changes = get_property ("chordChanges");
if (to_boolean (chord_changes) && scm_is_pair (last_chord_)
- && ly_is_equal (chord_as_scm, last_chord_))
+ && ly_is_equal (markup, last_chord_))
chord_name_->set_property ("begin-of-line-visible", SCM_BOOL_T);
- last_chord_ = chord_as_scm;
+ last_chord_ = markup;
}
IMPLEMENT_TRANSLATOR_LISTENER (Chord_name_engraver, note);
SCM txt = scm_number_to_string (scm_from_int (abs_oct),
scm_from_int (10));
- g->set_property ("text",
- scm_list_n (ly_lily_module_constant ("vcenter-markup"),
- txt, SCM_UNDEFINED));
+ SCM style = get_property ("clefOctavationStyle");
+
+ SCM formatter = get_property ("clefOctavationFormatter");
+ if (ly_is_procedure (formatter))
+ g->set_property ("text", scm_call_2 (formatter, txt, style));
+
Side_position_interface::add_support (g, clef_);
g->set_parent (clef_, Y_AXIS);
/* read */
"clefGlyph "
"clefOctavation "
+ "clefOctavationStyle "
"clefPosition "
"explicitClefVisibility "
"forceClef ",
Stencil out = fm->find_by_name (glyph);
if (out.is_empty ())
me->warning (_f ("clef `%s' not found", glyph.c_str ()));
+
return out.smobbed_copy ();
}
* occurs within the broken ligatures any more.
*/
void
-Coherent_ligature_engraver::collect_accidentals (Spanner *, vector<Grob_info>)
+Coherent_ligature_engraver::collect_accidentals (Spanner *,
+ vector<Grob_info> const &)
{
/* TODO */
}
void
-compute_delta_pitches (vector<Grob_info> primitives)
+compute_delta_pitches (vector<Grob_info> const &primitives)
{
int prev_pitch = 0;
int delta_pitch = 0;
void
Coherent_ligature_engraver::typeset_ligature (Spanner *ligature,
- vector<Grob_info> primitives)
+ vector<Grob_info> const &primitives)
{
// compute some commonly needed context info stored as grob
// properties
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+ Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
}
}
/* if we get to here, just put everything on one line */
- warning (_ ("cannot find line breaking that satisfies constraints"));
- ret.push_back (space_line (0, end_brk));
+ if (sys_count > 0) {
+ warning (_ ("cannot find line breaking that satisfies constraints"));
+ ret.push_back (space_line (0, end_brk));
+ }
return ret;
}
}
/* if we get to here, just put everything on one line */
- Line_details details;
- fill_line_details (&details, 0, end_brk);
- ret.push_back (details);
+ if (sys_count > 0) {
+ Line_details details;
+ fill_line_details (&details, 0, end_brk);
+ ret.push_back (details);
+ }
return ret;
}
scm_puts ("#<Context_def ", port);
scm_display (me->context_name_, port);
+ scm_puts (" ", port);
+ string loc = me->origin ()->location_string ();
+ scm_puts (loc.c_str (), port);
scm_puts (">", port);
return 1;
}
SCM entry = scm_car (s);
SCM type = scm_car (entry);
entry = scm_cdr (entry);
- if (!scm_is_pair (entry))
- continue;
- SCM context_prop = scm_car (entry);
- if (scm_is_pair (context_prop))
- {
- if (tg->is_alias (scm_car (context_prop)))
- context_prop = scm_cdr (context_prop);
- else
- continue;
- }
if (type == ly_symbol2scm ("push"))
{
+ SCM context_prop = scm_car (entry);
SCM val = scm_cadr (entry);
SCM grob_prop_path = scm_cddr (entry);
sloppy_general_pushpop_property (tg, context_prop, grob_prop_path, val);
}
else if (type == ly_symbol2scm ("pop"))
{
+ SCM context_prop = scm_car (entry);
SCM val = SCM_UNDEFINED;
SCM grob_prop_path = scm_cdr (entry);
sloppy_general_pushpop_property (tg, context_prop, grob_prop_path, val);
}
else if (type == ly_symbol2scm ("assign"))
- tg->set_property (context_prop, scm_cadr (entry));
+ tg->set_property (scm_car (entry), scm_cadr (entry));
else if (type == ly_symbol2scm ("apply"))
- scm_apply_1 (context_prop, tg->self_scm (), scm_cdr (entry));
+ scm_apply_1 (scm_car (entry), tg->self_scm (), scm_cdr (entry));
}
}
SCM txt = scm_number_to_string (scm_from_int (abs_oct),
scm_from_int (10));
- g->set_property ("text",
- scm_list_n (ly_lily_module_constant ("vcenter-markup"),
- txt, SCM_UNDEFINED));
+ SCM style = get_property ("cueClefOctavationStyle");
+
+ SCM formatter = get_property ("cueClefOctavationFormatter");
+ if (ly_is_procedure (formatter))
+ g->set_property ("text", scm_call_2 (formatter, txt, style));
+
Side_position_interface::add_support (g, clef_);
g->set_parent (clef_, Y_AXIS);
/* read */
"cueClefGlyph "
"cueClefOctavation "
+ "cueClefOctavationStyle "
"cueClefPosition "
"explicitCueClefVisibility "
"middleCCuePosition "
cfg.remove_collision (p);
cfg[p] = dp;
- if (Staff_symbol_referencer::on_line (dp.dot_, p))
+ if (Staff_symbol_referencer::on_line (dp.dot_, p) &&
+ dp.dot_->get_property ("style") != ly_symbol2scm ("kievan"))
cfg.remove_collision (p);
}
Dot_formatting_problem::Dot_formatting_problem (vector<Box> const &boxes,
Interval base_x)
- : head_skyline_ (boxes, 0.2, Y_AXIS, RIGHT)
+ : head_skyline_ (boxes, Y_AXIS, RIGHT)
{
best_ = 0;
head_skyline_.set_minimum_height (base_x[RIGHT]);
DECLARE_ACKNOWLEDGER (note_column);
DECLARE_ACKNOWLEDGER (slur);
DECLARE_END_ACKNOWLEDGER (slur);
- DECLARE_ACKNOWLEDGER (tie);
+ DECLARE_END_ACKNOWLEDGER (tie);
DECLARE_ACKNOWLEDGER (bass_figure_alignment);
DECLARE_END_ACKNOWLEDGER (bass_figure_alignment);
}
void
-Figured_bass_position_engraver::acknowledge_tie (Grob_info info)
+Figured_bass_position_engraver::acknowledge_end_tie (Grob_info info)
{
support_.push_back (info.grob ());
}
ADD_ACKNOWLEDGER (Figured_bass_position_engraver, slur);
ADD_END_ACKNOWLEDGER (Figured_bass_position_engraver, slur);
-ADD_ACKNOWLEDGER (Figured_bass_position_engraver, tie);
+ADD_END_ACKNOWLEDGER (Figured_bass_position_engraver, tie);
ADD_ACKNOWLEDGER (Figured_bass_position_engraver, bass_figure_alignment);
ADD_END_ACKNOWLEDGER (Figured_bass_position_engraver, bass_figure_alignment);
--- /dev/null
+/*
+ This file is part of LilyPond, the GNU music typesetter.
+
+ Copyright (C) 2012 Mike Solomon <mike@mikesolomon.org>
+
+ LilyPond is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ LilyPond is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "engraver.hh"
+#include "side-position-interface.hh"
+#include "pointer-group-interface.hh"
+#include "fingering-column.hh"
+#include "item.hh"
+
+#include "translator.icc"
+
+/**
+ Find potentially colliding scripts, and put them in a
+ Fingering_column, that will fix the collisions. */
+class Fingering_column_engraver : public Engraver
+{
+ Drul_array<Grob *> fingering_columns_;
+ Drul_array<vector<Grob *> > scripts_;
+ vector<Grob *> possibles_;
+
+public:
+ TRANSLATOR_DECLARATIONS (Fingering_column_engraver);
+protected:
+ DECLARE_ACKNOWLEDGER (finger);
+ void process_acknowledged ();
+ void stop_translation_timestep ();
+};
+
+Fingering_column_engraver::Fingering_column_engraver ()
+{
+ for (LEFT_and_RIGHT (d))
+ fingering_columns_[d] = 0;
+}
+
+void
+Fingering_column_engraver::stop_translation_timestep ()
+{
+ for (vsize i = 0; i < possibles_.size (); i++)
+ if (!Item::is_non_musical (possibles_[i]))
+ {
+ if (Side_position_interface::get_axis (possibles_[i]) == X_AXIS)
+ {
+ Direction d = robust_scm2dir (possibles_[i]->get_property ("direction"), CENTER);
+ if (d)
+ scripts_[d].push_back (possibles_[i]);
+ else
+ possibles_[i]->warning ("Cannot add a fingering without a direction.");
+ }
+ }
+
+ for (LEFT_and_RIGHT (d))
+ {
+ if (scripts_[d].size () < 2 && fingering_columns_[d])
+ {
+ fingering_columns_[d]->suicide ();
+ fingering_columns_[d] = 0;
+ }
+ if (fingering_columns_[d])
+ {
+ for (vsize i = 0; i < scripts_[d].size (); i++)
+ Fingering_column::add_fingering (fingering_columns_[d], scripts_[d][i]);
+
+ }
+ scripts_[d].clear ();
+ fingering_columns_[d] = 0;
+ }
+ possibles_.clear ();
+}
+
+void
+Fingering_column_engraver::acknowledge_finger (Grob_info inf)
+{
+ Item *thing = dynamic_cast<Item *> (inf.grob ());
+ if (thing)
+ possibles_.push_back (thing);
+}
+
+void
+Fingering_column_engraver::process_acknowledged ()
+{
+ for (LEFT_and_RIGHT (d))
+ {
+ if (possibles_.size () > 1 && !fingering_columns_[d])
+ fingering_columns_[d] = make_item ("FingeringColumn", SCM_EOL);
+ }
+}
+
+ADD_ACKNOWLEDGER (Fingering_column_engraver, finger);
+ADD_TRANSLATOR (Fingering_column_engraver,
+ /* doc */
+ "Find potentially colliding scripts and put them into a"
+ " @code{FingeringColumn} object; that will fix the collisions.",
+
+ /* create */
+ "FingeringColumn ",
+
+ /* read */
+ "",
+
+ /* write */
+ ""
+ );
--- /dev/null
+/*
+ This file is part of LilyPond, the GNU music typesetter.
+
+ Copyright (C) 2012 Mike Solomon <mike@mikesolomon.org>
+
+ LilyPond is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ LilyPond is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "grob.hh"
+#include "fingering-column.hh"
+#include "pointer-group-interface.hh"
+#include "staff-symbol-referencer.hh"
+#include "item.hh"
+#include "paper-column.hh"
+
+#include <map>
+
+MAKE_SCHEME_CALLBACK (Fingering_column, calc_positioning_done, 1);
+SCM
+Fingering_column::calc_positioning_done (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ Real padding = robust_scm2double (me->get_property ("padding"), 0.0);
+ if (!me->is_live ())
+ return SCM_BOOL_T;
+
+ map<Grob *, bool> shifted;
+
+ Real ss = Staff_symbol_referencer::staff_space (me);
+
+ me->set_property ("positioning-done", SCM_BOOL_T);
+
+ extract_grob_set (me, "fingerings", const_fingerings);
+
+ if (const_fingerings.size () < 2)
+ {
+ me->programming_error ("This FingeringColumn should have never been created.");
+ return SCM_BOOL_T;
+ }
+
+ // order the fingerings from bottom to top
+ vector<Grob *> fingerings;
+ for (vsize i = 0; i < const_fingerings.size (); i++)
+ fingerings.push_back (const_fingerings[i]);
+
+ vector_sort (fingerings, pure_position_less);
+
+ Grob *common[2] = {common_refpoint_of_array (fingerings, me, X_AXIS),
+ common_refpoint_of_array (fingerings, me, Y_AXIS)};
+
+ for (vsize i = 0; i < fingerings.size (); i++)
+ fingerings[i]->translate_axis (-fingerings[i]->extent (common[Y_AXIS], Y_AXIS).length () / 2, Y_AXIS);
+
+ for (vsize i = min (fingerings.size () - 1, fingerings.size () / 2 + 1); i >= 1; i--)
+ for (vsize j = i; j--;)
+ {
+ Interval ex_i = fingerings[i]->extent (common[X_AXIS], X_AXIS);
+ Interval ex_j = fingerings[j]->extent (common[X_AXIS], X_AXIS);
+ Interval ey_i = fingerings[i]->extent (common[Y_AXIS], Y_AXIS);
+ Interval ey_j = fingerings[j]->extent (common[Y_AXIS], Y_AXIS);
+ Real tval = min (0.0, (ey_i[DOWN] - ey_j[UP] - padding) / 2);
+ if (tval != 0.0 && !intersection (ex_i, ex_j).is_empty ())
+ {
+ if (shifted[fingerings[i]] || shifted[fingerings[j]])
+ fingerings[j]->translate_axis (tval * 2, Y_AXIS);
+ else
+ {
+ fingerings[i]->translate_axis (-tval, Y_AXIS);
+ fingerings[j]->translate_axis (tval, Y_AXIS);
+ }
+ shifted[fingerings[i]] = true;
+ shifted[fingerings[j]] = true;
+ }
+ }
+
+ for (vsize i = fingerings.size () / 2 - 1; i < fingerings.size () - 1; i++)
+ for (vsize j = i + 1; j < fingerings.size (); j++)
+ {
+ Interval ex_i = fingerings[i]->extent (common[X_AXIS], X_AXIS);
+ Interval ex_j = fingerings[j]->extent (common[X_AXIS], X_AXIS);
+ Interval ey_i = fingerings[i]->extent (common[Y_AXIS], Y_AXIS);
+ Interval ey_j = fingerings[j]->extent (common[Y_AXIS], Y_AXIS);
+ Real tval = max (0.0, (ey_i[UP] - ey_j[DOWN] + padding) / 2);
+ if (tval != 0.0 && !intersection (ex_i, ex_j).is_empty ())
+ {
+ if (shifted[fingerings[i]] || shifted[fingerings[j]])
+ fingerings[j]->translate_axis (tval * 2, Y_AXIS);
+ else
+ {
+ fingerings[i]->translate_axis (-tval, Y_AXIS);
+ fingerings[j]->translate_axis (tval, Y_AXIS);
+ }
+ shifted[fingerings[i]] = true;
+ shifted[fingerings[j]] = true;
+ }
+ }
+
+
+ return SCM_BOOL_T;
+}
+
+void
+Fingering_column::add_fingering (Grob *fc, Grob *f)
+{
+ Pointer_group_interface::add_grob (fc, ly_symbol2scm ("fingerings"), f);
+ f->set_parent (fc, X_AXIS);
+ f->set_property ("Y-offset", Grob::x_parent_positioning_proc);
+}
+
+ADD_INTERFACE (Fingering_column,
+ "Makes sure that fingerings placed laterally"
+ " do not collide.",
+
+ /* properties */
+ "padding "
+ "positioning-done "
+ );
{
public:
DECLARE_SCHEME_CALLBACK (print, (SCM));
+ DECLARE_SCHEME_CALLBACK (glyph_name, (SCM));
DECLARE_SCHEME_CALLBACK (width, (SCM));
DECLARE_SCHEME_CALLBACK (calc_y_offset, (SCM));
DECLARE_SCHEME_CALLBACK (pure_calc_y_offset, (SCM, SCM, SCM));
return ly_interval2scm (sten->extent (X_AXIS) - stem->extent (stem, X_AXIS)[RIGHT]);
}
-MAKE_SCHEME_CALLBACK (Flag, print, 1);
+
+MAKE_SCHEME_CALLBACK (Flag, glyph_name, 1);
SCM
-Flag::print (SCM smob)
+Flag::glyph_name (SCM smob)
{
Grob *me = unsmob_grob (smob);
Grob *stem = me->get_parent (X_AXIS);
if (scm_is_symbol (flag_style_scm))
flag_style = ly_symbol2string (flag_style_scm);
- if (flag_style == "no-flag")
- return Stencil ().smobbed_copy ();
-
bool adjust = true;
string staffline_offs;
char dir = (d == UP) ? 'u' : 'd';
string font_char = flag_style
+ to_string (dir) + staffline_offs + to_string (log);
+ return ly_string2scm ("flags." + font_char);
+}
+
+MAKE_SCHEME_CALLBACK (Flag, print, 1);
+SCM
+Flag::print (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ Grob *stem = me->get_parent (X_AXIS);
+
+ Direction d = get_grob_direction (stem);
+ string flag_style;
+
+ SCM flag_style_scm = me->get_property ("style");
+ if (scm_is_symbol (flag_style_scm))
+ flag_style = ly_symbol2string (flag_style_scm);
+
+ if (flag_style == "no-flag")
+ return Stencil ().smobbed_copy ();
+
+ char dir = (d == UP) ? 'u' : 'd';
Font_metric *fm = Font_interface::get_default_font (me);
- Stencil flag = fm->find_by_name ("flags." + font_char);
+ string font_char = robust_scm2string (me->get_property ("glyph-name"), "");
+ Stencil flag = fm->find_by_name (font_char);
if (flag.is_empty ())
me->warning (_f ("flag `%s' not found", font_char));
Real blot
= me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
- Real y2 = pure
- ? stem->pure_height (stem, 0, INT_MAX)[d]
- : stem->extent (stem, Y_AXIS)[d];
+ Interval stem_extent = pure
+ ? stem->pure_height (stem, 0, INT_MAX)
+ : stem->extent (stem, Y_AXIS);
- return scm_from_double (y2 - d * blot / 2);
+ return scm_from_double (stem_extent.is_empty ()
+ ? 0.0
+ : stem_extent[d] - d * blot / 2);
}
MAKE_SCHEME_CALLBACK (Flag, calc_x_offset, 1);
" @code{'no-flag}, which switches off the flag.",
/* properties */
+ "glyph-name "
"style "
"stroke-style "
);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+ Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
{
TRANSLATOR_DECLARATIONS (Footnote_engraver);
- DECLARE_TRANSLATOR_LISTENER (footnote);
DECLARE_ACKNOWLEDGER (grob);
DECLARE_END_ACKNOWLEDGER (grob);
- vector<Stream_event *> events_;
+
vector<Drul_array<Spanner *> > annotated_spanners_;
- void stop_translation_timestep ();
void finalize ();
- virtual void derived_mark () const;
void footnotify (Grob *, SCM);
};
-IMPLEMENT_TRANSLATOR_LISTENER (Footnote_engraver, footnote);
-void
-Footnote_engraver::listen_footnote (Stream_event *ev)
-{
- events_.push_back (ev);
-}
-
-void
-Footnote_engraver::stop_translation_timestep ()
-{
- events_.clear ();
-}
-
void
Footnote_engraver::finalize ()
{
annotated_spanners_.clear ();
}
-void
-Footnote_engraver::derived_mark () const
-{
- for (vsize i = 0; i < events_.size (); ++i)
- scm_gc_mark (events_[i]->self_scm ());
-}
-
Footnote_engraver::Footnote_engraver ()
{
}
// This grob has exhausted its footnote
info.grob ()->set_property ("footnote-music", SCM_EOL);
- return;
- }
- if (!events_.empty ())
- {
- string grobname = info.grob ()->name ();
-
- for (vsize i = 0; i < events_.size (); i++)
- {
- SCM name = events_[i]->get_property ("symbol");
- if (scm_is_symbol (name)
- && grobname == ly_symbol2string (name))
- {
- footnotify (info.grob (), events_[i]->self_scm ());
- // Event has exhausted its footnote
- events_[i]->set_property ("symbol", SCM_EOL);
- }
- }
+ return;
}
}
#include "freetype.hh"
#include "warn.hh"
+#include <freetype/ftoutln.h>
+#include <freetype/ftbbox.h>
+
FT_Library freetype2_library;
void
error ("cannot initialize FreeType");
}
+Box
+ly_FT_get_unscaled_indexed_char_dimensions (FT_Face const &face, size_t signed_idx)
+{
+ FT_UInt idx = FT_UInt (signed_idx);
+ FT_Load_Glyph (face, idx, FT_LOAD_NO_SCALE);
+
+ FT_Glyph_Metrics m = face->glyph->metrics;
+ FT_Pos hb = m.horiBearingX;
+ FT_Pos vb = m.horiBearingY;
+
+ // is this viable for all grobs?
+ return Box (Interval (Real (hb), Real (hb + m.width)),
+ Interval (Real (vb - m.height), Real (vb)));
+}
+
+SCM
+box_to_scheme_lines (Box b)
+{
+ return scm_list_4 (scm_list_4 (scm_from_double (b[X_AXIS][LEFT]),
+ scm_from_double (b[Y_AXIS][DOWN]),
+ scm_from_double (b[X_AXIS][RIGHT]),
+ scm_from_double (b[Y_AXIS][DOWN])),
+ scm_list_4 (scm_from_double (b[X_AXIS][RIGHT]),
+ scm_from_double (b[Y_AXIS][DOWN]),
+ scm_from_double (b[X_AXIS][RIGHT]),
+ scm_from_double (b[Y_AXIS][UP])),
+ scm_list_4 (scm_from_double (b[X_AXIS][RIGHT]),
+ scm_from_double (b[Y_AXIS][UP]),
+ scm_from_double (b[X_AXIS][LEFT]),
+ scm_from_double (b[Y_AXIS][UP])),
+ scm_list_4 (scm_from_double (b[X_AXIS][LEFT]),
+ scm_from_double (b[Y_AXIS][UP]),
+ scm_from_double (b[X_AXIS][LEFT]),
+ scm_from_double (b[Y_AXIS][DOWN])));
+}
+
+Box
+ly_FT_get_glyph_outline_bbox (FT_Face const &face, size_t signed_idx)
+{
+ FT_UInt idx = FT_UInt (signed_idx);
+ FT_Load_Glyph (face, idx, FT_LOAD_NO_SCALE);
+
+ if (!(face->glyph->format == FT_GLYPH_FORMAT_OUTLINE))
+ {
+#if 0
+ // will generate a lot of warnings
+ warning ("Cannot make glyph outline");
+#endif
+ return Box (Interval (infinity_f, -infinity_f), Interval (infinity_f, -infinity_f));
+ }
+ FT_Outline *outline;
+ outline = &(face->glyph->outline);
+
+ FT_BBox bbox;
+ FT_Outline_Get_BBox (outline, &bbox);
+
+ return Box (Interval (bbox.xMin, bbox.xMax), Interval (bbox.yMin, bbox.yMax));
+}
+
+SCM
+ly_FT_get_glyph_outline (FT_Face const &face, size_t signed_idx)
+{
+ FT_UInt idx = FT_UInt (signed_idx);
+ FT_Load_Glyph (face, idx, FT_LOAD_NO_SCALE);
+
+ if (!(face->glyph->format == FT_GLYPH_FORMAT_OUTLINE))
+ {
+#if 0
+ // will generate a lot of warnings
+ warning ("Cannot make glyph outline");
+#endif
+ return box_to_scheme_lines (ly_FT_get_unscaled_indexed_char_dimensions (face, signed_idx));
+ }
+
+ FT_Outline *outline;
+ outline = &(face->glyph->outline);
+ SCM out = SCM_EOL;
+ Offset lastpos;
+ Offset firstpos;
+ vsize j = 0;
+ while (j < outline->n_points)
+ {
+ if (j == 0)
+ {
+ firstpos = Offset (outline->points[j].x, outline->points[j].y);
+ lastpos = firstpos;
+ j++;
+ }
+ else if (outline->tags[j] & 1)
+ {
+ // it is a line
+ out = scm_cons (scm_list_4 (scm_from_double (lastpos[X_AXIS]),
+ scm_from_double (lastpos[Y_AXIS]),
+ scm_from_double (outline->points[j].x),
+ scm_from_double (outline->points[j].y)),
+ out);
+ lastpos = Offset (outline->points[j].x, outline->points[j].y);
+ j++;
+ }
+ else if (outline->tags[j] & 2)
+ {
+ // it is a third order bezier
+ out = scm_cons (scm_list_n (scm_from_double (lastpos[X_AXIS]),
+ scm_from_double (lastpos[Y_AXIS]),
+ scm_from_double (outline->points[j].x),
+ scm_from_double (outline->points[j].y),
+ scm_from_double (outline->points[j + 1].x),
+ scm_from_double (outline->points[j + 1].y),
+ scm_from_double (outline->points[j + 2].x),
+ scm_from_double (outline->points[j + 2].y),
+ SCM_UNDEFINED),
+ out);
+ lastpos = Offset (outline->points[j + 2].x, outline->points[j + 2].y);
+ j += 3;
+ }
+ else
+ {
+ // it is a second order bezier
+ Real x0 = lastpos[X_AXIS];
+ Real x1 = outline->points[j].x;
+ Real x2 = outline->points[j + 1].x;
+
+ Real y0 = lastpos[Y_AXIS];
+ Real y1 = outline->points[j].y;
+ Real y2 = outline->points[j + 1].y;
+
+ Real qx2 = x0 + x2 - (2 * x1);
+ Real qx1 = (2 * x1) - (2 * x0);
+ Real qx0 = x0;
+
+ Real qy2 = y0 + y2 - (2 * y1);
+ Real qy1 = (2 * y1) - (2 * y0);
+ Real qy0 = y0;
+
+ Real cx0 = qx0;
+ Real cx1 = qx0 + (qx1 / 3);
+ Real cx2 = qx0 + (2 * qx1 / 3) + (qx2 / 3);
+ Real cx3 = qx0 + qx1 + qx2;
+
+ Real cy0 = qy0;
+ Real cy1 = qy0 + (qy1 / 3);
+ Real cy2 = qy0 + (2 * qy1 / 3) + (qy2 / 3);
+ Real cy3 = qy0 + qy1 + qy2;
+
+ out = scm_cons (scm_list_n (scm_from_double (cx0),
+ scm_from_double (cy0),
+ scm_from_double (cx1),
+ scm_from_double (cy1),
+ scm_from_double (cx2),
+ scm_from_double (cy2),
+ scm_from_double (cx3),
+ scm_from_double (cy3),
+ SCM_UNDEFINED),
+ out);
+ lastpos = Offset (outline->points[j + 1].x, outline->points[j + 1].y);
+ j += 2;
+ }
+ }
+
+ // just in case, close the figure
+ out = scm_cons (scm_list_4 (scm_from_double (lastpos[X_AXIS]),
+ scm_from_double (lastpos[Y_AXIS]),
+ scm_from_double (firstpos[X_AXIS]),
+ scm_from_double (firstpos[Y_AXIS])),
+ out);
+
+ out = scm_reverse_x (out, SCM_EOL);
+ return out;
+}
LY_ASSERT_TYPE (unsmob_global_context, ctx, 2);
Music *music = unsmob_music (mus);
- if (!music
- || !music->get_length ().to_bool ())
+ if (!music)
{
warning (_ ("no music found in score"));
return SCM_BOOL_F;
--- /dev/null
+/*
+ This file is part of LilyPond, the GNU music typesetter.
+
+ Copyright (C) 1997--2012 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/>.
+*/
+
+#include "file-path.hh"
+#include "main.hh"
+
+/*
+ * Global options that can be overridden through command line.
+ */
+
+/* Names of header fields to be dumped to a separate file. */
+vector<string> dump_header_fieldnames_global;
+
+/* Name of initialisation file. */
+string init_name_global;
+
+/* Output formats to generate. */
+string output_format_global = "";
+
+/* Current output name. */
+string output_name_global;
+
+/* Run in safe mode? */
+bool be_safe_global = false;
+
+/* Scheme code to execute before parsing, after .scm init.
+ This is where -e arguments are appended to. */
+string init_scheme_code_global;
+string init_scheme_variables_global;
+
+bool relocate_binary = true;
+
+/*
+ * Miscellaneous global stuff.
+ */
+File_path global_path;
+
+/* Where the init files live. Typically:
+ LILYPOND_DATADIR = /usr/share/lilypond
+*/
+string lilypond_datadir;
+
+vector<string> start_environment_global;
fix_prefix ("pes_or_flexa", LINEA, current_set, min_set, max_set, primitive);
}
-void check_and_fix_all_prefixes (vector<Grob_info> primitives)
+void check_and_fix_all_prefixes (vector<Grob_info> const &primitives)
{
/* Check for invalid head modifier combinations */
for (vsize i = 0; i < primitives.size (); i++)
* Marks those heads that participate in a pes or flexa.
*/
void
-provide_context_info (vector<Grob_info> primitives)
+provide_context_info (vector<Grob_info> const &primitives)
{
Grob *prev_primitive = 0;
int prev_prefix_set = 0;
void
Gregorian_ligature_engraver::build_ligature (Spanner *ligature,
- vector<Grob_info> primitives)
+ vector<Grob_info> const &primitives)
{
// apply style-independent checking and transformation
check_and_fix_all_prefixes (primitives);
grob_property_callback_stack = scm_cdr (grob_property_callback_stack);
#endif
- /*
- If the function returns SCM_UNSPECIFIED, we assume the
- property has been set with an explicit set_property ()
- call.
- */
if (value == SCM_UNSPECIFIED)
{
value = get_property_data (sym);
assert (value == SCM_EOL || value == marker);
if (value == marker)
- *alist = scm_assq_remove_x (*alist, marker);
+ *alist = scm_assq_remove_x (*alist, sym);
}
else
{
LY_ASSERT_SMOB (Grob, grob, 1);
- bool type_ok = ly_cheap_is_list (symlist);
+ bool type_ok = scm_is_pair (symlist);
if (type_ok)
for (SCM s = symlist; scm_is_pair (s) && type_ok; s = scm_cdr (s))
SCM_ASSERT_TYPE (type_ok, symlist, SCM_ARG2, __FUNCTION__, "list of symbols");
- set_nested_property (sc, symlist, val);
+ if (scm_is_pair (scm_cdr (symlist)))
+ set_nested_property (sc, symlist, val);
+ else
+ ly_grob_set_property_x (grob, scm_car (symlist), val);
return SCM_UNSPECIFIED;
}
return ly_bool2scm (Grob::vertical_less (ga, gb));
}
+
+LY_DEFINE (ly_grob_get_vertical_axis_group_index, "ly:grob-get-vertical-axis-group-index",
+ 1, 0, 0, (SCM grob),
+ "Get the index of the vertical axis group the grob @var{grob} belongs to;"
+ " return @code{-1} if none is found.")
+{
+ Grob *gr = unsmob_grob (grob);
+
+ LY_ASSERT_SMOB (Grob, grob, 1);
+
+ return scm_from_int (Grob::get_vertical_axis_group_index (gr));
+}
#include "grob.hh"
#include <cstring>
+#include <set>
#include "align-interface.hh"
#include "axis-group-interface.hh"
set_property ("X-extent", Grob::stencil_width_proc);
if (get_property_data ("Y-extent") == SCM_EOL)
set_property ("Y-extent", Grob::stencil_height_proc);
+ if (get_property_data ("vertical-skylines") == SCM_EOL)
+ set_property ("vertical-skylines", Grob::simple_vertical_skylines_from_stencil_proc);
+ if (get_property_data ("horizontal-skylines") == SCM_EOL)
+ set_property ("horizontal-skylines", Grob::simple_horizontal_skylines_from_stencil_proc);
}
Grob::Grob (Grob const &s)
}
// We never want nan, so we avoid shifting infinite values.
- for (LEFT_and_RIGHT (d))
- if (!isinf (real_ext[d]))
- real_ext[d] += offset;
+ if(!isinf (offset))
+ real_ext.translate(offset);
+ else
+ this->warning(_f ("ignored infinite %s-offset",
+ a == X_AXIS ? "X" : "Y"));
return real_ext;
}
"color "
"cross-staff "
"id "
- "extra-X-extent "
- "extra-Y-extent "
"extra-offset "
"footnote-music "
"forced-spacing "
+ "horizontal-skylines "
"interfaces "
"layer "
"meta "
"outside-staff-priority "
"pure-Y-offset-in-progress "
"rotation "
+ "skyline-horizontal-padding "
"springs-and-rods "
"staff-symbol "
"stencil "
"transparent "
+ "vertical-skylines "
"whiteout "
);
return common;
}
+Grob *
+common_refpoint_of_array (set<Grob *> const &arr, Grob *common, Axis a)
+{
+ set<Grob *>::iterator it;
+
+ for (it = arr.begin (); it != arr.end (); it++)
+ if (common)
+ common = common->common_refpoint (*it, a);
+ else
+ common = *it;
+
+ return common;
+}
+
Interval
robust_relative_extent (Grob *me, Grob *refpoint, Axis a)
{
broken[d] = bounds[d]->break_status_dir () != CENTER;
}
- broken[RIGHT] = broken[RIGHT] && me->broken_neighbor (RIGHT);
- broken[RIGHT] = broken[RIGHT] && me->broken_neighbor (RIGHT)->is_live ();
-
if (broken[RIGHT])
{
Spanner *next = me->broken_neighbor (RIGHT);
- Stencil *s = next->get_stencil ();
- if (!s || s->is_empty ())
+ // Hairpin-parts suicide in after-line-breaking if they need not be drawn
+ if (next)
+ {
+ (void) next->get_property ("after-line-breaking");
+ broken[RIGHT] = next->is_live ();
+ }
+ else
broken[RIGHT] = false;
}
+++ /dev/null
-# lily/include/Makefile
-
-depth = ../..
-STEPMAKE_TEMPLATES=c++
-
-include $(depth)/make/stepmake.make
-
-
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (height, (SCM));
DECLARE_SCHEME_CALLBACK (width, (SCM));
+ DECLARE_SCHEME_CALLBACK (horizontal_skylines, (SCM));
DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
DECLARE_GROB_INTERFACE ();
static string get_fontcharname (string style, int alteration);
- static vector<Box> accurate_boxes (Grob *me, Grob **common);
static SCM get_stencil (Grob *me);
};
#include "grob-interface.hh"
#include "skyline.hh"
-struct Axis_group_interface
+class Axis_group_interface
{
+ static Real default_outside_staff_padding_;
+ public
+:
static SCM generic_group_extent (Grob *me, Axis a);
+ static Real get_default_outside_staff_padding ();
static Interval generic_bound_extent (Grob *me, Grob *common, Axis a);
static Interval pure_group_height (Grob *me, int start, int end);
DECLARE_SCHEME_CALLBACK (width, (SCM smob));
static Interval rest_of_line_pure_height (Grob *me, int, int);
static Interval part_of_line_pure_height (Grob *me, bool begin, int, int);
- static bool has_outside_staff_parent (Grob *me);
+ static Grob *outside_staff_ancestor (Grob *me);
static Skyline_pair skyline_spacing (Grob *me, vector<Grob *> elements);
static void add_element (Grob *me, Grob *);
static void set_axes (Grob *, Axis, Axis);
void score_slope_direction (Beam_configuration *config) const;
void score_slope_musical (Beam_configuration *config) const;
void score_stem_lengths (Beam_configuration *config) const;
- void generate_quants (vector<Beam_configuration *>* scores) const;
+ void generate_quants (vector<Beam_configuration *> *scores) const;
void score_collisions (Beam_configuration *config) const;
};
DECLARE_SCHEME_CALLBACK (rest_collision_callback, (SCM element, SCM prev_off));
DECLARE_SCHEME_CALLBACK (pure_rest_collision_callback, (SCM element, SCM, SCM, SCM prev_off));
DECLARE_SCHEME_CALLBACK (print, (SCM));
+ DECLARE_SCHEME_CALLBACK (calc_beam_gap, (SCM));
+ DECLARE_SCHEME_CALLBACK (calc_springs_and_rods, (SCM));
+ DECLARE_SCHEME_CALLBACK (calc_minimum_length, (SCM));
DECLARE_SCHEME_CALLBACK (calc_beaming, (SCM));
DECLARE_SCHEME_CALLBACK (calc_stem_shorten, (SCM));
DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
private:
friend class Beam_scoring_problem;
+ static bool whole_note_close_chord_tremolo (Grob *me);
static Direction get_default_dir (Grob *);
static vector<Beam_segment> get_beam_segments (Grob *);
static void set_stem_directions (Grob *, Direction);
Polynomial polynomial (Axis)const;
Offset curve_point (Real t) const;
+ Real slope_at_point (Real t) const;
Real curve_coordinate (Real t, Axis) const;
static const int CONTROL_COUNT = 4;
Interval y () const {return interval_a_[Y_AXIS]; }
Interval operator [] (Axis a) const;
Interval &operator [] (Axis a);
+ Real area () const;
Offset center () const;
Box (Interval ix, Interval iy);
};
+DECLARE_UNSMOB (Box, box);
+
#endif
protected:
virtual void build_ligature (Spanner *ligature,
- vector<Grob_info> primitives) = 0;
+ vector<Grob_info> const &primitives) = 0;
virtual void typeset_ligature (Spanner *ligature,
- vector<Grob_info> primitives);
+ vector<Grob_info> const &primitives);
virtual void move_related_items_to_column (Item *, Paper_column *, Real);
private:
- void collect_accidentals (Spanner *, vector<Grob_info>);
+ void collect_accidentals (Spanner *, vector<Grob_info> const &);
};
#endif // COHERENT_LIGATURE_ENGRAVER_HH
Real combine_demerits (Real force, Real prev_force);
bool calc_subproblem (vsize start, vsize systems, vsize max_break_index);
- void fill_line_details (Line_details *const, vsize, vsize);
+ void fill_line_details (Line_details *, vsize, vsize);
};
#endif /* CONSTRAINED_BREAKING_HH */
void add_context_mod (SCM);
void add_context_mods (SCM);
- VIRTUAL_COPY_CONSTRUCTOR (Context_mod, Context_mod);
-
SCM get_mods () const;
Context_mod ();
--- /dev/null
+/*
+ This file is part of LilyPond, the GNU music typesetter.
+
+ Copyright (C) 1999--2012 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 FINGERING_COLUMN_HH
+#define FINGERING_COLUMN_HH
+
+#include "lily-proto.hh"
+#include "grob-interface.hh"
+#include "std-vector.hh"
+
+struct Fingering_column
+{
+ static void add_fingering (Grob *, Grob *);
+ DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM));
+ DECLARE_GROB_INTERFACE ();
+};
+
+#endif /* FINGERING_COLUMN_HH */
#include FT_FREETYPE_H
#include "std-string.hh"
+#include "box.hh"
void init_freetype ();
extern FT_Library freetype2_library;
string freetype_error_string (FT_Error code);
+SCM box_to_scheme_lines (Box b);
+Box ly_FT_get_unscaled_indexed_char_dimensions (FT_Face const &face, size_t signed_idx);
+Box ly_FT_get_glyph_outline_bbox (FT_Face const &face, size_t signed_idx);
+SCM ly_FT_get_glyph_outline (FT_Face const &face, size_t signed_idx);
+
#endif /* FREETYPE_HH */
Gregorian_ligature_engraver ();
virtual void listen_pes_or_flexa (Stream_event *ev);
- virtual void build_ligature (Spanner *ligature, vector<Grob_info> primitives);
+ virtual void build_ligature (Spanner *ligature,
+ vector<Grob_info> const &primitives);
virtual void transform_heads (Spanner *ligature,
- vector<Grob_info> primitives) = 0;
+ vector<Grob_info> const &primitives) = 0;
void stop_translation_timestep ();
};
#include "dimension-cache.hh"
#include "grob-interface.hh"
+#include <set>
+
class Grob
{
private:
DECLARE_SCHEME_CALLBACK (y_parent_positioning, (SCM));
DECLARE_SCHEME_CALLBACK (stencil_height, (SCM smob));
DECLARE_SCHEME_CALLBACK (stencil_width, (SCM smob));
+ DECLARE_SCHEME_CALLBACK (simple_vertical_skylines_from_stencil, (SCM smob));
+ DECLARE_SCHEME_CALLBACK (vertical_skylines_from_stencil, (SCM smob));
+ DECLARE_SCHEME_CALLBACK (vertical_skylines_from_element_stencils, (SCM smob));
+ DECLARE_SCHEME_CALLBACK (simple_horizontal_skylines_from_stencil, (SCM smob));
+ DECLARE_SCHEME_CALLBACK (horizontal_skylines_from_stencil, (SCM smob));
+ DECLARE_SCHEME_CALLBACK (horizontal_skylines_from_element_stencils, (SCM smob));
/* R/O access */
Output_def *layout () const { return layout_; }
void fixup_refpoint ();
/* vertical ordering */
+ static bool internal_vertical_less (Grob *g1, Grob *g2, bool pure);
static Grob *get_root_vertical_alignment (Grob *g);
static Grob *get_vertical_axis_group (Grob *g);
static bool vertical_less (Grob *g1, Grob *g2);
static bool pure_vertical_less (Grob *g1, Grob *g2);
- static bool internal_vertical_less (Grob *g1, Grob *g2, bool pure);
static int get_vertical_axis_group_index (Grob *g);
+ /* skylines */
virtual Interval_t<int> spanned_rank_interval () const;
virtual bool pure_is_visible (int start, int end) const;
bool check_cross_staff (Grob *common);
static bool less (Grob *g1, Grob *g2);
+ static SCM internal_simple_skylines_from_stencil (SCM, Axis);
+ static SCM internal_skylines_from_element_stencils (SCM, Axis);
};
/* smob utilities */
/* refpoints */
Grob *common_refpoint_of_list (SCM elt_list, Grob *, Axis a);
Grob *common_refpoint_of_array (vector<Grob *> const &, Grob *, Axis a);
+Grob *common_refpoint_of_array (set<Grob *> const &, Grob *, Axis a);
System *get_root_system (Grob *me);
/* extents */
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+ Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
void process_music ();
virtual Spanner *create_ligature_spanner () = 0;
virtual void typeset_ligature (Spanner *ligature,
- vector<Grob_info> primitives) = 0;
+ vector<Grob_info> const &primitives) = 0;
virtual Spanner *current_ligature ();
SCM brew_ligature_primitive_proc;
public:
SCM eval_scm_token (SCM sval) { return eval_scm (sval, '#'); }
SCM extra_tokens_;
- YYSTYPE *lexval_;
+ SCM *lexval_;
Input *lexloc_;
bool is_main_input_;
+ vsize main_input_level_;
Sources *sources_;
SCM keyword_list () const;
SCM lookup_identifier (string s);
SCM lookup_identifier_symbol (SCM s);
- void push_extra_token (int token_type, SCM scm = SCM_UNDEFINED);
+ void push_extra_token (int token_type, SCM scm = SCM_UNSPECIFIED);
void push_chord_state (SCM alist);
void push_figuredbass_state ();
void push_lyric_state ();
void clear ();
void do_init_file ();
- void do_yyparse ();
+ SCM do_yyparse ();
void include_string (string ly_code);
void parse_file (string init, string name, string out_name);
void parse_string (string ly_code);
void parser_error (string);
void parser_error (Input const &, string);
// The following is called as yyerror
- static void parser_error (Input const *i, Lily_parser *parser, string s);
+ static void parser_error (Input const *i, Lily_parser *parser, SCM *, string s);
void set_yydebug (bool);
SCM make_scope () const;
Real directed_round (Real f, Direction d);
+Offset get_point_in_y_direction (Offset orig, Real slope, Real dist, Direction dir);
Real peak_around (Real epsilon, Real threshold, Real x);
Real convex_amplifier (Real standard_x, Real increase_factor, Real x);
string camel_case_to_lisp_identifier (string in);
{
public:
Stencil text_stencil (Output_def *output_state, string, bool) const;
+ Real get_magnification () const;
static SCM make_scaled_font_metric (Font_metric *fm, Real magnification);
size_t count () const;
static SCM automatic_shift (Grob *, Drul_array<vector<Grob *> >);
static SCM forced_shift (Grob *);
+ static vector<int> note_head_positions (Grob *me);
static Drul_array<vector<Grob *> > get_clash_groups (Grob *me);
DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM smob));
static void add_column (Grob *me, Grob *ncol);
static bool has_rests (Grob *me);
static Grob *dot_column (Grob *me);
static Interval cross_staff_extent (Grob *me, Grob *refp);
+ static Interval accidental_width (Grob *me);
DECLARE_GROB_INTERFACE ();
static Item *get_stem (Grob *);
DECLARE_CLASSNAME (Open_type_font);
public:
+ Real get_units_per_EM () const;
SCM get_subfonts () const;
SCM get_global_table () const;
SCM get_char_table () const;
SCM glyph_list () const;
-
+ SCM get_glyph_outline (size_t signed_idx) const;
+ Box get_glyph_outline_bbox (size_t signed_idx) const;
string get_otf_table (string tag) const;
static SCM make_otf (string);
string font_name () const;
Offset attachment_point (string) const;
size_t count () const;
Box get_indexed_char_dimensions (size_t) const;
+ Box get_unscaled_indexed_char_dimensions (size_t) const;
size_t name_to_index (string) const;
//size_t glyph_name_to_charcode (string) const;
size_t index_to_charcode (size_t) const;
SCM font_file_name () const;
void register_font_file (string, string, int);
+ size_t name_to_index (string) const;
+ SCM get_glyph_outline (size_t signed_idx) const;
+ Box get_glyph_outline_bbox (size_t signed_idx) const;
+ Box get_unscaled_indexed_char_dimensions (size_t) const;
+ Box get_scaled_indexed_char_dimensions (size_t) const;
+
Stencil pango_item_string_stencil (PangoGlyphItem const *) const;
virtual Stencil text_stencil (Output_def *output_state,
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+ Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2012 Mike Solomon <mike@apollinemike.com>
+ Copyright (C) 2012 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
DECLARE_SIMPLE_SMOBS (Skyline_pair);
public:
Skyline_pair ();
- Skyline_pair (vector<Box> const &boxes, Real horizon_padding, Axis a);
- Skyline_pair (Box const &, Real horizon_padding, Axis a);
+ Skyline_pair (vector<Box> const &boxes, Axis a);
+ Skyline_pair (vector<Drul_array<Offset> > const &buildings, Axis a);
+ Skyline_pair (vector<Skyline_pair> const &skypairs);
+ Skyline_pair (Box const &, Axis a);
+
+ Real left () const;
+ Real right () const;
void raise (Real);
void shift (Real);
- void insert (Box const &, Real horizon_padding, Axis);
+ void deholify ();
+ void insert (Box const &, Axis);
void merge (Skyline_pair const &other);
Skyline &operator [] (Direction d);
Skyline const &operator [] (Direction d) const;
struct Building
{
+ Real start_;
Real end_;
Real y_intercept_;
Real slope_;
void precompute (Real start, Real start_height, Real end_height, Real end);
Building (Real start, Real start_height, Real end_height, Real end);
- Building (Box const &b, Real horizon_padding, Axis a, Direction d);
+ Building (Box const &b, Axis a, Direction d);
void print () const;
Real height (Real x) const;
Real intersection_x (Building const &other) const;
void leading_part (Real chop);
bool conceals (Building const &other, Real x) const;
- Building sloped_neighbour (Real start, Real horizon_padding, Direction d) const;
+ Real shift_to_intersect (Real x, Real y) const;
};
class Skyline
list<Building> buildings_;
Direction sky_;
- void internal_merge_skyline (list<Building>*, list<Building>*,
- list<Building> *const result);
- list<Building> internal_build_skyline (list<Box>*, Real, Axis, Direction);
+ void internal_merge_skyline (list<Building> *, list<Building> *,
+ list<Building> *result) const;
+ list<Building> internal_build_skyline (list<Building> *) const;
+ Real internal_distance (Skyline const &, Real horizon_padding, Real *touch_point) const;
+ Real internal_distance (Skyline const &, Real *touch_point) const;
+ void normalize ();
DECLARE_SIMPLE_SMOBS (Skyline);
public:
Skyline ();
Skyline (Skyline const &src);
- Skyline (Skyline const &src, Real horizon_padding, Axis a);
Skyline (Direction sky);
- Skyline (vector<Box> const &bldgs, Real horizon_padding, Axis a, Direction sky);
- Skyline (Box const &b, Real horizon_padding, Axis a, Direction sky);
+ Skyline (vector<Box> const &bldgs, Axis a, Direction sky);
+ Skyline (vector<Drul_array<Offset> > const &bldgs, Axis a, Direction sky);
+ Skyline (vector<Skyline_pair> const &skypairs, Direction sky);
+ Skyline (Box const &b, Axis a, Direction sky);
vector<Offset> to_points (Axis) const;
+ void deholify ();
void merge (Skyline const &);
- void insert (Box const &, Real horizon_padding, Axis);
+ void insert (Box const &, Axis);
void print () const;
void print_points () const;
void raise (Real);
void shift (Real);
Real distance (Skyline const &, Real horizon_padding = 0) const;
Real touching_point (Skyline const &, Real horizon_padding = 0) const;
+ Real shift_to_avoid (Skyline const &other, Real, Direction d, Real horizon_padding = 0);
+ Real raise_to_avoid (Skyline const &other, Real, Direction d, Real horizon_padding = 0);
+ Drul_array<Real> shifts_to_avoid_intersection (Skyline const &, Real horizon_padding = 0) const;
+ Interval raises_to_avoid_intersection (Skyline const &, Real horizon_padding = 0) const;
Real height (Real airplane) const;
Real max_height () const;
Real max_height_position () const;
+ Real left () const;
+ Real right () const;
void set_minimum_height (Real height);
void clear ();
bool is_empty () const;
+ Skyline padded (Real horizon_padding) const;
DECLARE_SCHEME_CALLBACK (get_touching_point, (SCM, SCM, SCM));
DECLARE_SCHEME_CALLBACK (get_distance, (SCM, SCM, SCM));
DECLARE_SCHEME_CALLBACK (get_max_height, (SCM));
DECLARE_SCHEME_CALLBACK (get_max_height_position, (SCM));
DECLARE_SCHEME_CALLBACK (get_height, (SCM, SCM));
-
-protected:
- Real internal_distance (Skyline const &, Real horizon_padding, Real *touch_point) const;
};
extern bool debug_skylines;
static void add_column (Grob *me, Grob *col);
static void add_extra_encompass (Grob *me, Grob *col);
static void replace_breakable_encompass_objects (Grob *me);
- static void auxiliary_acknowledge_extra_object (Grob_info const &, vector<Grob *>&, vector<Grob *>&);
+ static void auxiliary_acknowledge_extra_object (Grob_info const &, vector<Grob *> &, vector<Grob *> &);
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (calc_control_points, (SCM));
DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (width, (SCM));
DECLARE_SCHEME_CALLBACK (calc_style, (SCM));
+ DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
static Stencil raw_stencil (Grob *, Real slope, Direction stemdir);
static Real y_offset (Grob *, bool pure);
DECLARE_SCHEME_CALLBACK (offset_callback, (SCM element));
DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
DECLARE_SCHEME_CALLBACK (calc_beaming, (SCM));
+ DECLARE_SCHEME_CALLBACK (calc_length, (SCM));
+ DECLARE_SCHEME_CALLBACK (pure_calc_length, (SCM, SCM, SCM));
DECLARE_SCHEME_CALLBACK (calc_stem_begin_position, (SCM));
DECLARE_SCHEME_CALLBACK (pure_calc_stem_begin_position, (SCM, SCM, SCM));
DECLARE_SCHEME_CALLBACK (calc_stem_end_position, (SCM));
Box extent_box () const;
bool is_empty () const;
Stencil in_color (Real r, Real g, Real b) const;
+ static SCM skylines_from_stencil (SCM, Real, Axis);
};
DECLARE_UNSMOB (Stencil, stencil);
public:
Paper_score *paper_score () const;
- Grob *get_vertical_alignment ();
Grob *get_extremal_staff (Direction dir, Interval const &);
Grob *get_neighboring_staff (Direction dir, Grob *vertical_axis_group, Interval_t<int> bounds);
Grob *get_pure_bound (Direction dir, int start, int end);
DECLARE_SCHEME_CALLBACK (footnotes_before_line_breaking, (SCM));
DECLARE_SCHEME_CALLBACK (footnotes_after_line_breaking, (SCM));
+ DECLARE_SCHEME_CALLBACK (vertical_skyline_elements, (SCM));
DECLARE_SCHEME_CALLBACK (calc_pure_relevant_grobs, (SCM));
DECLARE_SCHEME_CALLBACK (height, (SCM));
DECLARE_SCHEME_CALLBACK (calc_pure_height, (SCM, SCM, SCM));
DECLARE_SCHEME_CALLBACK (get_staves, (SCM));
DECLARE_SCHEME_CALLBACK (get_spaceable_staves, (SCM));
DECLARE_SCHEME_CALLBACK (get_nonspaceable_staves, (SCM));
+ DECLARE_SCHEME_CALLBACK (get_vertical_alignment, (SCM));
System (SCM);
System (System const &);
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+ Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
the cancellation signature.
*/
- int last_pos = -1000;
+ Slice pos, overlapping_pos;
SCM last_glyph_name = SCM_BOOL_F;
SCM padding_pairs = me->get_property ("padding-pairs");
me->warning (_ ("alteration not found"));
else
{
- SCM what = scm_caar (s);
-
- SCM proc = ly_lily_module_constant ("key-signature-interface::alteration-position");
-
- int pos = scm_to_int (scm_call_3 (proc, what, scm_cdar (s), c0s));
- acc.translate_axis (pos * inter, Y_AXIS);
-
+ SCM proc = ly_lily_module_constant ("key-signature-interface::alteration-positions");
+
+ pos.set_empty ();
+ Stencil column;
+ for (SCM pos_list = scm_call_3 (proc, scm_car (s), c0s, smob);
+ scm_is_pair (pos_list); pos_list = scm_cdr (pos_list))
+ {
+ int p = scm_to_int (scm_car (pos_list));
+ pos.add_point (p);
+ column.add_stencil (acc.translated (Offset (0, p * inter)));
+ }
/*
The natural sign (unlike flat & sharp)
has vertical edges on both sides. A little padding is
if (scm_is_pair (handle))
padding = robust_scm2double (scm_cdr (handle), 0.0);
else if (glyph_name == "accidentals.natural"
- && last_pos < pos + 2
- && last_pos > pos - 6)
+ && !intersection (overlapping_pos, pos).is_empty ())
padding += 0.3;
- mol.add_at_edge (X_AXIS, LEFT, acc, padding);
+ mol.add_at_edge (X_AXIS, LEFT, column, padding);
- last_pos = pos;
+ pos.widen (4);
+ overlapping_pos = pos + 2;
last_glyph_name = glyph_name_scm;
}
}
"alteration-alist "
"c0-position "
"glyph-name-alist "
+ "flat-positions "
+ "sharp-positions "
"padding "
"padding-pairs "
);
if (span_)
{
span_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn")));
- Pointer_group_interface::set_ordered (span_, ly_symbol2scm ("elements"), false);
span_ = 0;
}
}
Drul_array<Interval> const &previous_extents,
Item *current_column,
Item *previous_column,
- Real min_length_fraction)
+ Real min_length)
{
- Direction d = UP;
- do
+ for (UP_and_DOWN (d))
{
if (!current_extents[d].is_empty ()
&& !previous_extents[d].is_empty ())
{
- Real total_head_length = previous_extents[d].length ()
- + current_extents[d].length ();
-
Rod rod;
- rod.distance_ = total_head_length
- * (3 / 2 * min_length_fraction)
+ rod.distance_ = 2 * min_length
/*
we go from right to left.
*/
rod.add_to_cols ();
}
}
- while (flip (&d) != DOWN);
}
MAKE_SCHEME_CALLBACK (Ledger_line_spanner, set_spacing_rods, 1);
Drul_array<Interval> current_extents;
Drul_array<Interval> previous_extents;
+ Real current_head_width = 0.0;
Item *previous_column = 0;
Item *current_column = 0;
if (staff_extent.contains (pos))
continue;
+ /* Ambitus heads can appear out-of-order in heads[],
+ * but as part of prefatory matter, they need no rods */
+ if (h->internal_has_interface (ly_symbol2scm ("ambitus-interface")))
+ continue;
+
Item *column = h->get_column ();
if (current_column != column)
{
set_rods (current_extents, previous_extents,
current_column, previous_column,
- min_length_fraction);
+ current_head_width * min_length_fraction);
previous_column = current_column;
current_column = column;
current_extents[DOWN].set_empty ();
current_extents[UP].set_empty ();
+ current_head_width = 0.0;
}
Interval head_extent = h->extent (column, X_AXIS);
continue;
current_extents[vdir].unite (head_extent);
+ current_head_width = max (current_head_width, head_extent.length ());
}
if (previous_column && current_column)
set_rods (current_extents, previous_extents,
current_column, previous_column,
- min_length_fraction);
+ current_head_width * min_length_fraction);
return SCM_UNSPECIFIED;
}
-%{ // -*- mode: c++; c-file-style: "linux" -*-
+%{ // -*- mode: c++; c-file-style: "linux"; indent-tabs-mode: t -*-
/*
This file is part of LilyPond, the GNU music typesetter.
bool is_valid_version (string s);
-#define start_quote() \
- yy_push_state (quote);\
- yylval.string = new string
-
-#define start_lyric_quote() \
- yy_push_state (lyric_quote);\
- yylval.string = new string
+#define start_quote() do { \
+ yy_push_state (quote); \
+ yylval = SCM_EOL; \
+ } while (0)
#define yylval (*lexval_)
%x figures
%x incl
%x lyrics
-%x lyric_quote
%x longcomment
%x markup
%x notes
AA {A}|_
N [0-9]
ANY_CHAR (.|\n)
-PUNCT [][()?!:'`]
-SPECIAL_CHAR [&@]
-NATIONAL [\001-\006\021-\027\031\036]
-TEX {AA}|-|{PUNCT}|{NATIONAL}|{SPECIAL_CHAR}
WORD {A}([-_]{A}|{A})*
COMMAND \\{WORD}
HORIZONTALWHITE [ \t]
BLACK [^ \n\t\f\r]
RESTNAME [rs]
-LYRICS ({AA}|{TEX})[^0-9 \t\n\r\f]*
-ESCAPED [nt\\'"]
+ESCAPED [nt\\''""]
EXTENDER __
HYPHEN --
BOM_UTF8 \357\273\277
/* produce requested token */
int type = scm_to_int (scm_caar (extra_tokens_));
- yylval.scm = scm_cdar (extra_tokens_);
+ yylval = scm_cdar (extra_tokens_);
extra_tokens_ = scm_cdr (extra_tokens_);
if (scm_is_null (extra_tokens_))
yy_pop_state ();
/* produce requested token */
int type = scm_to_int (scm_caar (extra_tokens_));
- yylval.scm = scm_cdar (extra_tokens_);
+ yylval = scm_cdar (extra_tokens_);
extra_tokens_ = scm_cdr (extra_tokens_);
if (scm_is_null (extra_tokens_))
yy_pop_state ();
<INITIAL,chords,lyrics,notes,figures>\\sourcefileline{WHITE}* {
yy_push_state (sourcefileline);
}
-<version>\"[^"]*\" { /* got the version number */
+<version>\"[^""]*\" { /* got the version number */
string s (YYText_utf8 () + 1);
s = s.substr (0, s.rfind ('\"'));
SCM top_scope = scm_car (scm_last_pair (scopes_));
scm_module_define (top_scope, ly_symbol2scm ("version-seen"), SCM_BOOL_T);
- if (!is_valid_version (s))
+ if (!is_valid_version (s)) {
+ yylval = SCM_UNSPECIFIED;
return INVALID;
-
-
+ }
}
<sourcefilename>\"[^""]*\" {
string s (YYText_utf8 () + 1);
if (!is_main_input_)
{
start_main_input ();
+ main_input_level_ = include_stack_.size ();
is_main_input_ = true;
}
else
<chords,notes,figures>{RESTNAME}/[-_] | // pseudo backup rule
<chords,notes,figures>{RESTNAME} {
char const *s = YYText ();
- yylval.scm = scm_from_locale_string (s);
+ yylval = scm_from_locale_string (s);
return RESTNAME;
}
<chords,notes,figures>q/[-_] | // pseudo backup rule
<chords,notes,figures>q {
+ yylval = SCM_UNSPECIFIED;
return CHORD_REPETITION;
}
<chords,notes,figures>R/[-_] | // pseudo backup rule
<chords,notes,figures>R {
+ yylval = SCM_UNSPECIFIED;
return MULTI_MEASURE_REST;
}
<INITIAL,chords,figures,lyrics,markup,notes># { //embedded scm
}
char_count_stack_.back () += n;
- yylval.scm = sval;
+ yylval = sval;
return SCM_TOKEN;
}
sval = eval_scm (sval, '$');
int token = scan_scm_id (sval);
- if (!scm_is_eq (yylval.scm, SCM_UNSPECIFIED))
+ if (!scm_is_eq (yylval, SCM_UNSPECIFIED))
return token;
}
<INITIAL,notes,lyrics>{
\<\< {
+ yylval = SCM_UNSPECIFIED;
return DOUBLE_ANGLE_OPEN;
}
\>\> {
+ yylval = SCM_UNSPECIFIED;
return DOUBLE_ANGLE_CLOSE;
}
}
<INITIAL,notes>{
\< {
+ yylval = SCM_UNSPECIFIED;
return ANGLE_OPEN;
}
\> {
+ yylval = SCM_UNSPECIFIED;
return ANGLE_CLOSE;
}
}
<figures>{
_ {
+ yylval = SCM_UNSPECIFIED;
return FIGURE_SPACE;
}
\> {
+ yylval = SCM_UNSPECIFIED;
return FIGURE_CLOSE;
}
\< {
+ yylval = SCM_UNSPECIFIED;
return FIGURE_OPEN;
}
}
return scan_escaped_word (YYText_utf8 () + 1);
}
{FRACTION} {
- yylval.scm = scan_fraction (YYText ());
+ yylval = scan_fraction (YYText ());
return FRACTION;
}
{UNSIGNED}/\/ | // backup rule
{UNSIGNED} {
- yylval.scm = scm_c_read_string (YYText ());
+ yylval = scm_c_read_string (YYText ());
return UNSIGNED;
}
{E_UNSIGNED} {
- yylval.i = String_convert::dec2int (string (YYText () +1));
+ yylval = scm_c_read_string (YYText () + 1);
return E_UNSIGNED;
}
}
-<quote,lyric_quote>{
+<quote>{
\\{ESCAPED} {
- *yylval.string += to_string (escaped_char (YYText ()[1]));
+ char c = escaped_char (YYText ()[1]);
+ yylval = scm_cons (scm_from_locale_stringn (&c, 1),
+ yylval);
}
[^\\""]+ {
- *yylval.string += YYText_utf8 ();
+ yylval = scm_cons (scm_from_locale_string (YYText_utf8 ()),
+ yylval);
}
\" {
yy_pop_state ();
/* yylval is union. Must remember STRING before setting SCM*/
- string *sp = yylval.string;
- yylval.scm = ly_string2scm (*sp);
- delete sp;
+
+ yylval = scm_string_concatenate_reverse (yylval,
+ SCM_UNDEFINED,
+ SCM_UNDEFINED);
+
return is_lyric_state () ? LYRICS_STRING : STRING;
}
\\ {
- *yylval.string += YYText ();
+ yylval = scm_cons (scm_from_locale_string (YYText ()),
+ yylval);
}
}
<lyrics>{
\" {
- start_lyric_quote ();
+ start_quote ();
}
{FRACTION} {
- yylval.scm = scan_fraction (YYText ());
+ yylval = scan_fraction (YYText ());
return FRACTION;
}
{UNSIGNED}/\/ | // backup rule
{UNSIGNED} {
- yylval.scm = scm_c_read_string (YYText ());
+ yylval = scm_c_read_string (YYText ());
return UNSIGNED;
}
{COMMAND}/[-_] | // backup rule
{COMMAND} {
return scan_escaped_word (YYText_utf8 () + 1);
}
- {LYRICS} {
+ /* Characters needed to express durations, assignments, barchecks */
+ [*.=|] {
+ yylval = SCM_UNSPECIFIED;
+ return YYText ()[0];
+ }
+ [^$#{}\"\\ \t\n\r\f0-9]+ {
/* ugr. This sux. */
- string s (YYText_utf8 ());
+ string s (YYText_utf8 ());
+ yylval = SCM_UNSPECIFIED;
if (s == "__")
- return yylval.i = EXTENDER;
+ return EXTENDER;
if (s == "--")
- return yylval.i = HYPHEN;
+ return HYPHEN;
s = lyric_fudge (s);
-
- char c = s[s.length () - 1];
- if (c == '{' || c == '}') // brace open is for not confusing dumb tools.
- here_input ().warning (
- _ ("Brace found at end of lyric. Did you forget a space?"));
- yylval.scm = ly_string2scm (s);
-
+ yylval = ly_string2scm (s);
return LYRICS_STRING;
}
+ /* This should really just cover {} */
. {
- return YYText ()[0]; // LYRICS already catches all multibytes.
+ yylval = SCM_UNSPECIFIED;
+ return YYText ()[0]; // above catches all multibytes.
}
}
<chords>{
return scan_escaped_word (YYText_utf8 () + 1);
}
{FRACTION} {
- yylval.scm = scan_fraction (YYText ());
+ yylval = scan_fraction (YYText ());
return FRACTION;
}
{UNSIGNED}/\/ | // backup rule
{UNSIGNED} {
- yylval.scm = scm_c_read_string (YYText ());
+ yylval = scm_c_read_string (YYText ());
return UNSIGNED;
}
- {
+ yylval = SCM_UNSPECIFIED;
return CHORD_MINUS;
}
: {
+ yylval = SCM_UNSPECIFIED;
return CHORD_COLON;
}
\/\+ {
+ yylval = SCM_UNSPECIFIED;
return CHORD_BASS;
}
\/ {
+ yylval = SCM_UNSPECIFIED;
return CHORD_SLASH;
}
\^ {
+ yylval = SCM_UNSPECIFIED;
return CHORD_CARET;
}
. {
+ yylval = SCM_UNSPECIFIED;
return YYText ()[0]; // WORD catches all multibyte.
}
}
<markup>{
\\score {
+ yylval = SCM_UNSPECIFIED;
return SCORE;
}
{COMMAND}/[-_] | // backup rule
// in reverse order, so the first token pushed in the
// loop will be EXPECT_NO_MORE_ARGS.
- yylval.scm = scm_car(s);
+ yylval = scm_car(s);
// yylval now contains the function to call as token
// value (for token type MARKUP_FUNCTION or
}
return token_type;
}
- [{}] {
- return YYText ()[0];
- }
[^$#{}\"\\ \t\n\r\f]+ {
string s (YYText_utf8 ());
- char c = s[s.length () - 1];
- /* brace open is for not confusing dumb tools. */
- if (c == '{' || c == '}')
- here_input ().warning (
- _ ("Brace found at end of markup. Did you forget a space?"));
- yylval.scm = ly_string2scm (s);
-
-
+ yylval = ly_string2scm (s);
return STRING;
}
. {
- return YYText()[0]; // Above is catchall for multibyte
+ yylval = SCM_UNSPECIFIED;
+ return YYText ()[0]; // Above is catchall for multibyte
}
}
<longcomment><<EOF>> {
LexerError (_ ("EOF found inside a comment").c_str ());
is_main_input_ = false; // should be safe , can't have \include in --safe.
+ yylval = SCM_UNSPECIFIED;
if (!close_input ())
yyterminate (); // can't move this, since it actually rets a YY_NULL
}
-<<EOF>> { if (is_main_input_)
+<<EOF>> {
+ yylval = SCM_UNSPECIFIED;
+ if (is_main_input_)
{
- /* 2 = init.ly + current file.
- > because we're before closing, but is_main_input_ should
- reflect after.
- */
- is_main_input_ = include_stack_.size () > 2;
+ is_main_input_ = include_stack_.size () > main_input_level_;
+ if (!is_main_input_)
+ main_input_level_ = 0;
if (!close_input () || !is_main_input_)
/* Returns YY_NULL */
yyterminate ();
}
{FRACTION} {
- yylval.scm = scan_fraction (YYText ());
+ yylval = scan_fraction (YYText ());
return FRACTION;
}
-{UNSIGNED} | // backup rule
{REAL} {
- yylval.scm = scm_c_read_string (YYText ());
+ yylval = scm_c_read_string (YYText ());
return REAL;
}
{UNSIGNED}/\/ | // backup rule
{UNSIGNED} {
- yylval.scm = scm_c_read_string (YYText ());
+ yylval = scm_c_read_string (YYText ());
return UNSIGNED;
}
[{}] {
-
+ yylval = SCM_UNSPECIFIED;
return YYText ()[0];
}
-/\. | // backup rule
[*:=] {
- char c = YYText ()[0];
-
- return c;
+ yylval = SCM_UNSPECIFIED;
+ return YYText ()[0];
}
<INITIAL,notes,figures>. {
+ yylval = SCM_UNSPECIFIED;
return YYText ()[0];
}
<INITIAL,lyrics,notes,figures>\\. {
+ yylval = SCM_UNSPECIFIED;
char c = YYText ()[1];
switch (c) {
<*>.[\200-\277]* {
string msg = _f ("invalid character: `%s'", YYText_utf8 ());
LexerError (msg.c_str ());
+ yylval = SCM_UNSPECIFIED;
return '%'; // Better not return half a utf8 character.
}
int
Lily_lexer::identifier_type (SCM sid)
{
- int k = try_special_identifiers (&yylval.scm , sid);
+ int k = try_special_identifiers (&yylval , sid);
return k >= 0 ? k : SCM_IDENTIFIER;
}
// SCM sym = ly_symbol2scm (str.c_str ());
+ yylval = SCM_UNSPECIFIED;
int i = lookup_keyword (str);
if (i == MARKUP && is_lyric_state ())
return LYRIC_MARKUP;
string msg (_f ("unknown escaped string: `\\%s'", str));
LexerError (msg.c_str ());
- yylval.scm = ly_string2scm (str);
+ yylval = ly_string2scm (str);
return STRING;
}
{
int funtype = SCM_FUNCTION;
- yylval.scm = sid;
+ yylval = sid;
SCM s = get_music_function_signature (sid);
SCM cs = scm_car (s);
}
return funtype;
}
- yylval.scm = sid;
+ yylval = sid;
return identifier_type (sid);
}
handle = scm_hashq_get_handle (scm_cdar (pitchname_tab_stack_), sym);
if (scm_is_pair (handle)) {
- yylval.scm = scm_cdr (handle);
- if (unsmob_pitch (yylval.scm))
+ yylval = scm_cdr (handle);
+ if (unsmob_pitch (yylval))
return (YYSTATE == notes) ? NOTENAME_PITCH : TONICNAME_PITCH;
- else if (scm_is_symbol (yylval.scm))
+ else if (scm_is_symbol (yylval))
return DRUM_PITCH;
}
else if ((YYSTATE == chords)
&& (handle = scm_hashq_get_handle (chordmodifier_tab_, sym))!= SCM_BOOL_F)
{
- yylval.scm = scm_cdr (handle);
+ yylval = scm_cdr (handle);
return CHORD_MODIFIER;
}
}
- yylval.scm = ly_string2scm (str);
+ yylval = ly_string2scm (str);
return STRING;
}
switch (extra_token) {
case '$':
token = scan_scm_id (scm_car (v));
- if (!scm_is_eq (yylval.scm, SCM_UNSPECIFIED))
- push_extra_token (token, yylval.scm);
+ if (!scm_is_eq (yylval, SCM_UNSPECIFIED))
+ push_extra_token (token, yylval);
break;
case '#':
push_extra_token (SCM_IDENTIFIER, scm_car (v));
scopes_ = SCM_EOL;
error_level_ = 0;
is_main_input_ = false;
+ main_input_level_ = 0;
start_module_ = SCM_EOL;
extra_tokens_ = SCM_EOL;
smobify_self ();
error_level_ = 0;
is_main_input_ = src.is_main_input_;
+ main_input_level_ = 0;
extra_tokens_ = SCM_EOL;
OUT_FILE (unless IN_FILE redefines output file name). */
SCM mod = lexer_->set_current_scope ();
- do {
- do_yyparse ();
- } while (!lexer_->is_clean ());
+ do
+ {
+ do_yyparse ();
+ }
+ while (!lexer_->is_clean ());
/*
Don't mix cyclic pointers with weak tables.
Lily_parser::parse_string (string ly_code)
{
lexer_->main_input_name_ = "<string>";
- lexer_->is_main_input_ = true;
lexer_->new_input (lexer_->main_input_name_, ly_code, sources_);
SCM mod = lexer_->set_current_scope ();
int line)
{
lexer_->main_input_name_ = filename;
- lexer_->is_main_input_ = true;
lexer_->new_input (lexer_->main_input_name_, ly_code, sources_);
if (line)
{
SCM parser = lexer_->lookup_identifier_symbol (ly_symbol2scm ("parser"));
lexer_->set_identifier (ly_symbol2scm ("parser"), self_scm ());
lexer_->push_extra_token (EMBEDDED_LILY);
- do_yyparse ();
- SCM result = lexer_->lookup_identifier_symbol (ly_symbol2scm ("parseStringResult"));
- // parseStringResult is set in the grammar rule for embedded_lilypond
+ SCM result = do_yyparse ();
lexer_->set_identifier (ly_symbol2scm ("parser"), parser);
scm_set_current_module (mod);
}
Offset adjust = dz.direction () * Staff_symbol_referencer::staff_space (me);
-
Offset line_left = span_points[LEFT] + (arrows[LEFT] ? adjust * 1.4 : Offset (0, 0));
Offset line_right = span_points[RIGHT] - (arrows[RIGHT] ? adjust * 0.55 : Offset (0, 0));
+
if (line_right[X_AXIS] > line_left[X_AXIS])
{
line.add_stencil (Line_interface::line (me, line_left, line_right));
#include "line-interface.hh"
#include "warn.hh"
+#include "international.hh"
#include "dimensions.hh"
#include "bezier.hh"
#include "file-path.hh"
Stencil
Lookup::round_filled_box (Box b, Real blotdiameter)
{
- if (b.x ().length () < blotdiameter)
- blotdiameter = b.x ().length ();
- if (b.y ().length () < blotdiameter)
- blotdiameter = b.y ().length ();
+ Real width = b.x ().delta ();
+ blotdiameter = min (blotdiameter, width);
+ Real height = b.y ().delta ();
+ blotdiameter = min (blotdiameter, height);
+
+ if (blotdiameter < 0.0)
+ {
+ if (!isinf (blotdiameter))
+ warning (_f ("Not drawing a box with negative dimension, %.2f by %.2f.",
+ width, height));
+ return Stencil (b, SCM_EOL);
+ }
SCM at = (scm_list_n (ly_symbol2scm ("round-filled-box"),
scm_from_double (-b[X_AXIS][LEFT]),
if (music_context_)
{
music_context_->event_source ()->
- remove_listener (GET_LISTENER (set_busy), ly_symbol2scm ("music-event"));
+ remove_listener (GET_LISTENER (set_busy), ly_symbol2scm ("rhythmic-event"));
}
music_context_ = to;
if (to)
{
to->event_source ()->add_listener (GET_LISTENER (set_busy),
- ly_symbol2scm ("music-event"));
+ ly_symbol2scm ("rhythmic-event"));
}
}
#include "version.hh"
#include "warn.hh"
-/*
- * Global options that can be overridden through command line.
- */
-
-/* Names of header fields to be dumped to a separate file. */
-vector<string> dump_header_fieldnames_global;
-
-/* Name of initialisation file. */
-string init_name_global;
-
-/* Output formats to generate. */
-string output_format_global = "";
-
-/* Current output name. */
-string output_name_global;
-
-/* Run in safe mode? */
-bool be_safe_global = false;
-
-/* Scheme code to execute before parsing, after .scm init.
- This is where -e arguments are appended to. */
-string init_scheme_code_global;
-string init_scheme_variables_global;
-
-bool relocate_binary = true;
-
-/*
- * Miscellaneous global stuff.
- */
-File_path global_path;
-
/*
* File globals.
*/
"the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
"Boston, MA 02111-1307, USA.\n");
-/* Where the init files live. Typically:
- LILYPOND_DATADIR = /usr/share/lilypond
-*/
-string lilypond_datadir;
-
/* The jail specification: USER, GROUP, JAIL, DIR. */
-string jail_spec;
+static string jail_spec;
/* The option parser */
static Getopt_long *option_parser = 0;
"104857600", overwrite);
}
-vector<string> start_environment_global;
-
int
main (int argc, char **argv, char **envp)
{
protected:
virtual Spanner *create_ligature_spanner ();
- virtual void build_ligature (Spanner *ligature, vector<Grob_info> primitives);
+ virtual void build_ligature (Spanner *ligature,
+ vector<Grob_info> const &primitives);
DECLARE_TRANSLATOR_LISTENER (ligature);
public:
TRANSLATOR_DECLARATIONS (Mensural_ligature_engraver);
private:
- void transform_heads (vector<Grob_info> primitives);
- void propagate_properties (Spanner *ligature, vector<Grob_info> primitives);
- void fold_up_primitives (vector<Grob_info> primitives);
+ void transform_heads (vector<Grob_info> const &primitives);
+ void propagate_properties (Spanner *ligature,
+ vector<Grob_info> const &primitives,
+ Real &min_length);
+ void fold_up_primitives (vector<Grob_info> const &primitives,
+ Real &min_length);
};
IMPLEMENT_TRANSLATOR_LISTENER (Mensural_ligature_engraver, ligature);
}
void
-Mensural_ligature_engraver::transform_heads (vector<Grob_info> primitives)
+Mensural_ligature_engraver::transform_heads (vector<Grob_info> const &primitives)
{
if (primitives.size () < 2)
{
*/
void
Mensural_ligature_engraver::propagate_properties (Spanner *ligature,
- vector<Grob_info> primitives)
+ vector<Grob_info> const &primitives,
+ Real &min_length)
{
Real thickness
= robust_scm2double (ligature->get_property ("thickness"), 1.3);
= Font_interface::get_default_font (ligature)->
find_by_name ("noteheads.sM3ligmensural").extent (X_AXIS).length ();
+ min_length = 0.0;
Item *prev_primitive = NULL;
for (vsize i = 0; i < primitives.size (); i++)
{
{
case MLP_BREVIS:
case MLP_LONGA:
+ min_length += head_width;
primitive->set_property ("head-width", scm_from_double (head_width));
break;
case MLP_MAXIMA:
+ min_length += maxima_head_width;
primitive->set_property ("head-width",
scm_from_double (maxima_head_width));
break;
{
SCM flexa_scm = primitive->get_property ("flexa-width");
Real const flexa_width = robust_scm2double (flexa_scm, 2.0);
+ min_length += flexa_width + thickness;
SCM head_width = scm_from_double (0.5 * (flexa_width + thickness));
primitive->set_property ("head-width", head_width);
prev_primitive->set_property ("head-width", head_width);
}
void
-Mensural_ligature_engraver::fold_up_primitives (vector<Grob_info> primitives)
+Mensural_ligature_engraver::fold_up_primitives (vector<Grob_info> const &primitives,
+ Real &min_length)
{
Item *first = 0;
Real distance = 0.0;
Real head_width = scm_to_double (current->get_property ("head-width"));
distance += head_width - thickness;
- if (Rhythmic_head::dot_count (current) > 0)
+ if (size_t const dot_count = Rhythmic_head::dot_count (current))
/*
Move dots above/behind the ligature.
dots should also avoid staff lines.
else if (delta == 1 || delta == -1)
vert_shift -= delta * staff_space;
}
+ else
+ min_length += head_width * dot_count;
dot_gr->translate_axis (vert_shift, Y_AXIS);
void
Mensural_ligature_engraver::build_ligature (Spanner *ligature,
- vector<Grob_info> primitives)
+ vector<Grob_info> const &primitives)
{
+ /*
+ the X extent of the actual graphics representing the ligature;
+ less space than that means collision
+ */
+ Real min_length;
+
transform_heads (primitives);
- propagate_properties (ligature, primitives);
- fold_up_primitives (primitives);
+ propagate_properties (ligature, primitives, min_length);
+ fold_up_primitives (primitives, min_length);
+
+ if (robust_scm2double (ligature->get_property ("minimum-length"), 0.0)
+ < min_length)
+ ligature->set_property ("minimum-length", scm_from_double (min_length));
}
ADD_ACKNOWLEDGER (Mensural_ligature_engraver, rest);
along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <complex>
+
#include "misc.hh"
+#include "offset.hh"
#include "warn.hh"
/*
return result;
}
+
+Offset
+get_point_in_y_direction (Offset orig, Real slope, Real dist, Direction dir)
+{
+ if (slope == infinity_f)
+ return orig + Offset (dir * dist, 0.0);
+
+ Real x = slope == 0.0 ? 1.0 * dir : 1.0 * sign (slope) * dir;
+ Real y = slope * x;
+ Real angle = atan2 (y, x);
+
+ complex<Real> orig_c (orig[X_AXIS], orig[Y_AXIS]);
+ complex<Real> to_move = polar (dist, angle);
+ complex<Real> res = orig_c + to_move;
+
+ return Offset (real (res), imag (res));
+}
\ No newline at end of file
return b;
}
+Real
+Modified_font_metric::get_magnification () const
+{
+ return magnification_;
+}
+
vsize
Modified_font_metric::count () const
{
along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "ly-module.hh"
-
+#include "ly-module.hh" // pulls in lily-guile.hh and guile-compatibility.hh
#include "warn.hh"
#include "main.hh"
#include "std-string.hh"
return SCM_UNSPECIFIED;
}
-/* Lookup SYM, but don't give error when it is not defined. */
+
+
+/* Lookup SYM, but don't give error when it is not defined.
+ N.B. this is only needed when running with Guile versions
+ prior to V2.0.3, when calls to ly_module_lookup can be replaced
+ with direct calls to the Guile API scm_module_variable in the
+ LilyPond codebase.
+*/
SCM
ly_module_lookup (SCM module, SCM sym)
{
#define FUNC_NAME __FUNCTION__
SCM_VALIDATE_MODULE (1, module);
-
+/*
+ Issue 2758:
+ Guile V2 onward has a scm_module_variable API module.
+ Guile V1.8.7 only has a (module-variable) REPL function, however
+ using ly_lily_module_constant ("module-variable") and calling
+ the memoized result is slow.
+ */
+#if GUILEV1
return scm_sym2var (sym, scm_module_lookup_closure (module), SCM_BOOL_F);
+#else
+ return scm_module_variable (module, sym);
+#endif
#undef FUNC_NAME
}
/* If possible, don't wipe any heads. Else, wipe shortest head,
or head with smallest amount of dots. Note: when merging
- different heads, dots on the smaller one disappear. */
+ different heads, dots on the smaller one disappear; and when
+ merging identical heads, dots on the down-stem head disappear */
Grob *wipe_ball = 0;
Grob *dot_wipe_head = head_up;
wipe_ball = head_up;
}
else
- dot_wipe_head = head_up;
+ dot_wipe_head = head_down;
}
else if (down_ball_type > up_ball_type)
{
Axis_group_interface::add_element (me, ncol);
}
+vector<int>
+Note_collision_interface::note_head_positions (Grob *me)
+{
+ vector<int> out;
+ extract_grob_set (me, "elements", elts);
+ for (vsize i = 0; i < elts.size (); i++)
+ 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 ());
+ }
+
+ vector_sort (out, less<int> ());
+ return out;
+}
+
ADD_INTERFACE (Note_collision_interface,
"An object that handles collisions between notes with"
" different stem directions and horizontal shifts. Most of"
annoying layer between (rest)collision & (note-head + stem)
*/
+Interval
+Note_column::accidental_width (Grob *me)
+{
+ extract_grob_set (me, "note-heads", nhs);
+ vector<Grob *> accs;
+ for (vsize i = 0; i < nhs.size (); i++)
+ if (Grob *acc = unsmob_grob (nhs[i]->get_object ("accidental-grob")))
+ accs.push_back (acc);
+
+ Grob *common = common_refpoint_of_array (accs, me, X_AXIS);
+ common = common_refpoint_of_array (nhs, common, X_AXIS);
+
+ Interval nhs_ex = Axis_group_interface::relative_group_extent (nhs, common, X_AXIS);
+ Interval accs_ex = Axis_group_interface::relative_group_extent (accs, common, X_AXIS);
+
+ if (nhs_ex.is_empty ())
+ return accs_ex;
+
+ // want an empty interval here
+ if (accs_ex.is_empty ())
+ return Interval ();
+
+ return Interval (accs_ex[LEFT], nhs_ex[LEFT]);
+}
+
bool
Note_column::has_rests (Grob *me)
{
adjust things so there are no collisions.
*/
Drul_array<Skyline> skys = Spacing_interface::skylines (me, right_col);
- Real distance = skys[LEFT].distance (skys[RIGHT]);
+ Real distance = skys[LEFT].distance (skys[RIGHT], robust_scm2double (right_col->get_property ("skyline-vertical-padding"), 0.0));
Real min_dist = max (0.0, distance);
Real min_desired_space = left_head_end + (min_dist - left_head_end + base_space - increment) / 2;
Real ideal = base_space - increment + left_head_end;
#include <freetype/tttables.h>
#include "dimensions.hh"
+#include "freetype.hh"
#include "international.hh"
#include "modified-font-metric.hh"
#include "warn.hh"
}
}
- FT_UInt idx = FT_UInt (signed_idx);
- FT_Load_Glyph (face_, idx, FT_LOAD_NO_SCALE);
-
- FT_Glyph_Metrics m = face_->glyph->metrics;
- FT_Pos hb = m.horiBearingX;
- FT_Pos vb = m.horiBearingY;
- Box b (Interval (Real (-hb), Real (m.width - hb)),
- Interval (Real (-vb), Real (m.height - vb)));
+ Box b = get_unscaled_indexed_char_dimensions (signed_idx);
b.scale (design_size () / Real (face_->units_per_EM));
return b;
}
+Real
+Open_type_font::get_units_per_EM () const
+{
+ return face_->units_per_EM;
+}
+
size_t
Open_type_font::name_to_index (string nm) const
{
return (size_t) - 1;
}
+Box
+Open_type_font::get_unscaled_indexed_char_dimensions (size_t signed_idx) const
+{
+ return ly_FT_get_unscaled_indexed_char_dimensions (face_, signed_idx);
+}
+
+Box
+Open_type_font::get_glyph_outline_bbox (size_t signed_idx) const
+{
+ return ly_FT_get_glyph_outline_bbox (face_, signed_idx);
+}
+
+SCM
+Open_type_font::get_glyph_outline (size_t signed_idx) const
+{
+ return ly_FT_get_glyph_outline (face_, signed_idx);
+}
+
size_t
Open_type_font::index_to_charcode (size_t i) const
{
best = space_systems_on_best_pages (0, first_page_num);
page_count = best.systems_per_page_.size ();
- min_sys_count = ideal_sys_count - best.systems_per_page_.back ();
+ if (page_count == 0)
+ {
+ min_sys_count = 0;
+ }
+ else
+ {
+ min_sys_count = ideal_sys_count - best.systems_per_page_.back ();
- if (page_count > 1 && best.systems_per_page_[page_count - 2] > 1)
- min_sys_count -= best.systems_per_page_[page_count - 2];
+ if (page_count > 1 && best.systems_per_page_[page_count - 2] > 1)
+ min_sys_count -= best.systems_per_page_[page_count - 2];
- min_sys_count = max (min_sys_count, (vsize)1);
+ min_sys_count = max (min_sys_count, (vsize)1);
+ }
}
else
{
if (page_count == 1)
message (_ ("Fitting music on 1 page..."));
- else if (scm_is_integer (forced_page_count))
+ else if (scm_is_integer (forced_page_count) || page_count == 0)
message (_f ("Fitting music on %d pages...", (int)page_count));
else
message (_f ("Fitting music on %d or %d pages...", (int)page_count - 1, (int)page_count));
// This means that we won't cache properly if page_num is negative or
// if calc_height returns a negative number. But that's likely to
// be rare, so it shouldn't affect performance.
- vector<Real>& cache = last ? last_page_height_cache_ : page_height_cache_;
+ vector<Real> &cache = last ? last_page_height_cache_ : page_height_cache_;
if (page_num >= 0 && (int) cache.size () > page_num && cache[page_num] >= 0)
return cache[page_num];
else
SCM penalty_sym;
if (is_last ())
- penalty_sym = ly_symbol2scm ("blank-last-page-force");
+ penalty_sym = ly_symbol2scm ("blank-last-page-penalty");
else if (ends_score ())
- penalty_sym = ly_symbol2scm ("blank-after-score-page-force");
+ penalty_sym = ly_symbol2scm ("blank-after-score-page-penalty");
else
- penalty_sym = ly_symbol2scm ("blank-page-force");
+ penalty_sym = ly_symbol2scm ("blank-page-penalty");
Break_position const &pos = breaks_[current_end_breakpoint_];
if (Paper_score *ps = system_specs_[pos.system_spec_index_].pscore_)
void
Page_layout_problem::append_system (System *sys, Spring const &spring, Real indent, Real padding)
{
- Grob *align = sys->get_vertical_alignment ();
+ Grob *align = unsmob_grob (sys->get_object ("vertical-alignment"));
if (!align)
return;
}
Page_spacing_result ret;
+ if (simple_state_.empty ())
+ return ret;
+
ret.penalty_ = simple_state_.back ().penalty_
+ lines_.back ().page_penalty_ + lines_.back ().turn_penalty_;
ret.system_count_status_ = simple_state_.back ().system_count_status_;
scm_from_int (face_index)));
}
+size_t
+Pango_font::name_to_index (string nm) const
+{
+ PangoFcFont *fcfont = PANGO_FC_FONT (pango_context_load_font (context_, pango_description_));
+ FT_Face face = pango_fc_font_lock_face (fcfont);
+ char *nm_str = (char *) nm.c_str ();
+ if (FT_UInt idx = FT_Get_Name_Index (face, nm_str))
+ {
+ pango_fc_font_unlock_face (fcfont);
+ return (size_t) idx;
+ }
+
+ pango_fc_font_unlock_face (fcfont);
+ return (size_t) - 1;
+}
+
void
Pango_font::derived_mark () const
{
sprintf (s, "uni%04lX", code);
}
+Box
+Pango_font::get_unscaled_indexed_char_dimensions (size_t signed_idx) const
+{
+ PangoFcFont *fcfont = PANGO_FC_FONT (pango_context_load_font (context_, pango_description_));
+ FT_Face face = pango_fc_font_lock_face (fcfont);
+ Box b = ly_FT_get_unscaled_indexed_char_dimensions (face, signed_idx);
+ pango_fc_font_unlock_face (fcfont);
+ return b;
+}
+
+Box
+Pango_font::get_scaled_indexed_char_dimensions (size_t signed_idx) const
+{
+ PangoFont *font = pango_context_load_font (context_, pango_description_);
+ PangoRectangle logical_rect;
+ PangoRectangle ink_rect;
+ pango_font_get_glyph_extents (font, signed_idx, &ink_rect, &logical_rect);
+ Box out (Interval (PANGO_LBEARING (ink_rect),
+ PANGO_RBEARING (ink_rect)),
+ Interval (-PANGO_DESCENT (ink_rect),
+ PANGO_ASCENT (ink_rect)));
+ out.scale (scale_);
+ return out;
+}
+
+Box
+Pango_font::get_glyph_outline_bbox (size_t signed_idx) const
+{
+ PangoFcFont *fcfont = PANGO_FC_FONT (pango_context_load_font (context_, pango_description_));
+ FT_Face face = pango_fc_font_lock_face (fcfont);
+ Box b = ly_FT_get_glyph_outline_bbox (face, signed_idx);
+ pango_fc_font_unlock_face (fcfont);
+ return b;
+}
+
+SCM
+Pango_font::get_glyph_outline (size_t signed_idx) const
+{
+ PangoFcFont *fcfont = PANGO_FC_FONT (pango_context_load_font (context_, pango_description_));
+ FT_Face face = pango_fc_font_lock_face (fcfont);
+ SCM s = ly_FT_get_glyph_outline (face, signed_idx);
+ pango_fc_font_unlock_face (fcfont);
+ return s;
+}
+
Stencil
Pango_font::pango_item_string_stencil (PangoGlyphItem const *glyph_item) const
{
pango_glyph_string_extents (pgs, pa->font, &ink_rect, &logical_rect);
PangoFcFont *fcfont = PANGO_FC_FONT (pa->font);
-
FT_Face ftface = pango_fc_font_lock_face (fcfont);
Box b (Interval (PANGO_LBEARING (logical_rect),
else
char_id = scm_from_locale_string (glyph_name);
- *tail = scm_cons (scm_list_4 (scm_from_double (ggeo.width * scale_),
+ PangoRectangle logical_sub_rect;
+ PangoRectangle ink_sub_rect;
+
+ pango_glyph_string_extents_range (pgs, i, i + 1, pa->font, &ink_sub_rect, &logical_sub_rect);
+ Box b_sub (Interval (PANGO_LBEARING (logical_sub_rect),
+ PANGO_RBEARING (logical_sub_rect)),
+ Interval (-PANGO_DESCENT (ink_sub_rect),
+ PANGO_ASCENT (ink_sub_rect)));
+
+ b_sub.scale (scale_);
+
+ *tail = scm_cons (scm_list_5 (scm_from_double (b_sub[X_AXIS][RIGHT] - b_sub[X_AXIS][LEFT]),
+ scm_cons (scm_from_double (b_sub[Y_AXIS][DOWN]),
+ scm_from_double (b_sub[Y_AXIS][UP])),
scm_from_double (ggeo.x_offset * scale_),
scm_from_double (- ggeo.y_offset * scale_),
char_id),
((Pango_font *) this)->register_font_file (file_name,
ps_name,
face_index);
- pango_fc_font_unlock_face (fcfont);
- SCM expr = scm_list_5 (ly_symbol2scm ("glyph-string"),
+ SCM expr = scm_list_n (ly_symbol2scm ("glyph-string"),
+ self_scm (),
ly_string2scm (ps_name),
scm_from_double (size),
scm_from_bool (cid_keyed),
- ly_quote_scm (glyph_exprs));
+ ly_quote_scm (glyph_exprs),
+ SCM_UNDEFINED);
return Stencil (b, expr);
}
#include "lookup.hh"
#include "lookup.hh"
#include "moment.hh"
+#include "note-head.hh"
#include "output-def.hh"
#include "paper-score.hh"
#include "pointer-group-interface.hh"
return align->extent (p, X_AXIS);
}
+
/*
Print a vertical line and the rank number, to aid debugging.
*/
-/* -*- mode: c++; c-file-style: "linux" -*- */
+/* -*- mode: c++; c-file-style: "linux"; indent-tabs-mode: t -*- */
/*
This file is part of LilyPond, the GNU music typesetter.
/* We use custom location type: Input objects */
#define YYLTYPE Input
+#define YYSTYPE SCM
#define YYLLOC_DEFAULT(Current,Rhs,N) \
((Current).set_location ((Rhs)[1], (Rhs)[N]))
+#define YYPRINT(file, type, value) \
+ do { \
+ if (scm_is_eq (value, SCM_UNSPECIFIED)) \
+ break; \
+ char *p = scm_to_locale_string \
+ (scm_simple_format (SCM_BOOL_F, \
+ scm_from_locale_string ("~S"), \
+ scm_list_1 (value))); \
+ fputs (p, file); \
+ free (p); \
+ } while (0)
%}
%parse-param {Lily_parser *parser}
+%parse-param {SCM *retval}
%lex-param {Lily_parser *parser}
%error-verbose
%debug
#include "warn.hh"
void
-Lily_parser::parser_error (Input const *i, Lily_parser *parser, string s)
+Lily_parser::parser_error (Input const *i, Lily_parser *parser, SCM *, string s)
{
parser->parser_error (*i, s);
}
%}
-%union {
- Book *book;
- Output_def *outputdef;
- SCM scm;
- std::string *string;
- Score *score;
- int i;
-}
-
%{
#define MY_MAKE_MUSIC(x, spot) make_music_with_input (ly_symbol2scm (x), spot)
static Music *make_music_with_input (SCM name, Input where);
SCM check_scheme_arg (Lily_parser *parser, Input loc,
- SCM arg, SCM args, SCM pred);
+ SCM arg, SCM args, SCM pred, SCM disp = SCM_UNDEFINED);
+SCM make_music_from_simple (Lily_parser *parser, Input loc, SCM pitch);
SCM loc_on_music (Input loc, SCM arg);
SCM make_chord_elements (Input loc, SCM pitch, SCM dur, SCM modification_list);
-SCM make_chord_step (int step, Rational alter);
+SCM make_chord_step (SCM step, Rational alter);
SCM make_simple_markup (SCM a);
bool is_duration (int t);
-bool is_regular_identifier (SCM id);
+bool is_regular_identifier (SCM id, bool multiple=false);
+SCM try_string_variants (SCM pred, SCM str);
int yylex (YYSTYPE *s, YYLTYPE *loc, Lily_parser *parser);
-void set_music_properties (Music *p, SCM a);
%}
%token MULTI_MEASURE_REST
-%token <i> E_UNSIGNED
-%token <scm> UNSIGNED
+%token E_UNSIGNED
+%token UNSIGNED
/* Artificial tokens, for more generic function syntax */
-%token <i> EXPECT_MARKUP "markup?"
-%token <i> EXPECT_PITCH "ly:pitch?"
-%token <i> EXPECT_DURATION "ly:duration?"
-%token <scm> EXPECT_SCM "scheme?"
-%token <scm> BACKUP "(backed-up?)"
-%token <scm> REPARSE "(reparsed?)"
-%token <i> EXPECT_MARKUP_LIST "markup-list?"
-%token <scm> EXPECT_OPTIONAL "optional?"
+%token EXPECT_MARKUP "markup?"
+%token EXPECT_PITCH "ly:pitch?"
+%token EXPECT_DURATION "ly:duration?"
+%token EXPECT_SCM "scheme?"
+%token BACKUP "(backed-up?)"
+%token REPARSE "(reparsed?)"
+%token EXPECT_MARKUP_LIST "markup-list?"
+%token EXPECT_OPTIONAL "optional?"
/* After the last argument. */
-%token <i> EXPECT_NO_MORE_ARGS;
+%token EXPECT_NO_MORE_ARGS;
/* An artificial token for parsing embedded Lilypond */
-%token <i> EMBEDDED_LILY "#{"
-
-%token <scm> BOOK_IDENTIFIER
-%token <scm> CHORDMODIFIER_PITCH
-%token <scm> CHORD_MODIFIER
-%token <scm> CHORD_REPETITION
-%token <scm> CONTEXT_DEF_IDENTIFIER
-%token <scm> CONTEXT_MOD_IDENTIFIER
-%token <scm> DRUM_PITCH
-%token <scm> PITCH_IDENTIFIER
-%token <scm> DURATION_IDENTIFIER
-%token <scm> EVENT_IDENTIFIER
-%token <scm> EVENT_FUNCTION
-%token <scm> FRACTION
-%token <scm> LYRICS_STRING
-%token <scm> LYRIC_ELEMENT
-%token <scm> LYRIC_MARKUP_IDENTIFIER
-%token <scm> MARKUP_FUNCTION
-%token <scm> MARKUP_LIST_FUNCTION
-%token <scm> MARKUP_IDENTIFIER
-%token <scm> MARKUPLIST_IDENTIFIER
-%token <scm> MUSIC_FUNCTION
-%token <scm> MUSIC_IDENTIFIER
-%token <scm> NOTENAME_PITCH
-%token <scm> NUMBER_IDENTIFIER
-%token <scm> OUTPUT_DEF_IDENTIFIER
-%token <scm> REAL
-%token <scm> RESTNAME
-%token <scm> SCM_FUNCTION
-%token <scm> SCM_IDENTIFIER
-%token <scm> SCM_TOKEN
-%token <scm> SCORE_IDENTIFIER
-%token <scm> STRING
-%token <scm> STRING_IDENTIFIER
-%token <scm> TONICNAME_PITCH
-
-
-%type <book> book_block
-%type <book> book_body
-%type <book> bookpart_block
-%type <book> bookpart_body
-
-%type <i> bare_unsigned
-%type <scm> figured_bass_alteration
-%type <i> dots
-%type <i> exclamations
-%type <i> optional_rest
-%type <i> questions
-%type <i> script_dir
-%type <i> sub_quotes
-%type <i> sup_quotes
-%type <i> tremolo_type
-
-/* Music */
-%type <scm> composite_music
-%type <scm> grouped_music_list
-%type <scm> braced_music_list
-%type <scm> closed_music
-%type <scm> music
-%type <scm> music_bare
-%type <scm> music_arg
-%type <scm> music_assign
-%type <scm> music_embedded
-%type <scm> music_or_context_def
-%type <scm> complex_music
-%type <scm> complex_music_prefix
-%type <scm> mode_changed_music
-%type <scm> repeated_music
-%type <scm> sequential_music
-%type <scm> simple_music
-%type <scm> simultaneous_music
-%type <scm> chord_body
-%type <scm> chord_body_element
-%type <scm> command_element
-%type <scm> command_event
-%type <scm> context_modification
-%type <scm> context_change
-%type <scm> direction_less_event
-%type <scm> direction_reqd_event
-%type <scm> embedded_lilypond
-%type <scm> event_chord
-%type <scm> fingering
-%type <scm> gen_text_def
-%type <scm> music_property_def
-%type <scm> note_chord_element
-%type <scm> post_event
-%type <scm> post_event_nofinger
-%type <scm> re_rhythmed_music
-%type <scm> simple_element
-%type <scm> simple_music_property_def
-%type <scm> start_symbol
-%type <scm> string_number_event
-%type <scm> tempo_event
-
-%type <outputdef> output_def_body
-%type <outputdef> output_def_head
-%type <outputdef> output_def_head_with_mode_switch
-%type <outputdef> output_def
-%type <outputdef> paper_block
-
-%type <scm> music_function_call
-%type <scm> music_list
-%type <scm> assignment_id
-%type <scm> bare_number
-%type <scm> bare_number_closed
-%type <scm> unsigned_number
-%type <scm> bass_figure
-%type <scm> figured_bass_modification
-%type <scm> br_bass_figure
-%type <scm> bass_number
-%type <scm> chord_body_elements
-%type <scm> chord_item
-%type <scm> chord_items
-%type <scm> chord_separator
-%type <scm> context_def_mod
-%type <scm> context_def_spec_block
-%type <scm> context_def_spec_body
-%type <scm> context_mod
-%type <scm> context_mod_arg
-%type <scm> context_mod_embedded
-%type <scm> context_mod_list
-%type <scm> context_prop_spec
-%type <scm> direction_less_char
-%type <scm> duration_length
-%type <scm> embedded_scm
-%type <scm> embedded_scm_arg
-%type <scm> embedded_scm_arg_closed
-%type <scm> embedded_scm_bare
-%type <scm> embedded_scm_bare_arg
-%type <scm> embedded_scm_closed
-%type <scm> event_function_event
-%type <scm> figure_list
-%type <scm> figure_spec
-%type <scm> full_markup
-%type <scm> full_markup_list
-%type <scm> function_arglist
-%type <scm> function_arglist_optional
-%type <scm> function_arglist_backup
-%type <scm> function_arglist_nonbackup
-%type <scm> function_arglist_nonbackup_common
-%type <scm> function_arglist_closed_nonbackup
-%type <scm> function_arglist_skip
-%type <scm> function_arglist_bare
-%type <scm> function_arglist_closed
-%type <scm> function_arglist_closed_optional
-%type <scm> function_arglist_common
-%type <scm> function_arglist_common_lyric
-%type <scm> function_arglist_common_minus
-%type <scm> function_arglist_closed_common
-%type <scm> function_arglist_keep
-%type <scm> function_arglist_closed_keep
-%type <scm> identifier_init
-%type <scm> lilypond
-%type <scm> lilypond_header
-%type <scm> lyric_element
-%type <scm> lyric_element_arg
-%type <scm> lyric_element_music
-%type <scm> lyric_markup
-%type <scm> markup
-%type <scm> markup_braced_list
-%type <scm> markup_braced_list_body
-%type <scm> markup_composed_list
-%type <scm> markup_command_list
-%type <scm> markup_command_list_arguments
-%type <scm> markup_command_basic_arguments
-%type <scm> markup_head_1_item
-%type <scm> markup_head_1_list
-%type <scm> markup_list
-%type <scm> markup_top
-%type <scm> maybe_notemode_duration
-%type <scm> mode_changing_head
-%type <scm> mode_changing_head_with_context
-%type <scm> multiplied_duration
-%type <scm> music_function_call_closed
-%type <scm> music_function_chord_body
-%type <scm> new_chord
-%type <scm> new_lyrics
-%type <scm> number_expression
-%type <scm> number_factor
-%type <scm> number_term
-%type <scm> octave_check
-%type <scm> optional_context_mod
-%type <scm> optional_id
-%type <scm> optional_notemode_duration
-%type <scm> pitch
-%type <scm> pitch_also_in_chords
-%type <scm> post_events
-%type <scm> property_operation
-%type <scm> property_path property_path_revved
-%type <scm> scalar
-%type <scm> scalar_closed
-%type <scm> scm_function_call
-%type <scm> scm_function_call_closed
-%type <scm> script_abbreviation
-%type <scm> simple_chord_elements
-%type <scm> simple_markup
-%type <scm> simple_string
-%type <scm> steno_duration
-%type <scm> steno_pitch
-%type <scm> steno_tonic_pitch
-%type <scm> step_number
-%type <scm> step_numbers
-%type <scm> string
-%type <scm> tempo_range
-
-%type <score> score_block
-%type <score> score_body
-
+%token EMBEDDED_LILY "#{"
+
+%token BOOK_IDENTIFIER
+%token CHORDMODIFIER_PITCH
+%token CHORD_MODIFIER
+%token CHORD_REPETITION
+%token CONTEXT_DEF_IDENTIFIER
+%token CONTEXT_MOD_IDENTIFIER
+%token DRUM_PITCH
+%token PITCH_IDENTIFIER
+%token DURATION_IDENTIFIER
+%token EVENT_IDENTIFIER
+%token EVENT_FUNCTION
+%token FRACTION
+%token LYRICS_STRING
+%token LYRIC_ELEMENT
+%token MARKUP_FUNCTION
+%token MARKUP_LIST_FUNCTION
+%token MARKUP_IDENTIFIER
+%token MARKUPLIST_IDENTIFIER
+%token MUSIC_FUNCTION
+%token MUSIC_IDENTIFIER
+%token NOTENAME_PITCH
+%token NUMBER_IDENTIFIER
+%token OUTPUT_DEF_IDENTIFIER
+%token REAL
+%token RESTNAME
+%token SCM_ARG
+%token SCM_FUNCTION
+%token SCM_IDENTIFIER
+%token SCM_TOKEN
+%token STRING
+%token SYMBOL_LIST
+%token TONICNAME_PITCH
%left '-' '+'
parser->lexer_->push_note_state (nn);
} embedded_lilypond {
parser->lexer_->pop_state ();
- parser->lexer_->set_identifier (ly_symbol2scm ("parseStringResult"), $3);
+ *retval = $3;
}
;
-lilypond: /* empty */ { }
+lilypond: /* empty */ { $$ = SCM_UNSPECIFIED; }
| lilypond toplevel_expression {
}
| lilypond assignment {
parser->lexer_->set_identifier (ly_symbol2scm ("$defaultheader"), $2);
}
| book_block {
- Book *book = $1;
SCM proc = parser->lexer_->lookup_identifier ("toplevel-book-handler");
- scm_call_2 (proc, parser->self_scm (), book->self_scm ());
- book->unprotect ();
+ scm_call_2 (proc, parser->self_scm (), $1);
}
| bookpart_block {
- Book *bookpart = $1;
SCM proc = parser->lexer_->lookup_identifier ("toplevel-bookpart-handler");
- scm_call_2 (proc, parser->self_scm (), bookpart->self_scm ());
- bookpart->unprotect ();
+ scm_call_2 (proc, parser->self_scm (), $1);
}
| score_block {
- Score *score = $1;
-
SCM proc = parser->lexer_->lookup_identifier ("toplevel-score-handler");
- scm_call_2 (proc, parser->self_scm (), score->self_scm ());
- score->unprotect ();
+ scm_call_2 (proc, parser->self_scm (), $1);
}
| composite_music {
- Music *music = unsmob_music ($1);
SCM proc = parser->lexer_->lookup_identifier ("toplevel-music-handler");
- scm_call_2 (proc, parser->self_scm (), music->self_scm ());
+ scm_call_2 (proc, parser->self_scm (), $1);
}
| full_markup {
SCM proc = parser->lexer_->lookup_identifier ("toplevel-text-handler");
SCM proc = parser->lexer_->lookup_identifier ("toplevel-text-handler");
scm_call_2 (proc, parser->self_scm (), $1);
}
+ | SCM_TOKEN {
+ // Evaluate and ignore #xxx, as opposed to \xxx
+ parser->lexer_->eval_scm_token ($1);
+ }
+ | embedded_scm_active
+ {
+ SCM out = SCM_UNDEFINED;
+ if (Text_interface::is_markup ($1))
+ out = scm_list_1 ($1);
+ else if (Text_interface::is_markup_list ($1))
+ out = $1;
+ if (scm_is_pair (out))
+ {
+ SCM proc = parser->lexer_->lookup_identifier ("toplevel-text-handler");
+ scm_call_2 (proc, parser->self_scm (), out);
+ } else if (!scm_is_eq ($1, SCM_UNSPECIFIED))
+ parser->parser_error (@1, _("bad expression type"));
+ }
| output_def {
SCM id = SCM_EOL;
- Output_def * od = $1;
+ Output_def * od = unsmob_output_def ($1);
- if ($1->c_variable ("is-paper") == SCM_BOOL_T)
+ if (od->c_variable ("is-paper") == SCM_BOOL_T)
id = ly_symbol2scm ("$defaultpaper");
- else if ($1->c_variable ("is-midi") == SCM_BOOL_T)
+ else if (od->c_variable ("is-midi") == SCM_BOOL_T)
id = ly_symbol2scm ("$defaultmidi");
- else if ($1->c_variable ("is-layout") == SCM_BOOL_T)
+ else if (od->c_variable ("is-layout") == SCM_BOOL_T)
id = ly_symbol2scm ("$defaultlayout");
- parser->lexer_->set_identifier (id, od->self_scm ());
- od->unprotect();
+ parser->lexer_->set_identifier (id, $1);
}
;
| SCM_IDENTIFIER
;
+embedded_scm_active:
+ SCM_IDENTIFIER
+ | scm_function_call
+ ;
+
embedded_scm_bare_arg:
- embedded_scm_bare
- | STRING
- | STRING_IDENTIFIER
+ SCM_ARG
+ | SCM_TOKEN
+ {
+ $$ = parser->lexer_->eval_scm_token ($1);
+ }
| full_markup
| full_markup_list
| context_modification
| score_block
- {
- $$ = $1->self_scm ();
- $1->unprotect ();
- }
| context_def_spec_block
| book_block
- {
- $$ = $1->self_scm ();
- $1->unprotect ();
- }
| bookpart_block
- {
- $$ = $1->self_scm ();
- $1->unprotect ();
- }
| output_def
- {
- $$ = $1->self_scm ();
- $1->unprotect ();
- }
;
/* The generic version may end in music, or not */
}
| error {
parser->error_level_ = 1;
+ $$ = SCM_UNSPECIFIED;
}
| INVALID embedded_lilypond {
parser->error_level_ = 1;
+ $$ = $2;
}
;
lilypond_header_body:
- /* empty */
+ /* empty */ { $$ = SCM_UNSPECIFIED; }
| lilypond_header_body assignment {
+ }
+ | lilypond_header_body embedded_scm {
+
}
;
assignment:
assignment_id '=' identifier_init {
parser->lexer_->set_identifier ($1, $3);
+ $$ = SCM_UNSPECIFIED;
}
| assignment_id property_path '=' identifier_init {
SCM path = scm_cons (scm_string_to_symbol ($1), $2);
parser->lexer_->set_identifier (path, $4);
- ;
-/*
- TODO: devise standard for protection in parser.
-
- The parser stack lives on the C-stack, which means that
-all objects can be unprotected as soon as they're here.
-
-*/
+ $$ = SCM_UNSPECIFIED;
}
- | embedded_scm { }
;
identifier_init:
- score_block {
- $$ = $1->self_scm ();
- $1->unprotect ();
- }
- | book_block {
- $$ = $1->self_scm ();
- $1->unprotect ();
- }
- | bookpart_block {
- $$ = $1->self_scm ();
- $1->unprotect ();
- }
- | output_def {
- $$ = $1->self_scm ();
- $1->unprotect ();
- }
- | context_def_spec_block {
- $$ = $1;
- }
- | music_assign {
- $$ = $1;
- }
- | post_event_nofinger {
- $$ = $1;
- }
- | number_expression {
- $$ = $1;
- }
- | FRACTION {
- $$ = $1;
- }
- | string {
- $$ = $1;
- }
- | embedded_scm {
- $$ = $1;
- }
- | full_markup {
- $$ = $1;
- }
- | full_markup_list {
- $$ = $1;
- }
- | context_modification {
- $$ = $1;
- }
+ score_block
+ | book_block
+ | bookpart_block
+ | output_def
+ | context_def_spec_block
+ | music_assign
+ | post_event_nofinger
+ | number_expression
+ | FRACTION
+ | string
+ | embedded_scm
+ | full_markup_list
+ | context_modification
;
context_def_spec_block:
unsmob_context_def ($$)->origin ()->set_spot (@$);
}
| context_def_spec_body context_mod {
- unsmob_context_def ($$)->add_context_mod ($2);
+ if (!SCM_UNBNDP ($2))
+ unsmob_context_def ($$)->add_context_mod ($2);
}
| context_def_spec_body context_modification {
Context_def *td = unsmob_context_def ($$);
* grok \layout and \midi? */
book_body:
{
- $$ = new Book;
+ Book *book = new Book;
init_papers (parser);
- $$->origin ()->set_spot (@$);
- $$->paper_ = dynamic_cast<Output_def*> (unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultpaper"))->clone ());
- $$->paper_->unprotect ();
- push_paper (parser, $$->paper_);
- $$->header_ = get_header (parser);
- parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $$->self_scm ());
+ book->origin ()->set_spot (@$);
+ 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);
+ $$ = book->unprotect ();
+ parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $$);
}
| BOOK_IDENTIFIER {
- $$ = unsmob_book ($1);
- $$->protect ();
- $$->origin ()->set_spot (@$);
+ unsmob_book ($1)->origin ()->set_spot (@$);
parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $1);
}
| book_body paper_block {
- $$->paper_ = $2;
- $2->unprotect ();
- set_paper (parser, $2);
+ unsmob_book ($1)->paper_ = unsmob_output_def ($2);
+ set_paper (parser, unsmob_output_def ($2));
}
| book_body bookpart_block {
- Book *bookpart = $2;
SCM proc = parser->lexer_->lookup_identifier ("book-bookpart-handler");
- scm_call_2 (proc, $$->self_scm (), bookpart->self_scm ());
- bookpart->unprotect ();
+ scm_call_2 (proc, $1, $2);
}
| book_body score_block {
- Score *score = $2;
SCM proc = parser->lexer_->lookup_identifier ("book-score-handler");
- scm_call_2 (proc, $$->self_scm (), score->self_scm ());
- score->unprotect ();
+ scm_call_2 (proc, $1, $2);
}
| book_body composite_music {
- Music *music = unsmob_music ($2);
SCM proc = parser->lexer_->lookup_identifier ("book-music-handler");
- scm_call_3 (proc, parser->self_scm (), $$->self_scm (), music->self_scm ());
+ scm_call_3 (proc, parser->self_scm (), $1, $2);
}
| book_body full_markup {
SCM proc = parser->lexer_->lookup_identifier ("book-text-handler");
- scm_call_2 (proc, $$->self_scm (), scm_list_1 ($2));
+ scm_call_2 (proc, $1, scm_list_1 ($2));
}
| book_body full_markup_list {
SCM proc = parser->lexer_->lookup_identifier ("book-text-handler");
- scm_call_2 (proc, $$->self_scm (), $2);
+ scm_call_2 (proc, $1, $2);
+ }
+ | book_body SCM_TOKEN {
+ // Evaluate and ignore #xxx, as opposed to \xxx
+ parser->lexer_->eval_scm_token ($2);
+ }
+ | book_body embedded_scm_active
+ {
+ SCM out = SCM_UNDEFINED;
+ if (Text_interface::is_markup ($2))
+ out = scm_list_1 ($2);
+ else if (Text_interface::is_markup_list ($2))
+ out = $2;
+ if (scm_is_pair (out))
+ {
+ SCM proc = parser->lexer_->lookup_identifier ("book-text-handler");
+ scm_call_2 (proc, $1, out);
+ } else if (!scm_is_eq ($2, SCM_UNSPECIFIED))
+ parser->parser_error (@2, _("bad expression type"));
}
| book_body
{
- parser->lexer_->add_scope ($1->header_);
+ parser->lexer_->add_scope (unsmob_book ($1)->header_);
} lilypond_header
- | book_body embedded_scm { }
| book_body error {
- $$->paper_ = 0;
- $$->scores_ = SCM_EOL;
- $$->bookparts_ = SCM_EOL;
+ Book *book = unsmob_book ($1);
+ book->paper_ = 0;
+ book->scores_ = SCM_EOL;
+ book->bookparts_ = SCM_EOL;
}
;
bookpart_body:
{
- $$ = new Book;
- $$->origin ()->set_spot (@$);
- parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), $$->self_scm ());
+ Book *book = new Book;
+ book->origin ()->set_spot (@$);
+ $$ = book->unprotect ();
+ parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), $$);
}
| BOOK_IDENTIFIER {
- $$ = unsmob_book ($1);
- $$->protect ();
- $$->origin ()->set_spot (@$);
+ unsmob_book ($1)->origin ()->set_spot (@$);
parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), $1);
}
| bookpart_body paper_block {
- $$->paper_ = $2;
- $2->unprotect ();
+ unsmob_book ($$)->paper_ = unsmob_output_def ($2);
}
| bookpart_body score_block {
- Score *score = $2;
SCM proc = parser->lexer_->lookup_identifier ("bookpart-score-handler");
- scm_call_2 (proc, $$->self_scm (), score->self_scm ());
- score->unprotect ();
+ scm_call_2 (proc, $1, $2);
}
| bookpart_body composite_music {
- Music *music = unsmob_music ($2);
SCM proc = parser->lexer_->lookup_identifier ("bookpart-music-handler");
- scm_call_3 (proc, parser->self_scm (), $$->self_scm (), music->self_scm ());
+ scm_call_3 (proc, parser->self_scm (), $1, $2);
}
| bookpart_body full_markup {
SCM proc = parser->lexer_->lookup_identifier ("bookpart-text-handler");
- scm_call_2 (proc, $$->self_scm (), scm_list_1 ($2));
+ scm_call_2 (proc, $1, scm_list_1 ($2));
}
| bookpart_body full_markup_list {
SCM proc = parser->lexer_->lookup_identifier ("bookpart-text-handler");
- scm_call_2 (proc, $$->self_scm (), $2);
+ scm_call_2 (proc, $1, $2);
+ }
+ | bookpart_body SCM_TOKEN {
+ // Evaluate and ignore #xxx, as opposed to \xxx
+ parser->lexer_->eval_scm_token ($2);
+ }
+ | bookpart_body embedded_scm_active
+ {
+ SCM out = SCM_UNDEFINED;
+ if (Text_interface::is_markup ($2))
+ out = scm_list_1 ($2);
+ else if (Text_interface::is_markup_list ($2))
+ out = $2;
+ if (scm_is_pair (out))
+ {
+ SCM proc = parser->lexer_->lookup_identifier ("bookpart-text-handler");
+ scm_call_2 (proc, $1, out);
+ } else if (!scm_is_eq ($2, SCM_UNSPECIFIED))
+ parser->parser_error (@2, _("bad expression type"));
}
| bookpart_body
{
- if (!ly_is_module ($1->header_))
- $1->header_ = ly_make_module (false);
- parser->lexer_->add_scope ($1->header_);
+ 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 embedded_scm { }
| bookpart_body error {
- $$->paper_ = 0;
- $$->scores_ = SCM_EOL;
+ Book *book = unsmob_book ($1);
+ book->paper_ = 0;
+ book->scores_ = SCM_EOL;
}
;
score_body:
music {
- SCM m = $1;
SCM scorify = ly_lily_module_constant ("scorify-music");
- SCM score = scm_call_2 (scorify, m, parser->self_scm ());
+ $$ = scm_call_2 (scorify, $1, parser->self_scm ());
- // pass ownernship to C++ again.
- $$ = unsmob_score (score);
- $$->protect ();
- $$->origin ()->set_spot (@$);
+ unsmob_score ($$)->origin ()->set_spot (@$);
}
- | SCORE_IDENTIFIER {
- $$ = unsmob_score ($1);
- $$->protect ();
- $$->origin ()->set_spot (@$);
+ | embedded_scm_active {
+ Score *score;
+ if (unsmob_score ($1))
+ score = new Score (*unsmob_score ($1));
+ else {
+ score = new Score;
+ parser->parser_error (@1, _("score expected"));
+ }
+ unsmob_score ($$)->origin ()->set_spot (@$);
+ $$ = score->unprotect ();
}
| score_body
{
- if (!ly_is_module ($1->get_header ()))
- $1->set_header (ly_make_module (false));
- parser->lexer_->add_scope ($1->get_header ());
+ 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 ());
} lilypond_header
| score_body output_def {
- if ($2->lookup_variable (ly_symbol2scm ("is-paper")) == SCM_BOOL_T)
+ Output_def *od = unsmob_output_def ($2);
+ if (od->lookup_variable (ly_symbol2scm ("is-paper")) == SCM_BOOL_T)
{
parser->parser_error (@2, _("\\paper cannot be used in \\score, use \\layout instead"));
}
else
{
- $$->add_output_def ($2);
+ unsmob_score ($1)->add_output_def (od);
}
- $2->unprotect ();
}
| score_body error {
- $$->error_found_ = true;
+ unsmob_score ($$)->error_found_ = true;
}
;
paper_block:
output_def {
- $$ = $1;
- if ($$->lookup_variable (ly_symbol2scm ("is-paper")) != SCM_BOOL_T)
+ Output_def *od = unsmob_output_def ($1);
+
+ if (od->lookup_variable (ly_symbol2scm ("is-paper")) != SCM_BOOL_T)
{
parser->parser_error (@1, _ ("need \\paper for paper block"));
- $1->unprotect ();
- $$ = get_paper (parser);
+ $$ = get_paper (parser)->unprotect ();
}
}
;
output_def_head:
PAPER {
- $$ = get_paper (parser);
- $$->input_origin_ = @$;
- parser->lexer_->add_scope ($$->scope_);
+ Output_def *p = get_paper (parser);
+ p->input_origin_ = @$;
+ parser->lexer_->add_scope (p->scope_);
+ $$ = p->unprotect ();
}
| MIDI {
Output_def *p = get_midi (parser);
- $$ = p;
+ $$ = p->unprotect ();
parser->lexer_->add_scope (p->scope_);
}
| LAYOUT {
Output_def *p = get_layout (parser);
parser->lexer_->add_scope (p->scope_);
- $$ = p;
+ $$ = p->unprotect ();
}
;
output_def_body:
output_def_head_with_mode_switch '{' {
$$ = $1;
- $$->input_origin_.set_spot (@$);
+ unsmob_output_def ($$)->input_origin_.set_spot (@$);
}
| output_def_head_with_mode_switch '{' OUTPUT_DEF_IDENTIFIER {
- $1->unprotect ();
-
Output_def *o = unsmob_output_def ($3);
o->input_origin_.set_spot (@$);
- $$ = o;
- $$->protect ();
+ $$ = o->self_scm ();
parser->lexer_->remove_scope ();
parser->lexer_->add_scope (o->scope_);
}
| output_def_body assignment {
+ }
+ | output_def_body embedded_scm {
+
}
| output_def_body
{
} music_or_context_def
{
if (unsmob_context_def ($3))
- assign_context_def ($$, $3);
+ assign_context_def (unsmob_output_def ($1), $3);
else {
SCM proc = parser->lexer_->lookup_identifier
("output-def-music-handler");
scm_call_3 (proc, parser->self_scm (),
- $1->self_scm (), $3);
+ $1, $3);
}
}
| output_def_body error {
music_arg:
simple_music
{
- if (unsmob_pitch ($1)) {
- Music *n = MY_MAKE_MUSIC ("NoteEvent", @1);
- n->set_property ("pitch", $1);
- n->set_property ("duration",
- parser->default_duration_.smobbed_copy ());
- $$ = n->unprotect ();
- }
+ $$ = make_music_from_simple (parser, @1, $1);
+ if (!unsmob_music ($$))
+ parser->parser_error (@1, _ ("music expected"));
}
| composite_music %prec COMPOSITE
;
music_assign:
simple_music
| composite_music %prec COMPOSITE
- | lyric_element_music
;
repeated_music:
$$ = Context_mod ().smobbed_copy ();
}
| context_mod_list context_mod {
- unsmob_context_mod ($1)->add_context_mod ($2);
+ if (!SCM_UNBNDP ($2))
+ unsmob_context_mod ($1)->add_context_mod ($2);
}
| context_mod_list CONTEXT_MOD_IDENTIFIER {
Context_mod *md = unsmob_context_mod ($2);
MUSIC_FUNCTION EXPECT_PITCH EXPECT_SCM EXPECT_SCM EXPECT_NO_MORE_ARGS
and this rule returns the reversed list of arguments. */
+/* Function argument lists come in a number of flavors. Whenever
+ * LilyPond has to pick between different flavors, the decision is
+ * either made because of tokens it has already seen, or it is
+ * postponed until tokens suitable for making the decision come up.
+ * For postponing decisions, it may be necessary that the competing
+ * rules are written in a way making them compatible until a decision
+ * can be made. Sometimes this is done by putting common traits into
+ * a separate "common" rule set.
+ *
+ * function_arglist: a full argument list. Optional arguments at the
+ * end of the list can only be skipped by writing \default in their
+ * place.
+ *
+ * function_arglist_backup: an argument list ending in an optional
+ * argument that may be skipped depending on its predicate.
+ *
+ * function_arglist_skip: an argument list _not_ ending in an optional
+ * argument that is actually taken.
+ *
+ * function_arglist_nonbackup: an argument list ending in an optional
+ * argument that may not be skipped because it is in end position and
+ * has not been shortcircuited with \default.
+ *
+ * function_arglist* / function_arglist_closed*: The closed variants
+ * don't end in simple music expressions that might still accept
+ * things like a duration or a postevent.
+ */
+
function_arglist_skip:
function_arglist_common
| EXPECT_OPTIONAL EXPECT_PITCH function_arglist_skip
| EXPECT_OPTIONAL EXPECT_DURATION function_arglist_closed duration_length {
$$ = scm_cons ($4, $3);
}
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed FRACTION
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist FRACTION
{
$$ = check_scheme_arg (parser, @4, $4, $3, $2);
}
else {
Music *t = MY_MAKE_MUSIC ("FingeringEvent", @5);
t->set_property ("digit", $5);
- $$ = t->unprotect ();
- if (scm_is_true (scm_call_1 ($2, $$)))
- $$ = scm_cons ($$, $3);
- else
- $$ = check_scheme_arg (parser, @4, n, $3, $2);
+ $$ = check_scheme_arg (parser, @4, t->unprotect (),
+ $3, $2, n);
}
}
{
$$ = check_scheme_arg (parser, @4, $4, $3, $2);
}
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist SCM_IDENTIFIER
+ {
+ $$ = check_scheme_arg (parser, @4,
+ try_string_variants ($2, $4),
+ $3, $2, $4);
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist STRING
+ {
+ $$ = check_scheme_arg (parser, @4,
+ try_string_variants ($2, $4),
+ $3, $2, $4);
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist LYRICS_STRING
+ {
+ $$ = check_scheme_arg (parser, @4,
+ try_string_variants ($2, $4),
+ $3, $2, $4);
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist lyric_markup
+ {
+ $$ = check_scheme_arg (parser, @4, $4, $3, $2);
+ }
;
+symbol_list_arg:
+ SYMBOL_LIST
+ | SYMBOL_LIST '.' symbol_list_rev
+ {
+ $$ = scm_append (scm_list_2 ($1, scm_reverse_x ($3, SCM_EOL)));
+ }
+ ;
+
+symbol_list_rev:
+ symbol_list_part
+ | symbol_list_rev '.' symbol_list_part
+ {
+ $$ = scm_append_x (scm_list_2 ($3, $1));
+ }
+ ;
+
+// symbol_list_part delivers elements in reverse copy.
+
+symbol_list_part:
+ symbol_list_element
+ {
+ SCM sym_l_p = ly_lily_module_constant ("symbol-list?");
+ $$ = try_string_variants (sym_l_p, $1);
+ if (SCM_UNBNDP ($$)) {
+ parser->parser_error (@1, _("not a symbol"));
+ $$ = SCM_EOL;
+ } else
+ $$ = scm_reverse ($$);
+ }
+ ;
+
+
+symbol_list_element:
+ STRING
+ | LYRICS_STRING
+ | embedded_scm_bare
+ ;
+
+
function_arglist_nonbackup:
function_arglist_nonbackup_common
| EXPECT_OPTIONAL EXPECT_SCM function_arglist embedded_scm_arg
{
$$ = check_scheme_arg (parser, @4, $4, $3, $2);
}
+ | function_arglist_nonbackup_reparse REPARSE SCM_ARG
+ {
+ $$ = check_scheme_arg (parser, @3, $3, $1, $2);
+ }
+ | function_arglist_nonbackup_reparse REPARSE lyric_element_music
+ {
+ $$ = check_scheme_arg (parser, @3, $3, $1, $2);
+ }
+ | function_arglist_nonbackup_reparse REPARSE symbol_list_arg
+ {
+ $$ = check_scheme_arg (parser, @3, $3, $1, $2);
+ }
+ ;
+
+function_arglist_nonbackup_reparse:
+ EXPECT_OPTIONAL EXPECT_SCM function_arglist SCM_IDENTIFIER
+ {
+ $$ = $3;
+ SCM res = try_string_variants ($2, $4);
+ if (!SCM_UNBNDP (res))
+ if (scm_is_pair (res))
+ MYREPARSE (@4, $2, SYMBOL_LIST, res);
+ else
+ MYREPARSE (@4, $2, SCM_ARG, res);
+ else if (scm_is_true
+ (scm_call_1
+ ($2, make_music_from_simple
+ (parser, @4, $4))))
+ MYREPARSE (@4, $2, LYRICS_STRING, $4);
+ else
+ MYREPARSE (@4, $2, SCM_ARG, $4);
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist LYRICS_STRING
+ {
+ $$ = $3;
+ SCM res = try_string_variants ($2, $4);
+ if (!SCM_UNBNDP (res))
+ if (scm_is_pair (res))
+ MYREPARSE (@4, $2, SYMBOL_LIST, res);
+ else
+ MYREPARSE (@4, $2, SCM_ARG, res);
+ else if (scm_is_true
+ (scm_call_1
+ ($2, make_music_from_simple
+ (parser, @4, $4))))
+ MYREPARSE (@4, $2, LYRICS_STRING, $4);
+ else
+ MYREPARSE (@4, $2, SCM_ARG, $4);
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist STRING
+ {
+ $$ = $3;
+ SCM res = try_string_variants ($2, $4);
+ if (!SCM_UNBNDP (res))
+ if (scm_is_pair (res))
+ MYREPARSE (@4, $2, SYMBOL_LIST, res);
+ else
+ MYREPARSE (@4, $2, SCM_ARG, res);
+ else
+ MYREPARSE (@4, $2, SCM_ARG, $4);
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist lyric_markup
+ {
+ $$ = $3;
+ if (scm_is_true (scm_call_1 ($2, $4)))
+ MYREPARSE (@4, $2, SCM_ARG, $4);
+ else if (scm_is_true
+ (scm_call_1
+ ($2, make_music_from_simple
+ (parser, @4, $4))))
+ MYREPARSE (@4, $2, LYRICS_STRING, $4);
+ else
+ MYREPARSE (@4, $2, SCM_ARG, $4);
+ }
;
function_arglist_keep:
$$ = scm_cons ($4, $3);
} else {
$$ = scm_cons (loc_on_music (@3, $1), $3);
- MYBACKUP (SCM_IDENTIFIER, $4, @4);
+ MYBACKUP (SCM_ARG, $4, @4);
}
}
| EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_keep post_event_nofinger
MYBACKUP (EVENT_IDENTIFIER, $4, @4);
}
}
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_keep lyric_element
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_keep lyric_markup
{
- // There is no point interpreting a lyrics string as
- // an event, since we don't allow music possibly
- // followed by durations or postevent into closed
- // music, and we only accept closed music in optional
- // arguments at the moment. If this changes, more
- // complex schemes might become interesting here as
- // well: see how we do this at the mandatory argument
- // point.
if (scm_is_true (scm_call_1 ($2, $4)))
$$ = scm_cons ($4, $3);
else {
$$ = scm_cons (loc_on_music (@3, $1), $3);
- MYBACKUP (LYRICS_STRING, $4, @4);
+ MYBACKUP (LYRIC_ELEMENT, $4, @4);
}
}
| EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_keep UNSIGNED
MYBACKUP (NUMBER_IDENTIFIER, $4, @4);
}
}
- | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_keep FRACTION
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_keep FRACTION
{
if (scm_is_true (scm_call_1 ($2, $4)))
{
MYREPARSE (@5, $2, REAL, n);
$$ = $3;
} else {
+ $$ = scm_cons (loc_on_music (@3, $1), $3);
MYBACKUP (REAL, n, @5);
}
}
if (scm_is_true (scm_call_1 ($2, n))) {
$$ = scm_cons (n, $3);
} else {
+ $$ = scm_cons (loc_on_music (@3, $1), $3);
MYBACKUP (NUMBER_IDENTIFIER, n, @5);
}
}
{
$$ = scm_cons ($4, $3);
}
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_keep SCM_IDENTIFIER
+ {
+ SCM res = try_string_variants ($2, $4);
+ if (!SCM_UNBNDP (res))
+ if (scm_is_pair (res)) {
+ $$ = $3;
+ MYREPARSE (@4, $2, SYMBOL_LIST, res);
+ }
+ else
+ $$ = scm_cons (res, $3);
+ else {
+ $$ = scm_cons (loc_on_music (@3, $1), $3);
+ MYBACKUP (SCM_IDENTIFIER, $4, @4);
+ }
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_keep STRING
+ {
+ SCM res = try_string_variants ($2, $4);
+ if (!SCM_UNBNDP (res))
+ if (scm_is_pair (res)) {
+ $$ = $3;
+ MYREPARSE (@4, $2, SYMBOL_LIST, res);
+ }
+ else
+ $$ = scm_cons (res, $3);
+ else {
+ $$ = scm_cons (loc_on_music (@3, $1), $3);
+ MYBACKUP (STRING, $4, @4);
+ }
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_keep LYRICS_STRING
+ {
+ SCM res = try_string_variants ($2, $4);
+ if (!SCM_UNBNDP (res))
+ if (scm_is_pair (res)) {
+ $$ = $3;
+ MYREPARSE (@4, $2, SYMBOL_LIST, res);
+ }
+ else
+ $$ = scm_cons (res, $3);
+ else {
+ $$ = scm_cons (loc_on_music (@3, $1), $3);
+ MYBACKUP (LYRICS_STRING, $4, @4);
+ }
+ }
| EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup BACKUP
{
$$ = scm_cons ($1, $3);
MYBACKUP(0, SCM_UNDEFINED, @3);
}
- | function_arglist_backup REPARSE embedded_scm_arg_closed
+ | function_arglist_backup REPARSE bare_number
{
$$ = check_scheme_arg (parser, @3,
$3, $1, $2);
}
- | function_arglist_backup REPARSE bare_number
+ | function_arglist_backup REPARSE symbol_list_arg
{
- $$ = check_scheme_arg (parser, @3,
- $3, $1, $2);
+ $$ = check_scheme_arg (parser, @3, $3, $1, $2);
}
;
$$ = check_scheme_arg (parser, @3,
$3, $2, $1);
}
- | EXPECT_SCM function_arglist_closed_optional FRACTION
+ | EXPECT_SCM function_arglist_optional FRACTION
{
$$ = check_scheme_arg (parser, @3,
$3, $2, $1);
$$ = check_scheme_arg (parser, @3,
$3, $2, $1);
}
- | function_arglist_common_minus
- | function_arglist_common_lyric
+ | EXPECT_SCM function_arglist_closed_optional '-' NUMBER_IDENTIFIER
+ {
+ SCM n = scm_difference ($4, SCM_UNDEFINED);
+ $$ = check_scheme_arg (parser, @4, n, $2, $1);
+ }
+ | function_arglist_common_reparse REPARSE SCM_ARG
+ {
+ $$ = check_scheme_arg (parser, @3,
+ $3, $1, $2);
+ }
+ | function_arglist_common_reparse REPARSE lyric_element_music
+ {
+ $$ = check_scheme_arg (parser, @3,
+ $3, $1, $2);
+ }
+ | function_arglist_common_reparse REPARSE bare_number
+ {
+ $$ = check_scheme_arg (parser, @3,
+ $3, $1, $2);
+ }
+ | function_arglist_common_reparse REPARSE symbol_list_arg
+ {
+ $$ = check_scheme_arg (parser, @3, $3, $1, $2);
+ }
;
-function_arglist_common_lyric:
- EXPECT_SCM function_arglist_optional lyric_element
+function_arglist_common_reparse:
+ EXPECT_SCM function_arglist_optional SCM_IDENTIFIER
{
- // We check how the predicate thinks about a lyrics
- // event or about a markup. If it accepts neither, we
- // backup the original token. Otherwise we commit to
- // taking the token. Depending on what the predicate
- // is willing to accept, we interpret as a string, as
- // a lyric event, or ambiguously (meaning that if
- // something looking like a duration or post event
- // follows, we take the event, otherwise the string).
- SCM lyric_event = MAKE_SYNTAX ("lyric-event", @3, $3,
- parser->default_duration_.smobbed_copy ());
- if (scm_is_true (scm_call_1 ($1, $3)))
- if (scm_is_true (scm_call_1 ($1, lyric_event)))
- {
- $$ = $2;
- MYREPARSE (@3, $1, LYRICS_STRING, $3);
- } else {
- $$ = scm_cons ($3, $2);
- }
- else if (scm_is_true (scm_call_1 ($1, lyric_event)))
- {
- $$ = $2;
+ $$ = $2;
+ SCM res = try_string_variants ($1, $3);
+ if (!SCM_UNBNDP (res))
+ if (scm_is_pair (res))
+ MYREPARSE (@3, $1, SYMBOL_LIST, res);
+ else
+ MYREPARSE (@3, $1, SCM_ARG, res);
+ else if (scm_is_true
+ (scm_call_1
+ ($1, make_music_from_simple (parser, @3, $3))))
MYREPARSE (@3, $1, LYRIC_ELEMENT, $3);
- } else {
+ else
// This is going to flag a syntax error, we
// know the predicate to be false.
- check_scheme_arg (parser, @3,
- $3, $2, $1);
- }
+ MYREPARSE (@3, $1, SCM_ARG, $3);
}
- | function_arglist_common_lyric REPARSE lyric_element_arg
+ | EXPECT_SCM function_arglist_optional STRING
{
- // This should never be false
- $$ = check_scheme_arg (parser, @3,
- $3, $1, $2);
+ $$ = $2;
+ SCM res = try_string_variants ($1, $3);
+ if (!SCM_UNBNDP (res))
+ if (scm_is_pair (res))
+ MYREPARSE (@3, $1, SYMBOL_LIST, res);
+ else
+ MYREPARSE (@3, $1, SCM_ARG, res);
+ else
+ // This is going to flag a syntax error, we
+ // know the predicate to be false.
+ MYREPARSE (@3, $1, SCM_ARG, $3);
}
- ;
-
-function_arglist_common_minus:
- EXPECT_SCM function_arglist_closed_optional '-' UNSIGNED
+ | EXPECT_SCM function_arglist_optional LYRICS_STRING
{
+ $$ = $2;
+ SCM res = try_string_variants ($1, $3);
+ if (!SCM_UNBNDP (res))
+ if (scm_is_pair (res))
+ MYREPARSE (@3, $1, SYMBOL_LIST, res);
+ else
+ MYREPARSE (@3, $1, SCM_ARG, res);
+ else if (scm_is_true
+ (scm_call_1
+ ($1, make_music_from_simple (parser, @3, $3))))
+ MYREPARSE (@3, $1, LYRIC_ELEMENT, $3);
+ else
+ // This is going to flag a syntax error, we
+ // know the predicate to be false.
+ MYREPARSE (@3, $1, SCM_ARG, $3);
+ }
+ | EXPECT_SCM function_arglist_optional lyric_markup
+ {
+ $$ = $2;
+ if (scm_is_true (scm_call_1 ($1, $3)))
+ MYREPARSE (@3, $1, SCM_ARG, $3);
+ else if (scm_is_true
+ (scm_call_1
+ ($1, make_music_from_simple (parser, @3, $3))))
+ MYREPARSE (@3, $1, LYRIC_ELEMENT, $3);
+ else
+ // This is going to flag a syntax error, we
+ // know the predicate to be false.
+ MYREPARSE (@3, $1, SCM_ARG, $3);
+ }
+ | EXPECT_SCM function_arglist_closed_optional '-' UNSIGNED
+ {
+ $$ = $2;
SCM n = scm_difference ($4, SCM_UNDEFINED);
- if (scm_is_true (scm_call_1 ($1, n))) {
- $$ = $2;
+ if (scm_is_true (scm_call_1 ($1, n)))
MYREPARSE (@4, $1, REAL, n);
- } else {
+ else {
Music *t = MY_MAKE_MUSIC ("FingeringEvent", @4);
t->set_property ("digit", $4);
- $$ = t->unprotect ();
- if (scm_is_true (scm_call_1 ($1, $$)))
- $$ = scm_cons ($$, $2);
+ SCM m = t->unprotect ();
+ if (scm_is_true (scm_call_1 ($1, m)))
+ MYREPARSE (@4, $1, SCM_ARG, m);
else
- $$ = check_scheme_arg (parser, @3, n, $2, $1);
+ MYREPARSE (@4, $1, SCM_ARG, $4);
}
}
SCM n = scm_difference ($4, SCM_UNDEFINED);
MYREPARSE (@4, $1, REAL, n);
}
- | EXPECT_SCM function_arglist_closed_optional '-' NUMBER_IDENTIFIER
- {
- SCM n = scm_difference ($4, SCM_UNDEFINED);
- $$ = check_scheme_arg (parser, @4, n, $2, $1);
- }
- | function_arglist_common_minus REPARSE bare_number
- {
- $$ = check_scheme_arg (parser, @3, $3, $1, $2);
- }
;
function_arglist_closed:
$$ = check_scheme_arg (parser, @3,
$3, $2, $1);
}
- | EXPECT_SCM function_arglist_closed_optional '-' UNSIGNED
- {
- SCM n = scm_difference ($4, SCM_UNDEFINED);
- if (scm_is_true (scm_call_1 ($1, n))) {
- $$ = scm_cons (n, $2);
- } else {
- Music *t = MY_MAKE_MUSIC ("FingeringEvent", @4);
- t->set_property ("digit", $4);
- $$ = t->unprotect ();
- if (scm_is_true (scm_call_1 ($1, $$)))
- $$ = scm_cons ($$, $2);
- else
- $$ = check_scheme_arg (parser, @3, n, $2, $1);
- }
-
- }
- | EXPECT_SCM function_arglist_closed_optional '-' REAL
- {
- $$ = check_scheme_arg (parser, @3,
- scm_difference ($4, SCM_UNDEFINED),
- $2, $1);
- }
| EXPECT_SCM function_arglist_closed_optional '-' NUMBER_IDENTIFIER
{
$$ = check_scheme_arg (parser, @3,
$$ = check_scheme_arg (parser, @3,
$3, $2, $1);
}
- | EXPECT_SCM function_arglist_closed_optional FRACTION
+ | EXPECT_SCM function_arglist_optional FRACTION
{
$$ = check_scheme_arg (parser, @3,
$3, $2, $1);
}
- | EXPECT_SCM function_arglist_optional lyric_element
+ | function_arglist_common_reparse REPARSE SCM_ARG
{
$$ = check_scheme_arg (parser, @3,
- $3, $2, $1);
+ $3, $1, $2);
+ }
+ | function_arglist_common_reparse REPARSE bare_number
+ {
+ $$ = check_scheme_arg (parser, @3,
+ $3, $1, $2);
+ }
+ | function_arglist_common_reparse REPARSE symbol_list_arg
+ {
+ $$ = check_scheme_arg (parser, @3, $3, $1, $2);
}
;
;
-property_path_revved:
- embedded_scm_closed {
- $$ = scm_cons ($1, SCM_EOL);
- }
- | property_path_revved embedded_scm_closed {
- $$ = scm_cons ($2, $1);
- }
- ;
-
property_path:
- property_path_revved {
+ symbol_list_rev {
$$ = scm_reverse_x ($1, SCM_EOL);
}
+ | symbol_list_rev property_path {
+ $$ = scm_reverse_x ($1, $2);
+ }
;
property_operation:
$$ = scm_list_2 (ly_symbol2scm ("unset"),
scm_string_to_symbol ($2));
}
- | OVERRIDE simple_string property_path '=' scalar {
- $$ = scm_append (scm_list_2 (scm_list_3 (ly_symbol2scm ("push"),
- scm_string_to_symbol ($2), $5),
- $3));
+ | OVERRIDE property_path '=' scalar {
+ if (scm_ilength ($2) < 2) {
+ parser->parser_error (@2, _("bad grob property path"));
+ $$ = SCM_UNDEFINED;
+ } else {
+ $$ = scm_cons (ly_symbol2scm ("push"),
+ scm_cons2 (scm_car ($2),
+ $4,
+ scm_cdr ($2)));
+ }
}
- | REVERT simple_string embedded_scm {
+ | REVERT revert_arg {
$$ = scm_list_3 (ly_symbol2scm ("pop"),
- scm_string_to_symbol ($2), $3);
+ scm_car ($2),
+ scm_cdr ($2));
+ }
+ ;
+
+// This is all quite awkward for the sake of substantial backward
+// compatibility while at the same time allowing a more "natural" form
+// of specification not separating grob specification from grob
+// property path. The purpose of this definition of revert_arg is to
+// allow the symbol list which specifies grob and property to revert
+// to be optionally be split into two parts after the grob (which in
+// this case is just the first element of the list). symbol_list_part
+// is only one path component, but it can be parsed without lookahead,
+// so we can follow it with a synthetic BACKUP token when needed. If
+// the first symbol_list_part already contains multiple elements (only
+// possible if a Scheme expression provides them), we just parse for
+// additional elements introduced by '.', which is what the
+// SYMBOL_LIST backup in connection with the immediately following
+// rule using symbol_list_arg does.
+//
+// As long as we don't have our coffers filled with both grob and at
+// least one grob property specification, the rest of the required
+// symbol list chain may be provided either with or without a leading
+// dot. This is for both allowing the traditional
+// \revert Accidental #'color
+// as well as well as the "naive" form
+// \revert Accidental.color
+
+revert_arg:
+ revert_arg_part
+ {
+ if (scm_is_null ($1)
+ || scm_is_null (scm_cdr ($1)))
+ MYBACKUP (SCM_ARG, $1, @1);
+ else
+ MYBACKUP (SYMBOL_LIST, scm_reverse_x ($1, SCM_EOL), @1);
+ }
+ | revert_arg BACKUP symbol_list_arg
+ {
+ $$ = $3;
}
;
+// revert_arg_part delivers results in reverse
+revert_arg_part:
+ symbol_list_part
+ | revert_arg BACKUP SCM_ARG '.' symbol_list_part
+ {
+ $$ = scm_append_x (scm_list_2 ($5, $3));
+ }
+ | revert_arg BACKUP SCM_ARG symbol_list_part
+ {
+ $$ = scm_append_x (scm_list_2 ($4, $3));
+ }
+ ;
+
context_def_mod:
CONSISTS { $$ = ly_symbol2scm ("consists"); }
| REMOVE { $$ = ly_symbol2scm ("remove"); }
}
;
-context_prop_spec:
- simple_string {
- if (!is_regular_identifier ($1))
+// If defined, at least two members.
+grob_prop_spec:
+ symbol_list_rev
+ {
+ SCM l = scm_reverse_x ($1, SCM_EOL);
+ if (scm_is_pair (l)
+ && to_boolean
+ (scm_object_property (scm_car (l),
+ ly_symbol2scm ("is-grob?"))))
+ l = scm_cons (ly_symbol2scm ("Bottom"), l);
+ if (scm_is_null (l) || scm_is_null (scm_cdr (l))) {
+ parser->parser_error (@1, _ ("bad grob property path"));
+ l = SCM_UNDEFINED;
+ }
+ $$ = l;
+ }
+ ;
+
+// If defined, at least three members
+grob_prop_path:
+ grob_prop_spec
+ {
+ if (!SCM_UNBNDP ($1) && scm_is_null (scm_cddr ($1)))
{
- @$.error (_("Grob name should be alphanumeric"));
+ parser->parser_error (@1, _ ("bad grob property path"));
+ $$ = SCM_UNDEFINED;
+ }
+ }
+ | grob_prop_spec property_path
+ {
+ if (!SCM_UNBNDP ($1)) {
+ $$ = scm_append_x (scm_list_2 ($1, $2));
+ if (scm_is_null (scm_cddr ($$))) {
+ parser->parser_error (@$, _ ("bad grob property path"));
+ $$ = SCM_UNDEFINED;
+ }
}
- $$ = scm_list_2 (ly_symbol2scm ("Bottom"),
- scm_string_to_symbol ($1));
}
- | simple_string '.' simple_string {
- $$ = scm_list_2 (scm_string_to_symbol ($1),
- scm_string_to_symbol ($3));
+ ;
+
+// Exactly two elements or undefined
+context_prop_spec:
+ symbol_list_rev
+ {
+ SCM l = scm_reverse_x ($1, SCM_EOL);
+ switch (scm_ilength (l)) {
+ case 1:
+ l = scm_cons (ly_symbol2scm ("Bottom"), l);
+ case 2:
+ break;
+ default:
+ parser->parser_error (@1, _ ("bad context property path"));
+ l = SCM_UNDEFINED;
+ }
+ $$ = l;
}
;
simple_music_property_def:
- OVERRIDE context_prop_spec property_path '=' scalar {
- $$ = scm_append (scm_list_2 (scm_list_n (scm_car ($2),
- ly_symbol2scm ("OverrideProperty"),
- scm_cadr ($2),
- $5, SCM_UNDEFINED),
- $3));
- }
- | REVERT context_prop_spec embedded_scm {
- $$ = scm_list_4 (scm_car ($2),
- ly_symbol2scm ("RevertProperty"),
- scm_cadr ($2),
- $3);
+ OVERRIDE grob_prop_path '=' scalar {
+ if (SCM_UNBNDP ($2))
+ $$ = SCM_UNDEFINED;
+ else {
+ $$ = scm_list_5 (scm_car ($2),
+ ly_symbol2scm ("OverrideProperty"),
+ scm_cadr ($2),
+ $4,
+ scm_cddr ($2));
+ }
+ }
+ | REVERT simple_revert_context revert_arg {
+ $$ = scm_list_4 ($2,
+ ly_symbol2scm ("RevertProperty"),
+ scm_car ($3),
+ scm_cdr ($3));
}
| SET context_prop_spec '=' scalar {
- $$ = scm_list_4 (scm_car ($2),
- ly_symbol2scm ("PropertySet"),
- scm_cadr ($2),
- $4);
+ if (SCM_UNBNDP ($2))
+ $$ = SCM_UNDEFINED;
+ else
+ $$ = scm_list_4 (scm_car ($2),
+ ly_symbol2scm ("PropertySet"),
+ scm_cadr ($2),
+ $4);
}
| UNSET context_prop_spec {
- $$ = scm_list_3 (scm_car ($2),
- ly_symbol2scm ("PropertyUnset"),
- scm_cadr ($2));
+ if (SCM_UNBNDP ($2))
+ $$ = SCM_UNDEFINED;
+ else
+ $$ = scm_list_3 (scm_car ($2),
+ ly_symbol2scm ("PropertyUnset"),
+ scm_cadr ($2));
+ }
+ ;
+
+
+// This is all quite awkward for the sake of substantial backward
+// compatibility while at the same time allowing a more "natural" form
+// of specification not separating grob specification from grob
+// property path. The purpose of this definition of
+// simple_revert_context is to allow the symbol list which specifies
+// grob and property to revert to be optionally be split into two
+// parts after the grob (which may be preceded by a context
+// specification, a case which we distinguish by checking whether the
+// first symbol is a valid grob symbol instead).
+//
+// See revert_arg above for the main work horse of this arrangement.
+// simple_revert_context just caters for the context and delegates the
+// rest of the job to revert_arg.
+
+simple_revert_context:
+ symbol_list_part
+ {
+ $1 = scm_reverse_x ($1, SCM_EOL);
+ if (scm_is_null ($1)
+ || to_boolean
+ (scm_object_property (scm_car ($1),
+ ly_symbol2scm ("is-grob?")))) {
+ $$ = ly_symbol2scm ("Bottom");
+ parser->lexer_->push_extra_token (SCM_IDENTIFIER, $1);
+ } else {
+ $$ = scm_car ($1);
+ parser->lexer_->push_extra_token (SCM_IDENTIFIER,
+ scm_cdr ($1));
+ }
}
;
music_property_def:
simple_music_property_def {
- $$ = LOWLEVEL_MAKE_SYNTAX (ly_lily_module_constant ("property-operation"), scm_cons2 (parser->self_scm (), make_input (@$), $1));
+ if (SCM_UNBNDP ($1))
+ $$ = MAKE_SYNTAX ("void-music", @1);
+ else
+ $$ = LOWLEVEL_MAKE_SYNTAX (ly_lily_module_constant ("property-operation"), scm_cons2 (parser->self_scm (), make_input (@$), $1));
}
;
STRING {
$$ = $1;
}
- | STRING_IDENTIFIER {
- $$ = $1;
- }
+ | full_markup
| string '+' string {
+ if (!scm_is_string ($1)) {
+ parser->parser_error (@1, (_ ("simple string expected")));
+ $1 = scm_string (SCM_EOL);
+ }
+ if (!scm_is_string ($3)) {
+ parser->parser_error (@3, (_ ("simple string expected")));
+ $3 = scm_string (SCM_EOL);
+ }
$$ = scm_string_append (scm_list_2 ($1, $3));
}
;
| LYRICS_STRING {
$$ = $1;
}
- | STRING_IDENTIFIER {
- $$ = $1;
+ | embedded_scm_bare
+ {
+ if (scm_is_string ($1)) {
+ $$ = $1;
+ } else {
+ parser->parser_error (@1, (_ ("simple string expected")));
+ $$ = scm_string (SCM_EOL);
+ }
}
;
scalar:
embedded_scm_arg
+ | SCM_IDENTIFIER
| bare_number
| FRACTION
| lyric_element
+ | STRING
;
scalar_closed:
embedded_scm_arg_closed
+ | SCM_IDENTIFIER
| bare_number
| FRACTION
| lyric_element
+ | STRING
;
simple_element post_events {
// Let the rhythmic music iterator sort this mess out.
if (scm_is_pair ($2)) {
- if (unsmob_pitch ($1)) {
- Music *n = MY_MAKE_MUSIC ("NoteEvent", @1);
- n->set_property ("pitch", $1);
- n->set_property ("duration",
- parser->default_duration_.smobbed_copy ());
- $$ = n->unprotect ();
- }
- unsmob_music ($$)->set_property ("articulations",
- scm_reverse_x ($2, SCM_EOL));
+ $$ = make_music_from_simple (parser, @1, $1);
+ if (unsmob_music ($$))
+ unsmob_music ($$)->set_property ("articulations",
+ scm_reverse_x ($2, SCM_EOL));
+ else
+ parser->parser_error (@1, _("music expected"));
}
}
| simple_chord_elements post_events {
chord_body_element:
pitch exclamations questions octave_check post_events
{
- int q = $3;
- int ex = $2;
+ bool q = to_boolean ($3);
+ bool ex = to_boolean ($2);
SCM check = $4;
SCM post = $5;
Music *n = MY_MAKE_MUSIC ("NoteEvent", @$);
n->set_property ("pitch", $1);
- if (q % 2)
+ if (q)
n->set_property ("cautionary", SCM_BOOL_T);
- if (ex % 2 || q % 2)
+ if (ex || q)
n->set_property ("force-accidental", SCM_BOOL_T);
if (scm_is_pair (post)) {
}
| script_dir music_function_call_closed {
$$ = $2;
- if ($1)
+ if (!SCM_UNBNDP ($1))
{
- unsmob_music ($$)->set_property ("direction", scm_from_int ($1));
+ unsmob_music ($$)->set_property ("direction", $1);
}
}
| HYPHEN {
$$ = MY_MAKE_MUSIC ("ExtenderEvent", @$)->unprotect ();
}
| script_dir direction_reqd_event {
- if ($1)
+ if (!SCM_UNBNDP ($1))
{
Music *m = unsmob_music ($2);
- m->set_property ("direction", scm_from_int ($1));
+ m->set_property ("direction", $1);
}
$$ = $2;
}
| script_dir direction_less_event {
- if ($1)
+ if (!SCM_UNBNDP ($1))
{
Music *m = unsmob_music ($2);
- m->set_property ("direction", scm_from_int ($1));
+ m->set_property ("direction", $1);
}
$$ = $2;
}
string_number_event:
E_UNSIGNED {
Music *s = MY_MAKE_MUSIC ("StringNumberEvent", @$);
- s->set_property ("string-number", scm_from_int ($1));
+ s->set_property ("string-number", $1);
$$ = s->unprotect ();
}
;
}
| tremolo_type {
Music *a = MY_MAKE_MUSIC ("TremoloEvent", @$);
- a->set_property ("tremolo-type", scm_from_int ($1));
+ a->set_property ("tremolo-type", $1);
$$ = a->unprotect ();
}
| event_function_event
octave_check:
/**/ { $$ = SCM_EOL; }
- | '=' { $$ = scm_from_int (0); }
- | '=' sub_quotes { $$ = scm_from_int (-$2); }
- | '=' sup_quotes { $$ = scm_from_int ($2); }
+ | '=' quotes { $$ = $2; }
;
+quotes:
+ /* empty */
+ {
+ $$ = SCM_INUM0;
+ }
+ | sub_quotes
+ | sup_quotes
+ ;
+
sup_quotes:
'\'' {
- $$ = 1;
+ $$ = scm_from_int (1);
}
| sup_quotes '\'' {
- $$ ++;
+ $$ = scm_oneplus ($1);
}
;
sub_quotes:
',' {
- $$ = 1;
+ $$ = scm_from_int (-1);
}
| sub_quotes ',' {
- $$++;
+ $$ = scm_oneminus ($1);
}
;
steno_pitch:
- NOTENAME_PITCH {
- $$ = $1;
- }
- | NOTENAME_PITCH sup_quotes {
- Pitch p = *unsmob_pitch ($1);
- p = p.transposed (Pitch ($2,0,0));
- $$ = p.smobbed_copy ();
- }
- | NOTENAME_PITCH sub_quotes {
- Pitch p =* unsmob_pitch ($1);
- p = p.transposed (Pitch (-$2,0,0));
- $$ = p.smobbed_copy ();
+ NOTENAME_PITCH quotes {
+ if (!scm_is_eq (SCM_INUM0, $2))
+ {
+ Pitch p = *unsmob_pitch ($1);
+ p = p.transposed (Pitch (scm_to_int ($2),0,0));
+ $$ = p.smobbed_copy ();
+ }
}
;
*/
steno_tonic_pitch:
- TONICNAME_PITCH {
- $$ = $1;
- }
- | TONICNAME_PITCH sup_quotes {
- Pitch p = *unsmob_pitch ($1);
- p = p.transposed (Pitch ($2,0,0));
- $$ = p.smobbed_copy ();
- }
- | TONICNAME_PITCH sub_quotes {
- Pitch p = *unsmob_pitch ($1);
-
- p = p.transposed (Pitch (-$2,0,0));
- $$ = p.smobbed_copy ();
+ TONICNAME_PITCH quotes {
+ if (!scm_is_eq (SCM_INUM0, $2))
+ {
+ Pitch p = *unsmob_pitch ($1);
+ p = p.transposed (Pitch (scm_to_int ($2),0,0));
+ $$ = p.smobbed_copy ();
+ }
}
;
pitch:
- steno_pitch {
- $$ = $1;
- }
+ steno_pitch
| PITCH_IDENTIFIER
;
t->set_property ("text", $1);
$$ = t->unprotect ();
}
- | simple_string {
+ | STRING {
Music *t = MY_MAKE_MUSIC ("TextScriptEvent", @$);
t->set_property ("text",
make_simple_markup ($1));
$$ = t->unprotect ();
}
+ | LYRICS_STRING {
+ Music *t = MY_MAKE_MUSIC ("TextScriptEvent", @$);
+ t->set_property ("text",
+ make_simple_markup ($1));
+ $$ = t->unprotect ();
+ }
+ | embedded_scm_closed
+ {
+ Music *m = unsmob_music ($1);
+ if (m && m->is_mus_type ("post-event"))
+ $$ = $1;
+ else if (Text_interface::is_markup ($1)) {
+ Music *t = MY_MAKE_MUSIC ("TextScriptEvent", @$);
+ t->set_property ("text", $1);
+ $$ = t->unprotect ();
+ } else
+ parser->parser_error (@1, _ ("not an articulation"));
+ }
;
fingering:
;
script_dir:
- '_' { $$ = DOWN; }
- | '^' { $$ = UP; }
- | '-' { $$ = CENTER; }
+ '_' { $$ = scm_from_int (DOWN); }
+ | '^' { $$ = scm_from_int (UP); }
+ | '-' { $$ = SCM_UNDEFINED; }
;
duration_length:
;
steno_duration:
- bare_unsigned dots {
+ UNSIGNED dots {
int len = 0;
- if (!is_duration ($1))
- parser->parser_error (@1, _f ("not a duration: %d", $1));
+ int n = scm_to_int ($1);
+ if (!is_duration (n))
+ parser->parser_error (@1, _f ("not a duration: %d", n));
else
- len = intlog2 ($1);
+ len = intlog2 (n);
- $$ = Duration (len, $2).smobbed_copy ();
+ $$ = Duration (len, scm_to_int ($2)).smobbed_copy ();
}
| DURATION_IDENTIFIER dots {
Duration *d = unsmob_duration ($1);
- Duration k (d->duration_log (), d->dot_count () + $2);
+ Duration k (d->duration_log (),
+ d->dot_count () + scm_to_int ($2));
k = k.compressed (d->factor ());
- *d = k;
- $$ = $1;
+ scm_remember_upto_here_1 ($1);
+ $$ = k.smobbed_copy ();
}
;
steno_duration {
$$ = $1;
}
- | multiplied_duration '*' bare_unsigned {
- $$ = unsmob_duration ($$)->compressed ( $3) .smobbed_copy ();
+ | multiplied_duration '*' UNSIGNED {
+ $$ = 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)));
dots:
/* empty */ {
- $$ = 0;
+ $$ = SCM_INUM0;
}
| dots '.' {
- $$ ++;
+ $$ = scm_oneplus ($1);
}
;
tremolo_type:
':' {
- $$ = 0;
+ $$ = SCM_INUM0;
}
- | ':' bare_unsigned {
- if (!is_duration ($2))
- parser->parser_error (@2, _f ("not a duration: %d", $2));
+ | ':' UNSIGNED {
+ int n = scm_to_int ($2);
+ if (!is_duration (n))
+ parser->parser_error (@2, _f ("not a duration: %d", n));
$$ = $2;
}
;
UNSIGNED { $$ = $1; }
| STRING { $$ = $1; }
| full_markup { $$ = $1; }
+ | embedded_scm_bare
+ {
+ // as an integer, it needs to be non-negative, and otherwise
+ // it needs to be suitable as a markup.
+ if (scm_is_integer ($1)
+ ? scm_is_true (scm_negative_p ($1))
+ : !Text_interface::is_markup ($1))
+ {
+ parser->parser_error (@1, _ ("bass number expected"));
+ $$ = SCM_INUM0;
+ }
+ }
;
figured_bass_alteration:
optional_rest:
- /**/ { $$ = 0; }
- | REST { $$ = 1; }
+ /**/ { $$ = SCM_BOOL_F; }
+ | REST { $$ = SCM_BOOL_T; }
;
simple_element:
pitch exclamations questions octave_check maybe_notemode_duration optional_rest {
if (!parser->lexer_->is_note_state ())
parser->parser_error (@1, _ ("have to be in Note mode for notes"));
- if ($2 || $3 || scm_is_number ($4) || !SCM_UNBNDP ($5) || $6)
+ if (!SCM_UNBNDP ($2)
+ || !SCM_UNBNDP ($3)
+ || scm_is_number ($4)
+ || !SCM_UNBNDP ($5)
+ || scm_is_true ($6))
{
Music *n = 0;
- if ($6)
+ if (scm_is_true ($6))
n = MY_MAKE_MUSIC ("RestEvent", @$);
else
n = MY_MAKE_MUSIC ("NoteEvent", @$);
n->set_property ("absolute-octave", scm_from_int (q-1));
}
- if ($3 % 2)
+ if (to_boolean ($3))
n->set_property ("cautionary", SCM_BOOL_T);
- if ($2 % 2 || $3 % 2)
+ if (to_boolean ($2) || to_boolean ($3))
n->set_property ("force-accidental", SCM_BOOL_T);
$$ = n->unprotect ();
| LYRICS_STRING {
$$ = $1;
}
+ | LYRIC_ELEMENT
;
-lyric_element_arg:
- lyric_element
- | lyric_element multiplied_duration post_events {
- $$ = MAKE_SYNTAX ("lyric-event", @$, $1, $2);
- if (scm_is_pair ($3))
- unsmob_music ($$)->set_property
- ("articulations", scm_reverse_x ($3, SCM_EOL));
- }
- | lyric_element post_event post_events {
- $$ = MAKE_SYNTAX ("lyric-event", @$, $1,
- parser->default_duration_.smobbed_copy ());
- unsmob_music ($$)->set_property
- ("articulations", scm_cons ($2, scm_reverse_x ($3, SCM_EOL)));
- }
- | LYRIC_ELEMENT optional_notemode_duration post_events {
- $$ = MAKE_SYNTAX ("lyric-event", @$, $1, $2);
- if (scm_is_pair ($3))
- unsmob_music ($$)->set_property
- ("articulations", scm_reverse_x ($3, SCM_EOL));
- }
- ;
-
-
lyric_element_music:
lyric_element optional_notemode_duration post_events {
$$ = MAKE_SYNTAX ("lyric-event", @$, $1, $2);
;
step_number:
- bare_unsigned {
+ UNSIGNED {
$$ = make_chord_step ($1, 0);
}
- | bare_unsigned '+' {
+ | UNSIGNED '+' {
$$ = make_chord_step ($1, SHARP_ALTERATION);
}
- | bare_unsigned CHORD_MINUS {
+ | UNSIGNED CHORD_MINUS {
$$ = make_chord_step ($1, FLAT_ALTERATION);
}
;
tempo_range:
- bare_unsigned {
- $$ = scm_from_int ($1);
+ UNSIGNED {
+ $$ = $1;
}
- | bare_unsigned '~' bare_unsigned {
- $$ = scm_cons (scm_from_int ($1), scm_from_int ($3));
+ | UNSIGNED '~' UNSIGNED {
+ $$ = scm_cons ($1, $3);
}
;
| NUMBER_IDENTIFIER
;
-bare_unsigned:
- UNSIGNED {
- $$ = scm_to_int ($1);
- }
- ;
-
unsigned_number:
UNSIGNED
| NUMBER_IDENTIFIER
;
exclamations:
- { $$ = 0; }
- | exclamations '!' { $$ ++; }
+ { $$ = SCM_UNDEFINED; }
+ | exclamations '!'
+ {
+ if (SCM_UNBNDP ($1))
+ $$ = SCM_BOOL_T;
+ else
+ $$ = scm_not ($1);
+ }
;
questions:
- { $$ = 0; }
- | questions '?' { $$ ++; }
+ { $$ = SCM_UNDEFINED; }
+ | questions '?'
+ {
+ if (SCM_UNBNDP ($1))
+ $$ = SCM_BOOL_T;
+ else
+ $$ = scm_not ($1);
+ }
;
/*
*/
lyric_markup:
- LYRIC_MARKUP_IDENTIFIER {
- $$ = $1;
- }
- | LYRIC_MARKUP
+ LYRIC_MARKUP
{ parser->lexer_->push_markup_state (); }
markup_top {
$$ = $3;
;
full_markup_list:
- MARKUPLIST_IDENTIFIER {
- $$ = $1;
- }
- | MARKUPLIST
+ MARKUPLIST
{ parser->lexer_->push_markup_state (); }
markup_list {
$$ = $3;
;
full_markup:
- MARKUP_IDENTIFIER {
- $$ = $1;
- }
- | MARKUP
+ MARKUP
{ parser->lexer_->push_markup_state (); }
markup_top {
$$ = $3;
markup_list:
- MARKUPLIST_IDENTIFIER {
- $$ = $1;
- }
- | markup_composed_list {
+ markup_composed_list {
$$ = $1;
}
| markup_braced_list {
STRING {
$$ = make_simple_markup ($1);
}
- | MARKUP_IDENTIFIER {
- $$ = $1;
- }
- | LYRIC_MARKUP_IDENTIFIER {
- $$ = $1;
- }
- | STRING_IDENTIFIER {
- $$ = $1;
- }
| SCORE {
SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
parser->lexer_->push_note_state (nn);
} '{' score_body '}' {
- Score * sc = $4;
- $$ = scm_list_2 (ly_lily_module_constant ("score-markup"), sc->self_scm ());
- sc->unprotect ();
+ $$ = scm_list_2 (ly_lily_module_constant ("score-markup"), $4);
parser->lexer_->pop_state ();
}
| MARKUP_FUNCTION markup_command_basic_arguments {
yydebug = x;
}
-void
+SCM
Lily_parser::do_yyparse ()
{
- yyparse (this);
+ SCM retval = SCM_UNDEFINED;
+ yyparse (this, &retval);
+ return retval;
}
int
Lily_lexer::try_special_identifiers (SCM *destination, SCM sid)
{
- if (scm_is_string (sid)) {
- *destination = sid;
- return STRING_IDENTIFIER;
- } else if (unsmob_book (sid)) {
+ if (unsmob_book (sid)) {
Book *book = unsmob_book (sid)->clone ();
*destination = book->self_scm ();
book->unprotect ();
*destination = unsmob_context_mod (sid)->smobbed_copy ();
return CONTEXT_MOD_IDENTIFIER;
- } else if (unsmob_score (sid)) {
- Score *score = new Score (*unsmob_score (sid));
- *destination = score->self_scm ();
-
- score->unprotect ();
- return SCORE_IDENTIFIER;
} else if (Music *mus = unsmob_music (sid)) {
mus = mus->clone ();
*destination = mus->self_scm ();
*destination = p->self_scm ();
p->unprotect ();
return OUTPUT_DEF_IDENTIFIER;
- } else if (Text_interface::is_markup (sid)) {
- *destination = sid;
- if (is_lyric_state ())
- return LYRIC_MARKUP_IDENTIFIER;
- return MARKUP_IDENTIFIER;
- } else if (Text_interface::is_markup_list (sid)) {
- *destination = sid;
- return MARKUPLIST_IDENTIFIER;
}
return -1;
return scm_from_locale_string (s);
}
+// check_scheme_arg checks one argument with a given predicate for use
+// in an argument list and throws a syntax error if it is unusable.
+// The argument is prepended to the argument list in any case. After
+// throwing a syntax error, the argument list is terminated with #f as
+// its last cdr in order to mark it as uncallable while not losing
+// track of its total length.
+//
+// There are a few special considerations: if optional argument disp
+// is given (otherwise it defaults to SCM_UNDEFINED), it will be used
+// instead of arg in a prospective error message. This is useful if
+// arg is not the actual argument but rather a transformation of it.
+//
+// If arg itself is SCM_UNDEFINED, the predicate is considered false
+// and an error message using disp is produced unconditionally.
+
SCM check_scheme_arg (Lily_parser *parser, Input loc,
- SCM arg, SCM args, SCM pred)
+ SCM arg, SCM args, SCM pred, SCM disp)
{
- args = scm_cons (arg, args);
- if (scm_is_true (scm_call_1 (pred, arg)))
- return args;
+ if (SCM_UNBNDP (arg))
+ args = scm_cons (disp, args);
+ else {
+ args = scm_cons (arg, args);
+ if (scm_is_true (scm_call_1 (pred, arg)))
+ return args;
+ }
scm_set_cdr_x (scm_last_pair (args), SCM_EOL);
- MAKE_SYNTAX ("argument-error", loc, scm_length (args), pred, arg);
+ MAKE_SYNTAX ("argument-error", loc, scm_length (args), pred,
+ SCM_UNBNDP (disp) ? arg : disp);
scm_set_cdr_x (scm_last_pair (args), SCM_BOOL_F);
return args;
}
return arg;
}
+SCM
+try_string_variants (SCM pred, SCM str)
+{
+ // a matching predicate is always ok
+ if (scm_is_true (scm_call_1 (pred, str)))
+ return str;
+ // a symbol may be interpreted as a list of symbols if it helps
+ if (scm_is_symbol (str)) {
+ str = scm_list_1 (str);
+ if (scm_is_true (scm_call_1 (pred, str)))
+ return str;
+ return SCM_UNDEFINED;
+ }
+
+ // If this cannot be a string representation of a symbol list,
+ // we are through.
+
+ if (!is_regular_identifier (str, true))
+ return SCM_UNDEFINED;
+
+ str = scm_string_split (str, SCM_MAKE_CHAR ('.'));
+ for (SCM p = str; scm_is_pair (p); p = scm_cdr (p))
+ scm_set_car_x (p, scm_string_to_symbol (scm_car (p)));
+
+ // Let's attempt the symbol list interpretation first.
+
+ if (scm_is_true (scm_call_1 (pred, str)))
+ return str;
+
+ // If there is just one symbol in the list, we might interpret
+ // it as a single symbol
+
+ if (scm_is_null (scm_cdr (str)))
+ {
+ str = scm_car (str);
+ if (scm_is_true (scm_call_1 (pred, str)))
+ return str;
+ }
+
+ return SCM_UNDEFINED;
+}
+
bool
-is_regular_identifier (SCM id)
+is_regular_identifier (SCM id, bool multiple)
{
+ if (!scm_is_string (id))
+ return false;
+
string str = ly_scm2string (id);
- char const *s = str.c_str ();
- bool v = true;
-#if 0
- isalpha (*s);
- s++;
-#endif
- while (*s && v)
- {
- v = v && isalnum (*s);
- s++;
- }
- return v;
+ bool middle = false;
+
+ for (string::iterator it=str.begin(); it != str.end (); it++)
+ {
+ int c = *it & 0xff;
+ if ((c >= 'a' && c <= 'z')
+ || (c >= 'A' && c <= 'Z')
+ || c > 0x7f)
+ middle = true;
+ else if (middle && (c == '-' || c == '_' || (multiple && c == '.')))
+ middle = false;
+ else
+ return false;
+ }
+ return middle;
+}
+
+SCM
+make_music_from_simple (Lily_parser *parser, Input loc, SCM simple)
+{
+ if (unsmob_music (simple))
+ return simple;
+ if (parser->lexer_->is_note_state ()) {
+ if (scm_is_symbol (simple)) {
+ Music *n = MY_MAKE_MUSIC ("NoteEvent", loc);
+ n->set_property ("duration", parser->default_duration_.smobbed_copy ());
+ n->set_property ("drum-type", simple);
+ return n->unprotect ();
+ }
+ 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 n->unprotect ();
+ }
+ return simple;
+ } else if (parser->lexer_->is_lyric_state ()) {
+ if (Text_interface::is_markup (simple))
+ return MAKE_SYNTAX ("lyric-event", loc, simple,
+ parser->default_duration_.smobbed_copy ());
+ } else if (parser->lexer_->is_chord_state ()) {
+ if (unsmob_pitch (simple))
+ return make_chord_elements (loc, simple,
+ parser->default_duration_.smobbed_copy (),
+ SCM_EOL);
+ }
+ return simple;
}
Music *
return t && t == 1 << intlog2 (t);
}
-void
-set_music_properties (Music *p, SCM a)
-{
- for (SCM k = a; scm_is_pair (k); k = scm_cdr (k))
- p->set_property (scm_caar (k), scm_cdar (k));
-}
-
-
SCM
-make_chord_step (int step, Rational alter)
+make_chord_step (SCM step_scm, Rational alter)
{
+ int step = scm_to_int (step_scm);
+
if (step == 7)
alter += FLAT_ALTERATION;
DECLARE_ACKNOWLEDGER (script);
DECLARE_ACKNOWLEDGER (dots);
DECLARE_ACKNOWLEDGER (text_script);
- DECLARE_ACKNOWLEDGER (tie);
+ DECLARE_END_ACKNOWLEDGER (tie);
DECLARE_ACKNOWLEDGER (tuplet_number);
void acknowledge_extra_object (Grob_info);
}
void
-Phrasing_slur_engraver::acknowledge_tie (Grob_info info)
+Phrasing_slur_engraver::acknowledge_end_tie (Grob_info info)
{
acknowledge_extra_object (info);
}
ADD_ACKNOWLEDGER (Phrasing_slur_engraver, script);
ADD_ACKNOWLEDGER (Phrasing_slur_engraver, dots);
ADD_ACKNOWLEDGER (Phrasing_slur_engraver, text_script);
-ADD_ACKNOWLEDGER (Phrasing_slur_engraver, tie);
+ADD_END_ACKNOWLEDGER (Phrasing_slur_engraver, tie);
ADD_ACKNOWLEDGER (Phrasing_slur_engraver, tuplet_number);
ADD_TRANSLATOR (Phrasing_slur_engraver,
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+ Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+ Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
if (relocate_binary)
{
string prefix_directory;
- if (getenv ("LILYPOND_RELOCATE_PREFIX"))
+ string argv0_abs;
+ if (argv0_filename.is_absolute ())
{
- prefix_directory = getenv ("LILYPOND_RELOCATE_PREFIX");
-#ifdef __MINGW32__
- /* Normalize file name. */
- prefix_directory = File_name (prefix_directory).to_string ();
-#endif /* __MINGW32__ */
-
- prefix_relocation (prefix_directory);
- string bindir = prefix_directory + "/bin";
- framework_relocation (bindir);
+ argv0_abs = argv0_filename.to_string ();
+ debug_output (_f ("Relocation: is absolute: argv0=%s\n", argv0_ptr));
}
- else if (relocate_binary)
+ else if (argv0_filename.dir_.length ())
{
- string argv0_abs;
- if (argv0_filename.is_absolute ())
- {
- argv0_abs = argv0_filename.to_string ();
- debug_output (_f ("Relocation: is absolute: argv0=%s\n", argv0_ptr));
- }
- else if (argv0_filename.dir_.length ())
- {
- argv0_abs = get_working_directory ()
- + "/" + string (argv0_filename.to_string ());
- debug_output (_f ("Relocation: from cwd: argv0=%s\n", argv0_ptr));
- }
- else
- {
- /* Find absolute ARGV0 name, using PATH. */
- File_path path;
- path.parse_path (getenv ("PATH"));
+ argv0_abs = get_working_directory ()
+ + "/" + string (argv0_filename.to_string ());
+ debug_output (_f ("Relocation : from cwd: argv0=%s\n", argv0_ptr));
+ }
+ else
+ {
+ /* Find absolute ARGV0 name, using PATH. */
+ File_path path;
+ path.parse_path (getenv ("PATH"));
#ifndef __MINGW32__
- argv0_abs = path.find (argv0_filename.to_string ());
+ argv0_abs = path.find (argv0_filename.to_string ());
#else /* __MINGW32__ */
- path.prepend (get_working_directory ());
- char const *ext[] = {"exe", "", 0 };
- argv0_abs = path.find (argv0_filename.to_string (), ext);
+ path.prepend (get_working_directory ());
+ char const *ext[] = {"exe", "", 0 };
+ argv0_abs = path.find (argv0_filename.to_string (), ext);
#endif /* __MINGW32__ */
- debug_output (_f ("Relocation: from PATH=%s\nargv0=%s",
- path.to_string ().c_str (), argv0_ptr), true);
+ debug_output (_f ("Relocation: from PATH=%s\nargv0=%s\n",
+ path.to_string ().c_str (), argv0_ptr), true);
- if (argv0_abs.empty ())
- programming_error ("cannot find absolute argv0");
- }
+ if (argv0_abs.empty ())
+ programming_error ("cannot find absolute argv0");
+ }
- string bindir = dir_name (argv0_abs);
- string argv0_prefix = dir_name (bindir);
- string compile_prefix = dir_name (dir_name (dir_name (lilypond_datadir)));
- if (argv0_prefix != compile_prefix)
- {
- prefix_relocation (argv0_prefix);
- prefix_directory = argv0_prefix;
- }
- if (argv0_prefix != compile_prefix || string (FRAMEWORKDIR) != "..")
- {
- framework_relocation (bindir + "/" + FRAMEWORKDIR);
- prefix_directory = bindir + "/" + FRAMEWORKDIR;
- }
+ string bindir = dir_name (argv0_abs);
+ string argv0_prefix = dir_name (bindir);
+ string compile_prefix = dir_name (dir_name (dir_name (lilypond_datadir)));
+ if (argv0_prefix != compile_prefix)
+ {
+ prefix_relocation (argv0_prefix);
+ prefix_directory = argv0_prefix;
+ }
+ if (argv0_prefix != compile_prefix || string (FRAMEWORKDIR) != "..")
+ {
+ framework_relocation (bindir + "/" + FRAMEWORKDIR);
+ prefix_directory = bindir + "/" + FRAMEWORKDIR;
}
lilypond_datadir = prefix_directory
if (segno)
if (start)
if (end) // { segno, start, end }
- s = robust_scm2string (get_property ("doubleRepeatSegnoType"), ":|S|:");
+ s = robust_scm2string (get_property ("doubleRepeatSegnoType"), ":|.S.|:");
else // { segno, start }
- s = robust_scm2string (get_property ("startRepeatSegnoType"), ".S|:");
+ s = robust_scm2string (get_property ("startRepeatSegnoType"), "S.|:");
else if (end) // { segno, end }
- s = robust_scm2string (get_property ("endRepeatSegnoType"), ":|S");
+ s = robust_scm2string (get_property ("endRepeatSegnoType"), ":|.S");
else // { segno }
s = robust_scm2string (get_property ("segnoType"), "S");
else if (start)
if (end) // { start, end }
- s = robust_scm2string (get_property ("doubleRepeatType"), ":|:");
+ s = robust_scm2string (get_property ("doubleRepeatType"), ":|.|:");
else // { start }
- s = robust_scm2string (get_property ("startRepeatType"), "|:");
+ s = robust_scm2string (get_property ("startRepeatType"), ".|:");
else if (end) // { end }
- s = robust_scm2string (get_property ("endRepeatType"), ":|");
+ s = robust_scm2string (get_property ("endRepeatType"), ":|.");
/*
TODO: line breaks might be allowed if we set whichBar to "".
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2012 Mike Solomon <mike@apollinemike.com>
+ Copyright (C) 2012 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
DECLARE_ACKNOWLEDGER (rhythmic_head);
DECLARE_ACKNOWLEDGER (stem);
DECLARE_ACKNOWLEDGER (stem_tremolo);
+ DECLARE_ACKNOWLEDGER (tie);
+ DECLARE_END_ACKNOWLEDGER (tie);
DECLARE_ACKNOWLEDGER (note_column);
DECLARE_ACKNOWLEDGER (inline_accidental);
}
}
+void
+Script_engraver::acknowledge_tie (Grob_info info)
+{
+ for (vsize i = 0; i < scripts_.size (); i++)
+ {
+ Grob *e = scripts_[i].script_;
+ Side_position_interface::add_support (e, info.grob ());
+ }
+}
+
+void
+Script_engraver::acknowledge_end_tie (Grob_info info)
+{
+ for (vsize i = 0; i < scripts_.size (); i++)
+ {
+ Grob *e = scripts_[i].script_;
+ Side_position_interface::add_support (e, info.grob ());
+ }
+}
+
void
Script_engraver::acknowledge_inline_accidental (Grob_info info)
{
ADD_ACKNOWLEDGER (Script_engraver, rhythmic_head);
ADD_ACKNOWLEDGER (Script_engraver, stem);
+ADD_ACKNOWLEDGER (Script_engraver, tie);
+ADD_END_ACKNOWLEDGER (Script_engraver, tie);
ADD_ACKNOWLEDGER (Script_engraver, note_column);
ADD_ACKNOWLEDGER (Script_engraver, stem_tremolo);
ADD_ACKNOWLEDGER (Script_engraver, inline_accidental);
"An object that is put above or below a note.",
/* properties */
- "add-stem-support "
"avoid-slur "
"script-priority "
"slur "
"An object that is put above or below a note.",
/* properties */
- "add-stem-support "
"avoid-slur "
"direction-source "
"positioning-done "
Interval iv = me->extent (me, a) + offset;
for (vsize i = 0; i < colls.size (); i++)
- ivs.push_back (colls[i]->extent (refp, a));
+ {
+ int my_vai = Grob::get_vertical_axis_group_index (colls[i]);
+ Direction dir = get_grob_direction (colls[i]);
+ // if coll is cross staff but extremal and pointing in the
+ // direction of the extrema, we don't take it into consideration
+ if (Grob *beam = unsmob_grob (colls[i]->get_object ("beam")))
+ {
+ Interval_t<int> vais;
+ extract_grob_set (beam, "normal-stems", stems);
+ for (vsize j = 0; j < stems.size (); j++)
+ vais.add_point (Grob::get_vertical_axis_group_index (stems[j]));
+ // ugh...up and down are different for VerticalAxisGroup order...
+ if ((my_vai == vais[DOWN] && dir == UP)
+ || (my_vai == vais[UP] && dir == DOWN))
+ continue;
+ }
+ ivs.push_back (colls[i]->extent (refp, a));
+ }
Interval_minefield minefield (Interval (iv.center (), iv.center ()), iv.length ());
for (vsize i = 0; i < ivs.size (); i++)
Separation_item::conditional_skyline (Grob *me, Grob *left)
{
vector<Box> bs = boxes (me, left);
- Real horizon_padding = robust_scm2double (me->get_property ("skyline-vertical-padding"), 0.0);
- return Skyline (bs, horizon_padding, Y_AXIS, LEFT);
+ return Skyline (bs, Y_AXIS, LEFT);
}
MAKE_SCHEME_CALLBACK (Separation_item, calc_skylines, 1);
{
Item *me = unsmob_item (smob);
vector<Box> bs = boxes (me, 0);
- Real horizon_padding = robust_scm2double (me->get_property ("skyline-vertical-padding"), 0.0);
- return Skyline_pair (bs, horizon_padding, Y_AXIS).smobbed_copy ();
+ Skyline_pair sp (bs, Y_AXIS);
+ /*
+ TODO: We need to decide if padding is 'intrinsic'
+ to a skyline or if it is something that is only added on in
+ distance calculations. Here, we make it intrinsic, which copies
+ the behavior from the old code but no longer corresponds to how
+ vertical skylines are handled (where padding is not built into
+ the skyline).
+ */
+ Real vp = robust_scm2double (me->get_property ("skyline-vertical-padding"), 0.0);
+ sp[LEFT] = sp[LEFT].padded (vp);
+ sp[RIGHT] = sp[RIGHT].padded (vp);
+ return sp.smobbed_copy ();
}
/* if left is non-NULL, get the boxes corresponding to the
#include <cmath> // ceil.
#include <algorithm>
+#include <set>
+#include <map>
using namespace std;
#include "accidental-interface.hh"
+#include "accidental-placement.hh"
#include "axis-group-interface.hh"
#include "directional-element-interface.hh"
#include "grob.hh"
#include "main.hh"
#include "misc.hh"
#include "note-head.hh"
+#include "note-column.hh"
#include "pointer-group-interface.hh"
+#include "skyline-pair.hh"
#include "staff-symbol-referencer.hh"
#include "staff-symbol.hh"
#include "stem.hh"
return scm_from_double (total_off);
}
+set<Grob *>
+get_support_set (Grob *me)
+{
+ // Only slightly kludgy heuristic...
+ // We want to make sure that all AccidentalPlacements'
+ // accidentals make it into the side support
+ extract_grob_set (me, "side-support-elements", proto_support);
+ set<Grob *> support;
+
+ for (vsize i = 0; i < proto_support.size (); i++)
+ {
+ if (Accidental_placement::has_interface (proto_support[i]))
+ {
+ Grob *accs = proto_support[i];
+ for (SCM acs = accs->get_object ("accidental-grobs"); scm_is_pair (acs);
+ acs = scm_cdr (acs))
+ for (SCM s = scm_cdar (acs); scm_is_pair (s); s = scm_cdr (s))
+ {
+ Grob *a = unsmob_grob (scm_car (s));
+ support.insert (a);
+ }
+ }
+ else
+ support.insert (proto_support[i]);
+ }
+ return support;
+}
+
/* Put the element next to the support, optionally taking in
account the extent of the support.
bool pure, int start, int end,
Real *current_offset)
{
- extract_grob_set (me, "side-support-elements", support);
+ set<Grob *> support = get_support_set (me);
Grob *common = common_refpoint_of_array (support, me->get_parent (a), a);
Grob *staff_symbol = Staff_symbol_referencer::get_staff_symbol (me);
Direction dir = get_grob_direction (me);
- for (vsize i = 0; i < support.size (); i++)
+ set<Grob *>::iterator it;
+
+ for (it = support.begin (); it != support.end (); it++)
{
- Grob *e = support[i];
+ Grob *e = *it;
// In the case of a stem, we will find a note head as well
// ignoring the stem solves cyclic dependencies if the stem is
bool pure, int start, int end,
Real *current_offset)
{
- extract_grob_set (me, "side-support-elements", support);
+ set<Grob *> support = get_support_set (me);
Grob *common[2];
for (Axis ax = X_AXIS; ax < NO_AXES; incr (ax))
Grob *staff_symbol = Staff_symbol_referencer::get_staff_symbol (me);
Direction dir = get_grob_direction (me);
- Box off;
- for (Axis ax = X_AXIS; ax < NO_AXES; incr (ax))
+ Skyline my_dim;
+ Skyline_pair *sp = Skyline_pair::unsmob (me->get_property ("vertical-skylines"));
+ if (sp && a == Y_AXIS && !pure)
{
- if (ax == a)
- off[ax] = me->get_parent (ax)->maybe_pure_coordinate (common[ax], ax, pure, start, end)
- + me->maybe_pure_extent (me, ax, pure, start, end);
- else
- off[ax] = me->maybe_pure_extent (common[ax], ax, pure, start, end);
+ Skyline_pair copy = Skyline_pair (*sp);
+ copy.shift (me->relative_coordinate (common[X_AXIS], X_AXIS));
+ copy.raise (me->get_parent (Y_AXIS)->relative_coordinate (common[Y_AXIS], Y_AXIS));
+ my_dim = copy[-dir];
}
+ else
+ {
+ Box off;
+ for (Axis ax = X_AXIS; ax < NO_AXES; incr (ax))
+ {
+ if (ax == a)
+ off[ax] = me->get_parent (ax)->maybe_pure_coordinate (common[ax], ax, pure, start, end)
+ + me->maybe_pure_extent (me, ax, pure, start, end);
+ else
+ off[ax] = me->maybe_pure_extent (common[ax], ax, pure, start, end);
+ }
- if (off[X_AXIS].is_empty () || off[Y_AXIS].is_empty ())
- return scm_from_double (0.0);
-
- Real skyline_padding = 0.1;
-
- Skyline my_dim (off, skyline_padding, other_axis (a), -dir);
+ if (off[X_AXIS].is_empty () || off[Y_AXIS].is_empty ())
+ return scm_from_double (0.0);
+ my_dim = Skyline (off, other_axis (a), -dir);
+ }
bool include_staff
= staff_symbol
&& a == Y_AXIS
&& !to_boolean (me->get_property ("quantize-position"));
vector<Box> boxes;
+ vector<Skyline_pair> skyps;
Real min_h = dir == LEFT ? infinity_f : -infinity_f;
- for (vsize i = 0; i < support.size (); i++)
+ set<Grob *>::iterator it;
+
+ map<Grob *, vector<Grob *> > note_column_map; // for parts of a note column
+ for (it = support.begin (); it != support.end (); it++)
{
- Grob *e = support[i];
+ Grob *e = *it;
// In the case of a stem, we will find a note head as well
// ignoring the stem solves cyclic dependencies if the stem is
if (e)
{
- if (Accidental_interface::has_interface (e))
- {
- vector<Box> bs = Accidental_interface::accurate_boxes (e, common);
- boxes.insert (boxes.end (), bs.begin (), bs.end ());
- }
- else
- {
- Box b;
- for (Axis ax = X_AXIS; ax < NO_AXES; incr (ax))
- b[ax] = e->maybe_pure_extent (common[ax], ax, pure, start, end);
+ if (Note_column::has_interface (e->get_parent (X_AXIS))
+ && to_boolean (me->get_property ("add-stem-support")))
+ {
+ note_column_map[e->get_parent (X_AXIS)].push_back (e);
+ continue;
+ }
+
+ Skyline_pair *sp = Skyline_pair::unsmob (e->get_property ("vertical-skylines"));
+ if (sp && a == Y_AXIS && !pure)
+ {
+ Skyline_pair copy = Skyline_pair (*sp);
+ copy.shift (e->relative_coordinate (common[X_AXIS], X_AXIS));
+ copy.raise (e->relative_coordinate (common[Y_AXIS], Y_AXIS));
+ skyps.push_back (copy);
+ continue;
+ }
+ Box b;
+ for (Axis ax = X_AXIS; ax < NO_AXES; incr (ax))
+ b[ax] = e->maybe_pure_extent (common[ax], ax, pure, start, end);
+
+ if (b[X_AXIS].is_empty () || b[Y_AXIS].is_empty ())
+ continue;
+
+ boxes.push_back (b);
+ min_h = minmax (dir, b[a][-dir], min_h);
+ }
+ }
- if (b[X_AXIS].is_empty () || b[Y_AXIS].is_empty ())
- continue;
+ // this loop ensures that parts of a note column will be in the same box
+ // pushes scripts and such over stems instead of just over heads
+ for (map<Grob *, vector<Grob *> >::iterator i = note_column_map.begin (); i != note_column_map.end (); i++)
+ {
+ Box big;
+ for (vsize j = 0; j < (*i).second.size (); j++)
+ {
+ Grob *e = (*i).second[j];
+ Box b;
+ for (Axis ax = X_AXIS; ax < NO_AXES; incr (ax))
+ b[ax] = e->maybe_pure_extent (common[ax], ax, pure, start, end);
- boxes.push_back (b);
- min_h = minmax (dir, b[a][-dir], min_h);
- }
+ if (b[X_AXIS].is_empty () || b[Y_AXIS].is_empty ())
+ continue;
+
+ big.unite (b);
}
+ if (!big[X_AXIS].is_empty () && !big[Y_AXIS].is_empty ())
+ boxes.push_back (big);
}
- Skyline dim (boxes, skyline_padding, other_axis (a), dir);
+ Skyline dim (boxes, other_axis (a), dir);
+ if (skyps.size ())
+ {
+ Skyline_pair merged (skyps);
+ dim.merge (merged[dir]);
+ }
if (!boxes.size ())
dim.set_minimum_height (0.0);
else
dim.set_minimum_height (minmax (dir, min_h, staff_extents[dir]));
}
- Real total_off = dir * dim.distance (my_dim);
+ Real dist = dim.distance (my_dim, 0.1); // 0.1 m4g1c value...fix...
+ Real total_off = !isinf (dist) ? dir * dist : 0.0;
+
return finish_offset (me, dir, total_off, current_offset);
}
Direction dir = get_grob_direction (me);
bool skyline = to_boolean (me->get_property ("use-skylines"));
- Real o = scm_to_double (skyline
+ Real o = scm_to_double (skyline && !pure
? skyline_side_position (me, a, pure, start, end, current_off)
: general_side_position (me, a, true, true, pure, start, end, current_off));
" is ignored.",
/* properties */
+ "add-stem-support "
"direction "
"minimum-space "
"padding "
if (next_col)
description.spring_ = Spaceable_grob::get_spring (col, next_col);
- Grob *end_col = dynamic_cast<Item *> (cols[col_index + 1])->find_prebroken_piece (LEFT);
- if (end_col)
- description.end_spring_ = Spaceable_grob::get_spring (col, end_col);
+ if (col_index + 1 < cols.size ())
+ {
+ Grob *end_col = dynamic_cast<Item *> (cols[col_index + 1])->find_prebroken_piece (LEFT);
+ if (end_col)
+ description.end_spring_ = Spaceable_grob::get_spring (col, end_col);
+ }
for (SCM s = Spaceable_grob::get_minimum_distances (col);
scm_is_pair (s); s = scm_cdr (s))
{
}
-Skyline_pair::Skyline_pair (vector<Box> const &boxes, Real padding, Axis a)
- : skylines_ (Skyline (boxes, padding, a, DOWN), Skyline (boxes, padding, a, UP))
+Skyline_pair::Skyline_pair (vector<Box> const &boxes, Axis a)
+ : skylines_ (Skyline (boxes, a, DOWN), Skyline (boxes, a, UP))
{
}
-Skyline_pair::Skyline_pair (Box const &b, Real padding, Axis a)
- : skylines_ (Skyline (b, padding, a, DOWN), Skyline (b, padding, a, UP))
+Skyline_pair::Skyline_pair (vector<Drul_array<Offset> > const &buildings, Axis a)
+ : skylines_ (Skyline (buildings, a, DOWN), Skyline (buildings, a, UP))
+{
+}
+
+Skyline_pair::Skyline_pair (vector<Skyline_pair> const &skypairs)
+ : skylines_ (Skyline (skypairs, DOWN), Skyline (skypairs, UP))
+{
+}
+
+Skyline_pair::Skyline_pair (Box const &b, Axis a)
+ : skylines_ (Skyline (b, a, DOWN), Skyline (b, a, UP))
{
}
skylines_[DOWN].raise (r);
}
+void
+Skyline_pair::deholify ()
+{
+ skylines_[UP].deholify ();
+ skylines_[DOWN].deholify ();
+}
+
void
Skyline_pair::shift (Real r)
{
}
void
-Skyline_pair::insert (Box const &b, Real padding, Axis a)
+Skyline_pair::insert (Box const &b, Axis a)
{
- skylines_[UP].insert (b, padding, a);
- skylines_[DOWN].insert (b, padding, a);
+ skylines_[UP].insert (b, a);
+ skylines_[DOWN].insert (b, a);
}
void
skylines_[DOWN].print ();
}
+Real
+Skyline_pair::left () const
+{
+ return min (skylines_[UP].left (), skylines_[DOWN].left ());
+}
+
+Real
+Skyline_pair::right () const
+{
+ return max (skylines_[UP].right (), skylines_[DOWN].right ());
+}
+
void
Skyline_pair::print_points () const
{
- skylines_[UP].print ();
- skylines_[DOWN].print ();
+ skylines_[UP].print_points ();
+ skylines_[DOWN].print_points ();
}
bool
*/
#include "skyline.hh"
+#include "skyline-pair.hh"
#include <deque>
#include <cstdio>
if (isinf (start) || isinf (end))
assert (start_height == end_height);
+ start_ = start;
end_ = end;
precompute (start, start_height, end_height, end);
}
-Building::Building (Box const &b, Real horizon_padding, Axis horizon_axis, Direction sky)
+Building::Building (Box const &b, Axis horizon_axis, Direction sky)
{
- Real start = b[horizon_axis][LEFT] - horizon_padding;
- Real end = b[horizon_axis][RIGHT] + horizon_padding;
+ Real start = b[horizon_axis][LEFT];
+ Real end = b[horizon_axis][RIGHT];
Real height = sky * b[other_axis (horizon_axis)][sky];
+ start_ = start;
end_ = end;
precompute (start, height, height, end);
}
void
Building::precompute (Real start, Real start_height, Real end_height, Real end)
{
- slope_ = (end_height - start_height) / (end - start);
- if (start_height == end_height) /* if they were both infinite, we would get nan, not 0, from the prev line */
- slope_ = 0;
+ slope_ = 0.0; /* if they were both infinite, we would get nan, not 0, from the prev line */
+ if (start_height != end_height)
+ slope_ = (end_height - start_height) / (end - start);
assert (!isinf (slope_) && !isnan (slope_));
y_intercept_ = start_height - slope_ * start;
}
-Real
+inline Real
Building::height (Real x) const
{
return isinf (x) ? y_intercept_ : slope_ * x + y_intercept_;
void
Building::print () const
{
- printf ("%f x + %f ends at %f\n", slope_, y_intercept_, end_);
+ printf ("%f x + %f from %f to %f\n", slope_, y_intercept_, start_, end_);
}
-Real
+inline Real
Building::intersection_x (Building const &other) const
{
Real ret = (y_intercept_ - other.y_intercept_) / (other.slope_ - slope_);
end_ = chop;
}
-Building
-Building::sloped_neighbour (Real start, Real horizon_padding, Direction d) const
+// Returns a shift s such that (x + s, y) intersects the roof of
+// this building. If no such shift exists, returns infinity_f.
+Real
+Building::shift_to_intersect (Real x, Real y) const
{
- Real x = (d == LEFT) ? start : end_;
- Real left = x;
- Real right = x + d * horizon_padding;
- Real left_height = height (x);
- Real right_height = left_height - horizon_padding;
- if (d == LEFT)
- {
- swap (left, right);
- swap (left_height, right_height);
- }
- return Building (left, left_height, right_height, right);
+ // Solve for s: y = (x + s)*m + b
+ Real ret = (y - y_intercept_ - slope_ * x) / slope_;
+
+ if (ret >= start_ && ret <= end_ && !isinf (ret))
+ return ret;
+ return infinity_f;
}
static Real
while (!s->empty () && start_x < b.end_)
{
Building c = s->front ();
+
+ // conceals and intersection_x involve multiplication and
+ // division. Avoid that, if we can.
+ if (c.y_intercept_ == -infinity_f)
+ {
+ if (c.end_ > b.end_)
+ return b.end_;
+ start_x = c.end_;
+ s->pop_front ();
+ continue;
+ }
+
if (c.conceals (b, start_x))
return start_x;
|| (i > x && slope_ < other.slope_);
}
+// Remove redundant empty buildings from the skyline.
+// If there are two adjacent empty buildings, they can be
+// turned into one.
+void
+Skyline::normalize ()
+{
+ bool last_empty = false;
+ list<Building>::iterator i;
+ for (i = buildings_.begin (); i != buildings_.end (); i++)
+ {
+ if (last_empty && i->y_intercept_ == -infinity_f)
+ {
+ list<Building>::iterator last = i;
+ last--;
+ last->end_ = i->end_;
+ buildings_.erase (i);
+ i = last;
+ }
+ last_empty = (i->y_intercept_ == -infinity_f);
+ }
+
+ assert (buildings_.front ().start_ == -infinity_f);
+ assert (buildings_.back ().end_ == infinity_f);
+}
+
+void
+Skyline::deholify ()
+{
+ // Since a skyline should always be normalized, we can
+ // assume that there are never two adjacent empty buildings.
+ // That is, if center is empty then left and right are not.
+ list<Building>::iterator left = buildings_.begin ();
+ list<Building>::iterator center = buildings_.begin ();
+ list<Building>::iterator right;
+
+ for (right = buildings_.begin (); right != buildings_.end (); right++)
+ {
+ if (center != buildings_.begin () && center->y_intercept_ == -infinity_f)
+ {
+ Real p1 = left->height (left->end_);
+ Real p2 = right->height (right->start_);
+ *center = Building (center->start_, p1, p2, center->end_);
+
+ left = center;
+ center = right;
+ }
+ }
+}
+
void
Skyline::internal_merge_skyline (list<Building> *s1, list<Building> *s2,
- list<Building> *const result)
+ list<Building> *const result) const
{
if (s1->empty () || s2->empty ())
{
}
Real x = -infinity_f;
+ Real last_end = -infinity_f;
while (!s1->empty ())
{
if (s2->front ().conceals (s1->front (), x))
swap (s1, s2);
Building b = s1->front ();
- Real end = first_intersection (b, s2, x);
+ Building c = s2->front ();
+ // Optimization: if the other skyline is empty at this point,
+ // we can avoid testing some intersections. Just grab as many
+ // buildings from s1 as we can, and shove them onto the output.
+ if (c.y_intercept_ == -infinity_f
+ && c.end_ >= b.end_)
+ {
+ list<Building>::iterator i = s1->begin ();
+ i++;
+ while (i != s1->end () && i->end_ <= c.end_)
+ i++;
+
+ s1->front ().start_ = x;
+ result->splice (result->end (), *s1, s1->begin (), i);
+ x = result->back ().end_;
+ last_end = x;
+ continue;
+ }
+
+ Real end = first_intersection (b, s2, x);
if (s2->empty ())
{
- result->push_front (b);
+ b.start_ = last_end;
+ result->push_back (b);
break;
}
if (end > x + EPS)
{
b.leading_part (end);
- result->push_front (b);
+ b.start_ = last_end;
+ last_end = b.end_;
+ result->push_back (b);
}
if (end >= s1->front ().end_)
x = end;
}
- result->reverse ();
}
static void
}
/*
- Given Building 'b' with starting wall location 'start', extend each side
- with a sloped roofline of width 'horizon_padding'; put the skyline in 'ret'
+ Given Building 'b', build a skyline containing only that building.
*/
static void
-single_skyline (Building b, Real start, Real horizon_padding, list<Building> *const ret)
+single_skyline (Building b, list<Building> *const ret)
{
- bool sloped_neighbours = horizon_padding > 0 && !isinf (start) && !isinf (b.end_);
- if (!isinf (b.end_))
- ret->push_front (Building (b.end_ + horizon_padding, -infinity_f,
- -infinity_f, infinity_f));
- if (sloped_neighbours)
- ret->push_front (b.sloped_neighbour (start, horizon_padding, RIGHT));
-
- if (b.end_ > start + EPS)
- ret->push_front (b);
-
- if (sloped_neighbours)
- ret->push_front (b.sloped_neighbour (start, horizon_padding, LEFT));
-
- if (!isinf (start))
- ret->push_front (Building (-infinity_f, -infinity_f,
- -infinity_f, start - horizon_padding));
+ if (b.end_ > b.start_ + EPS)
+ {
+ ret->push_back (Building (-infinity_f, -infinity_f,
+ -infinity_f, b.start_));
+ ret->push_back (b);
+ ret->push_back (Building (b.end_, -infinity_f,
+ -infinity_f, infinity_f));
+ }
+ else
+ {
+ empty_skyline (ret);
+ }
}
/* remove a non-overlapping set of boxes from BOXES and build a skyline
out of them */
static list<Building>
-non_overlapping_skyline (list<Box> *const boxes, Real horizon_padding, Axis horizon_axis, Direction sky)
+non_overlapping_skyline (list<Building> *const buildings)
{
list<Building> result;
Real last_end = -infinity_f;
- list<Box>::iterator i = boxes->begin ();
- while (i != boxes->end ())
+ Building last_building (-infinity_f, -infinity_f, -infinity_f, infinity_f);
+ list<Building>::iterator i = buildings->begin ();
+ while (i != buildings->end ())
{
- Interval iv = (*i)[horizon_axis];
+ Real x1 = i->start_;
+ Real y1 = i->height (i->start_);
+ Real x2 = i->end_;
+ Real y2 = i->height (i->end_);
+
+ // Drop buildings that will obviously have no effect.
+ if (last_building.height (x1) >= y1
+ && last_building.end_ >= x2
+ && last_building.height (x2) >= y2)
+ {
+ list<Building>::iterator j = i++;
+ buildings->erase (j);
+ continue;
+ }
- if (iv[LEFT] - horizon_padding < last_end)
+ if (x1 < last_end)
{
i++;
continue;
}
- if (iv[LEFT] - horizon_padding > last_end + EPS)
- result.push_front (Building (last_end, -infinity_f, -infinity_f, iv[LEFT] - 2 * horizon_padding));
+ if (x1 > last_end + EPS)
+ result.push_back (Building (last_end, -infinity_f, -infinity_f, x1));
- Building b (*i, horizon_padding, horizon_axis, sky);
- bool sloped_neighbours = horizon_padding > 0 && !isinf (iv.length ());
- if (sloped_neighbours)
- result.push_front (b.sloped_neighbour (iv[LEFT] - horizon_padding, horizon_padding, LEFT));
- result.push_front (b);
- if (sloped_neighbours)
- result.push_front (b.sloped_neighbour (iv[LEFT] - horizon_padding, horizon_padding, RIGHT));
+ result.push_back (*i);
+ last_building = *i;
+ last_end = i->end_;
- list<Box>::iterator j = i++;
- boxes->erase (j);
- last_end = result.front ().end_;
+ list<Building>::iterator j = i++;
+ buildings->erase (j);
}
+
if (last_end < infinity_f)
- result.push_front (Building (last_end, -infinity_f, -infinity_f, infinity_f));
- result.reverse ();
+ result.push_back (Building (last_end, -infinity_f, -infinity_f, infinity_f));
return result;
}
-class LessThanBox
+class LessThanBuilding
{
- Axis a_;
-
public:
- LessThanBox (Axis a)
- {
- a_ = a;
- }
-
- bool operator () (Box const &b1, Box const &b2)
+ bool operator () (Building const &b1, Building const &b2)
{
- return b1[a_][LEFT] < b2[a_][LEFT];
+ return b1.start_ < b2.start_
+ || (b1.start_ == b2.start_ && b1.height (b1.start_) > b2.height (b1.start_));
}
};
+/**
+ BUILDINGS is a list of buildings, but they could be overlapping
+ and in any order. The returned list of buildings is ordered and non-overlapping.
+*/
list<Building>
-Skyline::internal_build_skyline (list<Box> *boxes, Real horizon_padding, Axis horizon_axis, Direction sky)
+Skyline::internal_build_skyline (list<Building> *buildings) const
{
- vsize size = boxes->size ();
+ vsize size = buildings->size ();
if (size == 0)
{
else if (size == 1)
{
list<Building> result;
- single_skyline (Building (boxes->front (), horizon_padding, horizon_axis, sky),
- boxes->front ()[horizon_axis][LEFT] - horizon_padding,
- horizon_padding, &result);
+ single_skyline (buildings->front (), &result);
return result;
}
deque<list<Building> > partials;
- boxes->sort (LessThanBox (horizon_axis));
- while (!boxes->empty ())
- partials.push_back (non_overlapping_skyline (boxes, horizon_padding, horizon_axis, sky));
+ buildings->sort (LessThanBuilding ());
+ while (!buildings->empty ())
+ partials.push_back (non_overlapping_skyline (buildings));
/* we'd like to say while (partials->size () > 1) but that's O (n).
Instead, we exit in the middle of the loop */
}
/*
- build padded skyline from an existing skyline with padding
- added to it.
-*/
+ Build skyline from a set of boxes.
-Skyline::Skyline (Skyline const &src, Real horizon_padding, Axis /*a*/)
+ Boxes should have fatness in the horizon_axis, otherwise they are ignored.
+ */
+Skyline::Skyline (vector<Box> const &boxes, Axis horizon_axis, Direction sky)
{
- /*
- We extract boxes from the skyline, then build a new skyline from
- the boxes.
- A box is created for every horizontal portion of the skyline
- Because skylines are defined positive, and then inverted if they
- are to be down-facing, we create the new skyline in the UP
- direction, then give it the down direction if needed.
- */
- Real start = -infinity_f;
- list<Box> boxes;
-
- // establish a baseline box
- // FIXME: This has hardcoded logic, assuming a == X_AXIS!
- boxes.push_back (Box (Interval (-infinity_f, infinity_f),
- Interval (0, 0)));
- list<Building>::const_iterator end = src.buildings_.end ();
- for (list<Building>::const_iterator i = src.buildings_.begin (); i != end; start = i->end_, i++)
- if ((i->slope_ == 0) && !isinf (i->y_intercept_))
- boxes.push_back (Box (Interval (start, i->end_),
- Interval (-infinity_f, i->y_intercept_)));
- buildings_ = internal_build_skyline (&boxes, horizon_padding, X_AXIS, UP);
- sky_ = src.sky_;
+ list<Building> buildings;
+ sky_ = sky;
+
+ Axis vert_axis = other_axis (horizon_axis);
+ for (vsize i = 0; i < boxes.size (); i++)
+ {
+ Interval iv = boxes[i][horizon_axis];
+ if (iv.length () > EPS && !boxes[i][vert_axis].is_empty ())
+ buildings.push_front (Building (boxes[i], horizon_axis, sky));
+ }
+
+ buildings_ = internal_build_skyline (&buildings);
+ normalize ();
}
/*
- build skyline from a set of boxes. If horizon_padding > 0, expand all the boxes
- by that amount and add 45-degree sloped boxes to the edges of each box (of
- width horizon_padding). That is, the total amount of horizontal expansion is
- horizon_padding*4, half of which is sloped and half of which is flat.
+ build skyline from a set of line segments.
- Boxes should have fatness in the horizon_axis (after they are expanded by
- horizon_padding), otherwise they are ignored.
+ Buildings should have fatness in the horizon_axis, otherwise they are ignored.
*/
-Skyline::Skyline (vector<Box> const &boxes, Real horizon_padding, Axis horizon_axis, Direction sky)
+Skyline::Skyline (vector<Drul_array<Offset> > const &segments, Axis horizon_axis, Direction sky)
{
- list<Box> filtered_boxes;
+ list<Building> buildings;
sky_ = sky;
- Axis vert_axis = other_axis (horizon_axis);
- for (vsize i = 0; i < boxes.size (); i++)
+ for (vsize i = 0; i < segments.size (); i++)
{
- Interval iv = boxes[i][horizon_axis];
- iv.widen (horizon_padding);
- if (iv.length () > EPS && !boxes[i][vert_axis].is_empty ())
- filtered_boxes.push_front (boxes[i]);
+ Drul_array<Offset> const &seg = segments[i];
+ Offset left = seg[LEFT];
+ Offset right = seg[RIGHT];
+ if (left[horizon_axis] > right[horizon_axis])
+ swap (left, right);
+
+ Real x1 = left[horizon_axis];
+ Real x2 = right[horizon_axis];
+ Real y1 = left[other_axis (horizon_axis)] * sky;
+ Real y2 = right[other_axis (horizon_axis)] * sky;
+
+ if (x1 + EPS < x2)
+ buildings.push_back (Building (x1, y1, y2, x2));
}
- buildings_ = internal_build_skyline (&filtered_boxes, horizon_padding, horizon_axis, sky);
+ buildings_ = internal_build_skyline (&buildings);
+ normalize ();
}
-Skyline::Skyline (Box const &b, Real horizon_padding, Axis horizon_axis, Direction sky)
+Skyline::Skyline (vector<Skyline_pair> const &skypairs, Direction sky)
{
sky_ = sky;
- Building front (b, horizon_padding, horizon_axis, sky);
- single_skyline (front, b[horizon_axis][LEFT] - horizon_padding,
- horizon_padding, &buildings_);
+
+ deque<Skyline> partials;
+ for (vsize i = 0; i < skypairs.size (); i++)
+ partials.push_back (Skyline ((skypairs[i])[sky]));
+
+ while (partials.size () > 1)
+ {
+ Skyline one = partials.front ();
+ partials.pop_front ();
+ Skyline two = partials.front ();
+ partials.pop_front ();
+
+ one.merge (two);
+ partials.push_back (one);
+ }
+
+ if (partials.size ())
+ buildings_.swap (partials.front ().buildings_);
+ else
+ buildings_.clear ();
+}
+
+Skyline::Skyline (Box const &b, Axis horizon_axis, Direction sky)
+{
+ sky_ = sky;
+ Building front (b, horizon_axis, sky);
+ single_skyline (front, &buildings_);
}
void
{
assert (sky_ == other.sky_);
+ if (other.is_empty ())
+ return;
+
+ if (is_empty ())
+ {
+ buildings_ = other.buildings_;
+ return;
+ }
+
list<Building> other_bld (other.buildings_);
list<Building> my_bld;
my_bld.splice (my_bld.begin (), buildings_);
internal_merge_skyline (&other_bld, &my_bld, &buildings_);
+ normalize ();
}
void
-Skyline::insert (Box const &b, Real horizon_padding, Axis a)
+Skyline::insert (Box const &b, Axis a)
{
list<Building> other_bld;
list<Building> my_bld;
/* do the same filtering as in Skyline (vector<Box> const&, etc.) */
Interval iv = b[a];
- iv.widen (horizon_padding);
if (iv.length () <= EPS || b[other_axis (a)].is_empty ())
return;
my_bld.splice (my_bld.begin (), buildings_);
- single_skyline (Building (b, horizon_padding, a, sky_), b[a][LEFT] - horizon_padding,
- horizon_padding, &other_bld);
+ single_skyline (Building (b, a, sky_), &other_bld);
internal_merge_skyline (&other_bld, &my_bld, &buildings_);
+ normalize ();
}
void
list<Building>::iterator end = buildings_.end ();
for (list<Building>::iterator i = buildings_.begin (); i != end; i++)
{
+ i->start_ += s;
i->end_ += s;
i->y_intercept_ -= s * i->slope_;
}
Real
Skyline::internal_distance (Skyline const &other, Real horizon_padding, Real *touch_point) const
{
- assert (sky_ == -other.sky_);
+ if (horizon_padding == 0.0)
+ return internal_distance (other, touch_point);
+
+ // Note that it is not necessary to build a padded version of other,
+ // because the same effect can be achieved just by doubling horizon_padding.
+ Skyline padded_this = padded (horizon_padding);
+ return padded_this.internal_distance (other, touch_point);
+}
- Skyline const *padded_this = this;
- Skyline const *padded_other = &other;
- bool created_tmp_skylines = false;
-
- /*
- For systems, padding is not added at creation time. Padding is
- added to AxisGroup objects when outside-staff objects are added.
- Thus, when we want to place systems with horizontal padding,
- we do it at distance calculation time.
- */
- if (horizon_padding != 0.0)
+Skyline
+Skyline::padded (Real horizon_padding) const
+{
+ list<Building> pad_buildings;
+ for (list<Building>::const_iterator i = buildings_.begin (); i != buildings_.end (); ++i)
{
- padded_this = new Skyline (*padded_this, horizon_padding, X_AXIS);
- padded_other = new Skyline (*padded_other, horizon_padding, X_AXIS);
- created_tmp_skylines = true;
+ if (i->start_ > -infinity_f)
+ {
+ Real height = i->height (i->start_);
+ if (height > -infinity_f)
+ {
+ // Add the sloped building that pads the left side of the current building.
+ Real start = i->start_ - 2 * horizon_padding;
+ Real end = i->start_ - horizon_padding;
+ pad_buildings.push_back (Building (start, height - horizon_padding, height, end));
+
+ // Add the flat building that pads the left side of the current building.
+ start = i->start_ - horizon_padding;
+ end = i->start_;
+ pad_buildings.push_back (Building (start, height, height, end));
+ }
+ }
+
+ if (i->end_ < infinity_f)
+ {
+ Real height = i->height (i->end_);
+ if (height > -infinity_f)
+ {
+ // Add the flat building that pads the right side of the current building.
+ Real start = i->end_;
+ Real end = start + horizon_padding;
+ pad_buildings.push_back (Building (start, height, height, end));
+
+ // Add the sloped building that pads the right side of the current building.
+ start = end;
+ end += horizon_padding;
+ pad_buildings.push_back (Building (start, height, height - horizon_padding, end));
+ }
+ }
}
- list<Building>::const_iterator i = padded_this->buildings_.begin ();
- list<Building>::const_iterator j = padded_other->buildings_.begin ();
+ // The buildings may be overlapping, so resolve that.
+ list<Building> pad_skyline = internal_build_skyline (&pad_buildings);
+
+ // Merge the padding with the original, to make a new skyline.
+ Skyline padded (sky_);
+ list<Building> my_buildings = buildings_;
+ padded.buildings_.clear ();
+ internal_merge_skyline (&pad_skyline, &my_buildings, &padded.buildings_);
+ padded.normalize ();
+
+ return padded;
+}
+
+Real
+Skyline::internal_distance (Skyline const &other, Real *touch_point) const
+{
+ assert (sky_ == -other.sky_);
+
+ list<Building>::const_iterator i = buildings_.begin ();
+ list<Building>::const_iterator j = other.buildings_.begin ();
Real dist = -infinity_f;
Real start = -infinity_f;
Real touch = -infinity_f;
- while (i != padded_this->buildings_.end () && j != padded_other->buildings_.end ())
+ while (i != buildings_.end () && j != other.buildings_.end ())
{
Real end = min (i->end_, j->end_);
Real start_dist = i->height (start) + j->height (start);
start = end;
}
- if (created_tmp_skylines)
- {
- delete padded_this;
- delete padded_other;
- }
-
*touch_point = touch;
return dist;
}
Real
Skyline::max_height () const
{
- Skyline s (-sky_);
- s.set_minimum_height (0);
- return sky_ * distance (s);
+ Real ret = -infinity_f;
+
+ list<Building>::const_iterator i;
+ for (i = buildings_.begin (); i != buildings_.end (); ++i)
+ {
+ ret = max (ret, i->height (i->start_));
+ ret = max (ret, i->height (i->end_));
+ }
+
+ return sky_ * ret;
+}
+
+Real
+Skyline::left () const
+{
+ for (list<Building>::const_iterator i (buildings_.begin ());
+ i != buildings_.end (); i++)
+ if (i->y_intercept_ > -infinity_f)
+ return i->start_;
+
+ return infinity_f;
+}
+
+Real
+Skyline::right () const
+{
+ for (list<Building>::const_reverse_iterator i (buildings_.rbegin ());
+ i != buildings_.rend (); ++i)
+ if (i->y_intercept_ > -infinity_f)
+ return i->end_;
+
+ return -infinity_f;
}
Real
bool
Skyline::is_empty () const
{
+ if (!buildings_.size ())
+ return true;
Building b = buildings_.front ();
return b.end_ == infinity_f && b.y_intercept_ == -infinity_f;
}
DECLARE_ACKNOWLEDGER (script);
DECLARE_ACKNOWLEDGER (dots);
DECLARE_ACKNOWLEDGER (text_script);
- DECLARE_ACKNOWLEDGER (tie);
+ DECLARE_END_ACKNOWLEDGER (tie);
DECLARE_ACKNOWLEDGER (tuplet_number);
void acknowledge_extra_object (Grob_info);
}
void
-Slur_engraver::acknowledge_tie (Grob_info info)
+Slur_engraver::acknowledge_end_tie (Grob_info info)
{
acknowledge_extra_object (info);
}
ADD_ACKNOWLEDGER (Slur_engraver, script);
ADD_ACKNOWLEDGER (Slur_engraver, text_script);
ADD_ACKNOWLEDGER (Slur_engraver, dots);
-ADD_ACKNOWLEDGER (Slur_engraver, tie);
+ADD_END_ACKNOWLEDGER (Slur_engraver, tie);
ADD_ACKNOWLEDGER (Slur_engraver, tuplet_number);
ADD_TRANSLATOR (Slur_engraver,
/* doc */
{
if (extremes_[d].note_column_)
{
- end_ys[d] = dir_
- * max (max (dir_ * (base_attachments_[d][Y_AXIS]
- + parameters_.region_size_ * dir_),
- dir_ * (dir_ + extremes_[d].note_column_->extent (common_[Y_AXIS], Y_AXIS)[dir_])),
- dir_ * base_attachments_[-d][Y_AXIS]);
+ Interval nc_extent = extremes_[d].note_column_
+ ->extent (common_[Y_AXIS], Y_AXIS);
+ if (nc_extent.is_empty ())
+ slur_->warning ("slur trying to encompass an empty note column.");
+ else
+ end_ys[d] = dir_
+ * max (max (dir_ * (base_attachments_[d][Y_AXIS]
+ + parameters_.region_size_ * dir_),
+ dir_ * (dir_ + nc_extent[dir_])),
+ dir_ * base_attachments_[-d][Y_AXIS]);
}
else
end_ys[d] = base_attachments_[d][Y_AXIS] + parameters_.region_size_ * dir_;
#include "main.hh" // DEBUG_SLUR_SCORING
#include "note-column.hh"
#include "output-def.hh"
-#include "spanner.hh"
#include "skyline-pair.hh"
+#include "spanner.hh"
#include "staff-symbol-referencer.hh"
#include "stem.hh"
#include "text-interface.hh"
return scm_from_double (offset + avoidance_offset);
}
-MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Slur, vertical_skylines, 1, 0, "");
+MAKE_SCHEME_CALLBACK (Slur, vertical_skylines, 1);
SCM
Slur::vertical_skylines (SCM smob)
{
vector<Box> boxes;
if (!me)
- return Skyline_pair (boxes, 0.0, X_AXIS).smobbed_copy ();
+ return Skyline_pair (boxes, X_AXIS).smobbed_copy ();
Bezier curve = Slur::get_curve (me);
vsize box_count = robust_scm2vsize (me->get_property ("skyline-quantizing"), 10);
boxes.push_back (b);
}
- return Skyline_pair (boxes, 0.0, X_AXIS).smobbed_copy ();
+ return Skyline_pair (boxes, X_AXIS).smobbed_copy ();
}
/*
"inspect-index "
"line-thickness "
"note-columns "
- "skyline-quantizing "
"positions "
"ratio "
"thickness "
- "vertical-skylines "
);
static void
set_column_rods (vector<Grob *> const &cols, Real padding)
{
- /* distances[i] will be the minimum distance between column i and column i+1 */
- vector<Real> distances;
+ /* distances[i] will be the distance betwen cols[i-1] and cols[i], and
+ overhangs[j] the amount by which cols[0 thru j] extend beyond cols[j]
+ when each column is placed as far to the left as possible. */
+ vector<Real> distances (cols.size ());
+ vector<Real> overhangs (cols.size ());
- for (vsize i = 1; i < cols.size (); i++)
+ for (vsize i = 0; i < cols.size (); i++)
{
- assert (distances.size () == i - 1);
-
Item *r = dynamic_cast<Item *> (cols[i]);
Item *rb = r->find_prebroken_piece (LEFT);
if (Separation_item::is_empty (r) && (!rb || Separation_item::is_empty (rb)))
- {
- distances.push_back (0);
- continue;
- }
+ continue;
Skyline_pair *skys = Skyline_pair::unsmob (r->get_property ("horizontal-skylines"));
- Real right_stickout = skys ? (*skys)[LEFT].max_height () : 0.0;
+ overhangs[i] = skys ? (*skys)[RIGHT].max_height () : 0.0;
+
+ if (0 == i) continue;
- /* min rather than max because right-stickout will be negative if the right-hand column
+ /* min rather than max because stickout will be negative if the right-hand column
sticks out a lot to the left */
- right_stickout = min (right_stickout,
- Separation_item::conditional_skyline (r, cols[i - 1]).max_height ());
+ Real stickout = min (skys ? (*skys)[LEFT].max_height () : 0.0,
+ Separation_item::conditional_skyline (r, cols[i - 1]).max_height ());
- Drul_array<Item *> r_cols (r, rb);
- Drul_array<Real> cur_dist (0.0, 0.0);
+ Real prev_distances = 0.0;
/* This is an inner loop and hence it is potentially quadratic. However, we only continue
as long as there is a rod to insert. Therefore, this loop will usually only execute
a constant number of times per iteration of the outer loop. */
for (vsize j = i; j--;)
{
+ if (overhangs[j] + padding <= prev_distances + distances[i] + stickout)
+ break; // cols[0 thru j] cannot reach cols[i]
+
Item *l = dynamic_cast<Item *> (cols[j]);
Item *lb = l->find_prebroken_piece (RIGHT);
- Skyline_pair *skys = Skyline_pair::unsmob (l->get_property ("horizontal-skylines"));
- Real left_stickout = skys ? (*skys)[RIGHT].max_height () : 0.0;
- bool done = true;
- for (LEFT_and_RIGHT (d))
- {
- if (j < i - 1)
- cur_dist[d] += distances[j];
+ Real dist = Separation_item::set_distance (l, r, padding);
+ distances[i] = max (distances[i], dist - prev_distances);
- Item *r_col = r_cols[d];
- bool touches = right_stickout - left_stickout + cur_dist[d] < 0.0;
- Real dist = 0.0;
-
- /* we set a distance for the line-starter column even if its non-broken counterpart
- doesn't touch the right column. */
- if (lb)
- Separation_item::set_distance (lb, r_col, padding);
-
- if (touches || j == i - 1)
- dist = Separation_item::set_distance (l, r_col, padding);
-
- if (j == i - 1 && d == LEFT)
- distances.push_back (dist);
-
- if (j == i - 1)
- cur_dist[d] = distances[j];
-
- cur_dist[d] = max (cur_dist[d], dist);
- done = done && !touches;
-
- if (!rb)
- break;
+ if (lb)
+ {
+ dist = Separation_item::set_distance (lb, r, padding);
+ // The left-broken version might reach more columns to the
+ // right than the unbroken version, by extending farther and/or
+ // nesting more closely;
+ if (j == i - 1) // check this, the first time we see each lb.
+ overhangs[j] = max (overhangs[j],
+ lb->extent (lb, X_AXIS)[RIGHT]
+ + distances[i] - dist);
}
+ if (rb)
+ Separation_item::set_distance (l, rb, padding);
+ if (lb && rb)
+ Separation_item::set_distance (lb, rb, padding);
- /* we need the empty check for gregorian notation, where there are a lot of
- extraneous paper-columns that we need to skip over */
- if (done && !Separation_item::is_empty (l))
- break;
+ prev_distances += distances[j];
}
+ overhangs[i] = max (overhangs[i],
+ overhangs[i - 1] - distances[i]);
}
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+ Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Staff_performer::get_channel (string instrument)
{
SCM channel_mapping = get_property ("midiChannelMapping");
- map<string, int>& channel_map
+ map<string, int> &channel_map
= (channel_mapping != ly_symbol2scm ("instrument"))
? channel_map_
: static_channel_map_;
#include "directional-element-interface.hh"
#include "item.hh"
#include "lookup.hh"
+#include "note-collision.hh"
+#include "note-column.hh"
#include "output-def.hh"
#include "staff-symbol-referencer.hh"
#include "stem.hh"
else
/* down stems with flags should have more sloped trems (helps avoid
flag/stem collisions without making the stem very long) */
- return scm_from_double ((Stem::duration_log (stem) >= 3 && get_grob_direction (stem) == DOWN)
+ return scm_from_double ((Stem::duration_log (stem) >= 3 && get_grob_direction (me) == DOWN)
? 0.40 : 0.25);
}
{
Grob *me = unsmob_grob (smob);
Grob *stem = unsmob_grob (me->get_object ("stem"));
- Direction stemdir = get_grob_direction (stem);
+ Direction dir = get_grob_direction (me);
bool beam = Stem::get_beam (stem);
bool flag = Stem::duration_log (stem) >= 3 && !beam;
/* beamed stems and up-stems with flags have shorter tremolos */
- return scm_from_double (((stemdir == UP && flag) || beam) ? 1.0 : 1.5);
+ return scm_from_double (((dir == UP && flag) || beam) ? 1.0 : 1.5);
}
MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_style, 1)
{
Grob *me = unsmob_grob (smob);
Grob *stem = unsmob_grob (me->get_object ("stem"));
- Direction stemdir = get_grob_direction (stem);
+ Direction dir = get_grob_direction (me);
bool beam = Stem::get_beam (stem);
bool flag = Stem::duration_log (stem) >= 3 && !beam;
- return ly_symbol2scm (((stemdir == UP && flag) || beam) ? "rectangle" : "default");
+ return ly_symbol2scm (((dir == UP && flag) || beam) ? "rectangle" : "default");
}
Real
}
Stencil
-Stem_tremolo::raw_stencil (Grob *me, Real slope, Direction stemdir)
+Stem_tremolo::raw_stencil (Grob *me, Real slope, Direction dir)
{
Real ss = Staff_symbol_referencer::staff_space (me);
Real thick = robust_scm2double (me->get_property ("beam-thickness"), 1);
for (int i = 0; i < tremolo_flags; i++)
{
Stencil b (a);
- b.translate_axis (beam_translation * i * stemdir * -1, Y_AXIS);
+ b.translate_axis (beam_translation * i * dir * -1, Y_AXIS);
mol.add_stencil (b);
}
return mol;
if (!stem)
return ly_interval2scm (s1.extent (Y_AXIS));
- Direction stemdir = get_grob_direction (stem);
- if (stemdir == 0)
- stemdir = UP;
+ Direction dir = get_grob_direction (me);
Spanner *beam = Stem::get_beam (stem);
Interval ph = stem->pure_height (stem, 0, INT_MAX);
Stem_info si = Stem::get_stem_info (stem);
- ph[-stemdir] = si.shortest_y_;
+ ph[-dir] = si.shortest_y_;
int beam_count = Stem::beam_multiplicity (stem).length () + 1;
Real beam_translation = get_beam_translation (me);
- ph = ph - stemdir * max (beam_count, 1) * beam_translation;
+ ph = ph - dir * max (beam_count, 1) * beam_translation;
ph = ph - ph.center ();
return ly_interval2scm (ph);
return Stencil ();
}
- Direction stemdir = get_grob_direction (stem);
- if (!stemdir)
- stemdir = UP;
+ Direction dir = get_grob_direction (me);
bool whole_note = Stem::duration_log (stem) <= 0;
/* for a whole note, we position relative to the notehead, so we want the
stencil aligned on the flag closest to the head */
- Direction stencil_dir = whole_note ? -stemdir : stemdir;
+ Direction stencil_dir = whole_note ? -dir : dir;
return raw_stencil (me, slope, stencil_dir);
}
return scm_from_double (y_offset (me, true));
}
+MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_direction, 1);
+SCM
+Stem_tremolo::calc_direction (SCM smob)
+{
+ Item *me = unsmob_item (smob);
+
+ Item *stem = unsmob_item (me->get_object ("stem"));
+ if (!stem)
+ return scm_from_int (CENTER);
+
+ Direction stemdir = get_grob_direction (stem);
+
+ vector<int> nhp = Stem::note_head_positions (stem);
+ /*
+ * We re-decide stem-dir if there may be collisions with other
+ * note heads in the staff.
+ */
+ Grob *maybe_nc = stem->get_parent (X_AXIS)->get_parent (X_AXIS);
+ bool whole_note = Stem::duration_log (stem) <= 0;
+ if (whole_note && Note_collision_interface::has_interface (maybe_nc))
+ {
+ Drul_array<bool> avoid_me (false, false);
+ vector<int> all_nhps = Note_collision_interface::note_head_positions (maybe_nc);
+ if (all_nhps[0] < nhp[0])
+ avoid_me[DOWN] = true;
+ if (all_nhps.back () > nhp.back ())
+ avoid_me[UP] = true;
+ if (avoid_me[stemdir])
+ {
+ stemdir = -stemdir;
+ if (avoid_me[stemdir])
+ {
+ me->warning ("Whole-note tremolo may collide with simultaneous notes.");
+ stemdir = -stemdir;
+ }
+ }
+ }
+ return scm_from_int (stemdir);
+}
+
Real
Stem_tremolo::y_offset (Grob *me, bool pure)
{
if (!stem)
return 0.0;
- Direction stemdir = get_grob_direction (stem);
- if (stemdir == 0)
- stemdir = UP;
+ Direction dir = get_grob_direction (me);
Spanner *beam = Stem::get_beam (stem);
Real beam_translation = get_beam_translation (me);
{
Interval ph = stem->pure_height (stem, 0, INT_MAX);
Stem_info si = Stem::get_stem_info (stem);
- ph[-stemdir] = si.shortest_y_;
+ ph[-dir] = si.shortest_y_;
- return (ph - stemdir * max (beam_count, 1) * beam_translation)[stemdir] - stemdir * 0.5 * me->pure_height (me, 0, INT_MAX).length ();
+ return (ph - dir * max (beam_count, 1) * beam_translation)[dir] - dir * 0.5 * me->pure_height (me, 0, INT_MAX).length ();
}
Real end_y
= (pure
- ? stem->pure_height (stem, 0, INT_MAX)[stemdir]
- : stem->extent (stem, Y_AXIS)[stemdir])
- - stemdir * max (beam_count, 1) * beam_translation
+ ? stem->pure_height (stem, 0, INT_MAX)[dir]
+ : stem->extent (stem, Y_AXIS)[dir])
+ - dir * max (beam_count, 1) * beam_translation
- Stem::beam_end_corrective (stem);
if (!beam && Stem::duration_log (stem) >= 3)
{
- end_y -= stemdir * (Stem::duration_log (stem) - 2) * beam_translation;
- if (stemdir == UP)
- end_y -= stemdir * beam_translation * 0.5;
+ end_y -= dir * (Stem::duration_log (stem) - 2) * beam_translation;
+ if (dir == UP)
+ end_y -= dir * beam_translation * 0.5;
}
bool whole_note = Stem::duration_log (stem) <= 0;
- if (whole_note)
+ if (whole_note || isinf(end_y))
{
/* we shouldn't position relative to the end of the stem since the stem
is invisible */
Real ss = Staff_symbol_referencer::staff_space (me);
vector<int> nhp = Stem::note_head_positions (stem);
- Real note_head = (stemdir == UP ? nhp.back () : nhp[0]) * ss / 2;
- end_y = note_head + stemdir * 1.5;
+ Real note_head = (dir == UP ? nhp.back () : nhp[0]) * ss / 2;
+ end_y = note_head + dir * 1.5;
}
return end_y;
/* properties */
"beam-thickness "
"beam-width "
+ "direction "
"flag-count "
"length-fraction "
"stem "
bool
Stem::is_invisible (Grob *me)
{
- return !is_normal_stem (me)
- && (robust_scm2double (me->get_property ("stemlet-length"),
- 0.0) == 0.0);
+ if (is_normal_stem (me))
+ return false;
+ else if (head_count (me))
+ return true;
+ else // if there are no note-heads, we might want stemlets
+ return 0.0 == robust_scm2double (me->get_property ("stemlet-length"), 0.0);
}
bool
if (!head_count (me))
return false;
- extract_grob_set (me, "note-heads", heads);
- SCM style = heads[0]->get_property ("style");
- return style != ly_symbol2scm ("kievan") && scm_to_int (me->get_property ("duration-log")) >= 1;
+ return scm_to_int (me->get_property ("duration-log")) >= 1;
}
MAKE_SCHEME_CALLBACK (Stem, pure_height, 3)
= hed->extent (hed, X_AXIS).linear_combination (CENTER)
- heads[i]->extent (heads[i], X_AXIS).linear_combination (CENTER);
- heads[i]->translate_axis (amount, X_AXIS);
+ if (!isnan (amount)) // empty heads can produce NaN
+ heads[i]->translate_axis (amount, X_AXIS);
}
bool parity = true;
Real lastpos = Real (Staff_symbol_referencer::get_position (heads[0]));
Real y_attach = Note_head::stem_attachment_coordinate (head, Y_AXIS);
y_attach = head_height.linear_combination (y_attach);
- pos += d * y_attach * 2 / ss;
+ if (!isinf (y_attach) && !isnan (y_attach)) // empty heads
+ pos += d * y_attach * 2 / ss;
}
return pos;
}
+
+MAKE_SCHEME_CALLBACK (Stem, pure_calc_length, 3);
+SCM
+Stem::pure_calc_length (SCM smob, SCM /*start*/, SCM /*end*/)
+{
+ 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);
+}
+
+MAKE_SCHEME_CALLBACK (Stem, calc_length, 1);
+SCM
+Stem::calc_length (SCM smob)
+{
+ 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);
+ }
+
+ Real beg = robust_scm2double (me->get_property ("stem-begin-position"), 0.0);
+ Real res = fabs (internal_calc_stem_end_position (me, true) - beg);
+ return scm_from_double (res);
+}
+
bool
Stem::is_valid_stem (Grob *me)
{
if (!lh && !beam)
return false;
- if (lh && robust_scm2int (lh->get_property ("duration-log"), 0) < 1)
- return false;
-
if (is_invisible (me))
return false;
Direction d = get_grob_direction (me);
Real real_attach = head_wid.linear_combination (d * attach);
- Real r = real_attach;
+ Real r = isnan(real_attach)? 0.0: real_attach;
/* If not centered: correct for stem thickness. */
string style = robust_symbol2string (f->get_property ("style"), "default");
--- /dev/null
+/*
+ This file is part of LilyPond, the GNU music typesetter.
+
+ Copyright (C) 2012 Mike Solomon <mike@mikesolomon.org>
+
+ 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/>.
+*/
+
+/*
+tools for transform-matrices following the standard at
+http://www.w3.org/TR/SVG/coords.html
+
+a list in the form
+(list a b c d e f g)
+becomes this matrix:
+[ a c e ]
+[ b d f ]
+[ 0 0 1 ]
+when this transforms a point (x,y), the point is written as matrix:
+[ x ]
+[ y ]
+[ 1 ]
+*/
+
+#include <pango/pango-matrix.h>
+#include <complex>
+#include "box.hh"
+#include "bezier.hh"
+#include "dimensions.hh"
+#include "font-metric.hh"
+#include "grob.hh"
+#include "interval.hh"
+#include "freetype.hh"
+#include "misc.hh"
+#include "offset.hh"
+#include "modified-font-metric.hh"
+#include "open-type-font.hh"
+#include "pango-font.hh"
+#include "pointer-group-interface.hh"
+#include "lily-guile.hh"
+#include "real.hh"
+#include "stencil.hh"
+#include "string-convert.hh"
+#include "skyline.hh"
+#include "skyline-pair.hh"
+using namespace std;
+
+Real QUANTIZATION_UNIT = 0.2;
+
+void create_path_cap (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, Offset pt, Real rad, Real slope, Direction d);
+
+struct Transform_matrix_and_expression
+{
+ PangoMatrix tm_;
+ SCM expr_;
+
+ Transform_matrix_and_expression (PangoMatrix tm, SCM expr);
+};
+
+Transform_matrix_and_expression::Transform_matrix_and_expression (PangoMatrix tm, SCM expr)
+{
+ tm_ = tm;
+ expr_ = expr;
+}
+
+PangoMatrix
+make_transform_matrix (Real p0, Real p1, Real p2, Real p3, Real p4, Real p5)
+{
+ PangoMatrix out;
+ out.xx = p0;
+ out.xy = p1;
+ out.yx = p2;
+ out.yy = p3;
+ out.x0 = p4;
+ out.y0 = p5;
+ return out;
+}
+
+//// UTILITY FUNCTIONS
+
+/*
+ map x's placement between orig_l and orig_r onto
+ the interval final_l final_r
+*/
+Real
+linear_map (Real final_l, Real final_r, Real orig_l, Real orig_r, Real x)
+{
+ return final_l + ((final_r - final_l) * ((x - orig_l) / (orig_r - orig_l)));
+}
+
+/*
+ from a nested SCM list, return the first list of numbers
+ useful for polygons
+*/
+SCM
+get_number_list (SCM l)
+{
+ if (scm_is_pair (l))
+ {
+ if (scm_is_number (scm_car (l)))
+ return l;
+ SCM res = get_number_list (scm_car (l));
+ if (res == SCM_BOOL_F)
+ return get_number_list (scm_cdr (l));
+ return res;
+ }
+ return SCM_BOOL_F;
+}
+
+/*
+ from a nested SCM list, return the first list of numbers
+ useful for paths
+*/
+SCM
+get_path_list (SCM l)
+{
+ if (scm_is_pair (l))
+ {
+ if (scm_memv (scm_car (l),
+ scm_list_n (ly_symbol2scm ("moveto"),
+ ly_symbol2scm ("rmoveto"),
+ ly_symbol2scm ("lineto"),
+ ly_symbol2scm ("rlineto"),
+ ly_symbol2scm ("curveto"),
+ ly_symbol2scm ("rcurveto"),
+ ly_symbol2scm ("closepath"),
+ SCM_UNDEFINED))
+ != SCM_BOOL_F)
+ return l;
+ SCM res = get_path_list (scm_car (l));
+ if (res == SCM_BOOL_F)
+ return get_path_list (scm_cdr (l));
+ return res;
+ }
+ return SCM_BOOL_F;
+}
+
+Real
+perpendicular_slope (Real s)
+{
+ if (s == 0.0)
+ return infinity_f;
+ if (s == infinity_f)
+ return 0.0;
+ return -1.0 / s;
+}
+
+//// END UTILITY FUNCTIONS
+
+/*
+ below, for all of the functions make_X_boxes, the expression
+ is always unpacked into variables.
+ then, after a line of /////, there are manipulations of these variables
+ (there may be no manipulations necessary depending on the function)
+ afterwards, there is another ///// followed by the creation of points
+ and boxes
+*/
+
+void
+make_draw_line_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr, bool use_building)
+{
+ Real thick = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real x0 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real y0 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real x1 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real y1 = robust_scm2double (scm_car (expr), 0.0);
+ Real slope = x1 == x0 ? infinity_f : (y1 - y0) / (x1 - x0);
+ //////////////////////
+ if (x1 < x0)
+ {
+ swap (x0, x1);
+ swap (y0, y1);
+ }
+ Offset left (x0, y0);
+ Offset right (x1, y1);
+ Direction d = DOWN;
+ do
+ {
+ Offset inter_l = get_point_in_y_direction (left, perpendicular_slope (slope), thick / 2, d);
+ Offset inter_r = get_point_in_y_direction (right, perpendicular_slope (slope), thick / 2, d);//printf ("O %4.4f %4.4f\n", inter_l[X_AXIS], inter_r[X_AXIS]);printf ("TRANNY %4.4f %4.4f %4.4f %4.4f %4.4f %4.4f\n", trans.xx, trans.xy, trans.yx, trans.yy, trans.x0, trans.y0);
+ pango_matrix_transform_point (&trans, &inter_l[X_AXIS], &inter_l[Y_AXIS]);
+ pango_matrix_transform_point (&trans, &inter_r[X_AXIS], &inter_r[Y_AXIS]);
+ if ((inter_l[X_AXIS] == inter_r[X_AXIS]) || (inter_l[Y_AXIS] == inter_r[Y_AXIS]))
+ {
+ //printf ("OO %4.4f %4.4f\n", inter_l[X_AXIS], inter_r[X_AXIS]);
+ Box b;
+ b.add_point (inter_l);
+ b.add_point (inter_r);
+ boxes.push_back (b);
+ }
+ else if (use_building)
+ buildings.push_back (Drul_array<Offset> (inter_l, inter_r));
+ else
+ {
+ Offset inter_l = get_point_in_y_direction (left, perpendicular_slope (slope), thick / 2, d);
+ Offset inter_r = get_point_in_y_direction (right, perpendicular_slope (slope), thick / 2, d);
+ pango_matrix_transform_point (&trans, &inter_l[X_AXIS], &inter_l[Y_AXIS]);
+ pango_matrix_transform_point (&trans, &inter_r[X_AXIS], &inter_r[Y_AXIS]);
+ Real length = sqrt (((inter_l[X_AXIS] - inter_r[X_AXIS]) * (inter_l[X_AXIS] - inter_r[X_AXIS])) + ((inter_l[Y_AXIS] - inter_r[Y_AXIS]) * (inter_l[Y_AXIS] - inter_r[Y_AXIS])));
+
+ vsize passes = (vsize) ((length * 2) + 1);
+ vector<Offset> points;
+
+ for (vsize i = 0; i < 1 + passes; i++)
+ {
+ Offset pt (linear_map (x0, x1, 0, passes, i),
+ linear_map (y0, y1, 0, passes, i));
+ Offset inter = get_point_in_y_direction (pt, perpendicular_slope (slope), thick / 2, d);
+ pango_matrix_transform_point (&trans, &inter[X_AXIS], &inter[Y_AXIS]);
+ points.push_back (inter);
+ }
+ for (vsize i = 0; i < points.size () - 1; i++)
+ {
+ Box b;
+ b.add_point (points[i]);
+ b.add_point (points[i + 1]);
+ boxes.push_back (b);
+ }
+ }
+ }
+ while (flip (&d) != DOWN);
+
+ if (thick > 0.0)
+ {
+ // beg line cap
+ create_path_cap (boxes,
+ buildings,
+ trans,
+ Offset (x0, y0),
+ thick / 2,
+ perpendicular_slope (slope),
+ Direction (sign (slope)));
+
+ // end line cap
+ create_path_cap (boxes,
+ buildings,
+ trans,
+ Offset (x1, y1),
+ thick / 2,
+ perpendicular_slope (slope),
+ Direction (sign (-slope)));
+ }
+}
+
+void
+make_partial_ellipse_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
+{
+ Real x_rad = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real y_rad = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real start = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real end = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real th = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ bool connect = to_boolean (scm_car (expr));
+ expr = scm_cdr (expr);
+ bool fill = to_boolean (scm_car (expr));
+ //////////////////////
+ start = M_PI * start / 180;
+ end = M_PI * end / 180;
+ if (end == start)
+ end += (2 * M_PI);
+ complex<Real> sunit = polar (1.0, start);
+ complex<Real> eunit = polar (1.0, end);
+ Offset sp (real (sunit) * x_rad, imag (sunit) * y_rad);
+ Offset ep (real (eunit) * x_rad, imag (eunit) * y_rad);
+ //////////////////////
+ Drul_array<vector<Offset> > points;
+ Direction d = DOWN;
+ int quantization = max (1, (int) (((x_rad * trans.xx) + (y_rad * trans.yy)) * M_PI / QUANTIZATION_UNIT));
+ do
+ {
+ for (vsize i = 0; i < 1 + quantization; i++)
+ {
+ Real ang = linear_map (start, end, 0, quantization, i);
+ complex<Real> coord = polar (1.0, ang);
+ Offset pt (real (coord) * x_rad,
+ imag (coord) * y_rad);
+ Real slope = pt[Y_AXIS] / pt[X_AXIS];
+ Offset inter = get_point_in_y_direction (pt, perpendicular_slope (slope), th / 2, d);
+ pango_matrix_transform_point (&trans, &inter[X_AXIS], &inter[Y_AXIS]);
+ points[d].push_back (inter);
+ }
+ }
+ while (flip (&d) != DOWN);
+
+ for (vsize i = 0; i < points[DOWN].size () - 1; i++)
+ {
+ Box b;
+ do
+ {
+ b.add_point (points[d][i]);
+ b.add_point (points[d][i + 1]);
+ }
+ while (flip (&d) != DOWN);
+ boxes.push_back (b);
+ }
+
+ if (connect || fill)
+ {
+ make_draw_line_boxes (boxes, buildings, trans, scm_list_5 (scm_from_double (th),
+ scm_from_double (sp[X_AXIS]),
+ scm_from_double (sp[Y_AXIS]),
+ scm_from_double (ep[X_AXIS]),
+ scm_from_double (ep[Y_AXIS])),
+ false);
+ }
+
+ if (th > 0.0)
+ {
+ // beg line cap
+ complex<Real> coord = polar (1.0, start);
+ Offset pt (real (coord) * x_rad,
+ imag (coord) * y_rad);
+ Real slope = pt[Y_AXIS] / pt[X_AXIS];
+ create_path_cap (boxes,
+ buildings,
+ trans,
+ pt,
+ th / 2,
+ perpendicular_slope (slope),
+ Direction (sign (slope)));
+
+ // end line cap
+ coord = polar (1.0, start);
+ pt = Offset (real (coord) * x_rad,
+ imag (coord) * y_rad);
+ slope = pt[Y_AXIS] / pt[X_AXIS];
+ create_path_cap (boxes,
+ buildings,
+ trans,
+ pt,
+ th / 2,
+ perpendicular_slope (slope),
+ Direction (sign (-slope)));
+ }
+}
+
+void
+make_round_filled_box_boxes (vector<Box> &boxes, PangoMatrix trans, SCM expr)
+{
+ Real left = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real right = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real bottom = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real top = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real th = robust_scm2double (scm_car (expr), 0.0);
+ //////////////////////
+ vector<Offset> points;
+ Box b;
+ Offset p0 = Offset (-left - (th / 2), -bottom - (th / 2));
+ Offset p1 = Offset (right + (th / 2), top + (th / 2));
+ pango_matrix_transform_point (&trans, &p0[X_AXIS], &p0[Y_AXIS]);
+ pango_matrix_transform_point (&trans, &p1[X_AXIS], &p1[Y_AXIS]);
+ b.add_point (p0);
+ b.add_point (p1);
+ boxes.push_back (b);
+}
+
+void
+create_path_cap (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, Offset pt, Real rad, Real slope, Direction d)
+{
+ Real angle = atan (slope) * 180 / M_PI;
+ Real other = angle > 180 ? angle - 180 : angle + 180;
+ if (angle < other)
+ {
+ Real holder = other;
+ other = angle;
+ angle = holder;
+ }
+ other = (slope >= 0 && d == DOWN) || (slope < 0 && d == UP)
+ ? other + 360.0
+ : other;
+ PangoMatrix new_trans (trans);
+ pango_matrix_translate (&new_trans, pt[X_AXIS], pt[Y_AXIS]);
+ make_partial_ellipse_boxes (boxes, buildings, new_trans,
+ scm_list_n (scm_from_double (rad),
+ scm_from_double (rad),
+ scm_from_double (angle),
+ scm_from_double (other),
+ scm_from_double (0.0),
+ SCM_BOOL_F,
+ SCM_BOOL_F,
+ SCM_UNDEFINED));
+}
+
+void
+make_draw_bezier_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
+{
+ Real th = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real x0 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real y0 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real x1 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real y1 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real x2 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real y2 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real x3 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real y3 = robust_scm2double (scm_car (expr), 0.0);
+ //////////////////////
+ Bezier curve;
+ curve.control_[0] = Offset (x0, y0);
+ curve.control_[1] = Offset (x1, y1);
+ curve.control_[2] = Offset (x2, y2);
+ curve.control_[3] = Offset (x3, y3);
+ Offset temp0 (x0, y0);
+ Offset temp1 (x1, y1);
+ Offset temp2 (x2, y2);
+ Offset temp3 (x3, y3);
+ pango_matrix_transform_point (&trans, &temp0[X_AXIS], &temp0[Y_AXIS]);
+ pango_matrix_transform_point (&trans, &temp1[X_AXIS], &temp1[Y_AXIS]);
+ pango_matrix_transform_point (&trans, &temp2[X_AXIS], &temp2[Y_AXIS]);
+ pango_matrix_transform_point (&trans, &temp3[X_AXIS], &temp3[Y_AXIS]);
+ //////////////////////
+ Drul_array<vector<Offset> > points;
+ Direction d = DOWN;
+ int quantization = int (((temp1 - temp0).length ()
+ + (temp2 - temp1).length ()
+ + (temp3 - temp2).length ())
+ / QUANTIZATION_UNIT);
+ do
+ {
+ Offset first = get_point_in_y_direction (curve.control_[0], perpendicular_slope (curve.slope_at_point (0.0)), th / 2, d);
+ pango_matrix_transform_point (&trans, &first[X_AXIS], &first[Y_AXIS]);
+ points[d].push_back (first);
+ for (vsize i = 1; i < quantization; i++)
+ {
+ Real pt = (i * 1.0) / quantization;
+ Offset inter = get_point_in_y_direction (curve.curve_point (pt), perpendicular_slope (curve.slope_at_point (pt)), th / 2, d);
+ pango_matrix_transform_point (&trans, &inter[X_AXIS], &inter[Y_AXIS]);
+ points[d].push_back (inter);
+ }
+ Offset last = get_point_in_y_direction (curve.control_[3], curve.slope_at_point (1.0), th / 2, d);
+ pango_matrix_transform_point (&trans, &last[X_AXIS], &last[Y_AXIS]);
+ points[d].push_back (last);
+ }
+ while (flip (&d) != DOWN);
+
+ for (vsize i = 0; i < points[DOWN].size () - 1; i++)
+ {
+ Box b;
+ do
+ {
+ b.add_point (points[d][i]);
+ b.add_point (points[d][i + 1]);
+ }
+ while (flip (&d) != DOWN);
+ boxes.push_back (b);
+ }
+
+ // beg line cap
+ if (th >= 0)
+ {
+ Real slope = curve.slope_at_point (0.0);
+ d = Direction (sign (slope == 0.0 || abs (slope) == infinity_f
+ ? curve.slope_at_point (0.0001)
+ : slope));
+
+ create_path_cap (boxes,
+ buildings,
+ trans,
+ curve.control_[0],
+ th / 2,
+ perpendicular_slope (curve.slope_at_point (0.0)),
+ d);
+
+ // end line cap
+ slope = curve.slope_at_point (1.0);
+ d = Direction (sign (slope == 0.0 || abs (slope) == infinity_f
+ ? curve.slope_at_point (0.9999)
+ : slope));
+
+ create_path_cap (boxes,
+ buildings,
+ trans,
+ curve.control_[3],
+ th / 2,
+ perpendicular_slope (curve.slope_at_point (1.0)),
+ d);
+ }
+}
+
+/*
+ converts a path into lists of 4 (line) or 8 (curve) absolute coordinates
+ for example:
+ '(moveto 1 2 lineto 3 4 rlineto -1 -1 curveto 3 3 5 5 6 6 rcurveto -1 -1 -1 -1 -1 -1 closepath)
+ becomes
+ '((1 2 3 4)
+ (3 4 2 3)
+ (2 3 3 3 5 5 6 6)
+ (6 6 5 5 4 4 3 3)
+ (3 3 1 2))
+*/
+
+SCM
+all_commands_to_absolute_and_group (SCM expr)
+{
+ SCM out = SCM_EOL;
+ Offset start (0, 0);
+ Offset current (0, 0);
+ bool first = true;
+ while (scm_is_pair (expr))
+ {
+ if (scm_car (expr) == ly_symbol2scm ("moveto")
+ || (scm_car (expr) == ly_symbol2scm ("rmoveto") && first))
+ {
+ Real x = robust_scm2double (scm_cadr (expr), 0.0);
+ Real y = robust_scm2double (scm_caddr (expr), 0.0);
+ start = Offset (x, y);
+ current = start;
+ expr = scm_cdddr (expr);
+ }
+ if (scm_car (expr) == ly_symbol2scm ("rmoveto"))
+ {
+ Real x = robust_scm2double (scm_cadr (expr), 0.0);
+ Real y = robust_scm2double (scm_caddr (expr), 0.0);
+ start = (Offset (x, y) + current);
+ current = start;
+ expr = scm_cdddr (expr);
+ }
+ else if (scm_car (expr) == ly_symbol2scm ("lineto"))
+ {
+ Real x = robust_scm2double (scm_cadr (expr), 0.0);
+ Real y = robust_scm2double (scm_caddr (expr), 0.0);
+ out = scm_cons (scm_list_4 (scm_from_double (current[X_AXIS]),
+ scm_from_double (current[Y_AXIS]),
+ scm_from_double (x),
+ scm_from_double (y)),
+ out);
+ current = Offset (x, y);
+ expr = scm_cdddr (expr);
+ }
+ else if (scm_car (expr) == ly_symbol2scm ("rlineto"))
+ {
+ Real x = robust_scm2double (scm_cadr (expr), 0.0);
+ Real y = robust_scm2double (scm_caddr (expr), 0.0);
+ out = scm_cons (scm_list_4 (scm_from_double (current[X_AXIS]),
+ scm_from_double (current[Y_AXIS]),
+ scm_from_double (x + current[X_AXIS]),
+ scm_from_double (y + current[Y_AXIS])),
+ out);
+ current = (Offset (x, y) + current);
+ expr = scm_cdddr (expr);
+ }
+ else if (scm_car (expr) == ly_symbol2scm ("curveto"))
+ {
+ Real x1 = robust_scm2double (scm_cadr (expr), 0.0);
+ expr = scm_cddr (expr);
+ Real y1 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real x2 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real y2 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real x3 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real y3 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ out = scm_cons (scm_list_n (scm_from_double (current[X_AXIS]),
+ scm_from_double (current[Y_AXIS]),
+ scm_from_double (x1),
+ scm_from_double (y1),
+ scm_from_double (x2),
+ scm_from_double (y2),
+ scm_from_double (x3),
+ scm_from_double (y3),
+ SCM_UNDEFINED),
+ out);
+ current = Offset (x3, y3);
+ }
+ else if (scm_car (expr) == ly_symbol2scm ("rcurveto"))
+ {
+ Real x1 = robust_scm2double (scm_cadr (expr), 0.0);
+ expr = scm_cddr (expr);
+ Real y1 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real x2 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real y2 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real x3 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ Real y3 = robust_scm2double (scm_car (expr), 0.0);
+ expr = scm_cdr (expr);
+ out = scm_cons (scm_list_n (scm_from_double (current[X_AXIS]),
+ scm_from_double (current[Y_AXIS]),
+ scm_from_double (x1 + current[X_AXIS]),
+ scm_from_double (y1 + current[Y_AXIS]),
+ scm_from_double (x2 + current[X_AXIS]),
+ scm_from_double (y2 + current[Y_AXIS]),
+ scm_from_double (x3 + current[X_AXIS]),
+ scm_from_double (y3 + current[Y_AXIS]),
+ SCM_UNDEFINED),
+ out);
+ current = (Offset (x3, y3) + current);
+ }
+ else if (scm_car (expr) == ly_symbol2scm ("closepath"))
+ {
+ if ((current[X_AXIS] != start[X_AXIS]) || (current[Y_AXIS] != start[Y_AXIS]))
+ {
+ out = scm_cons (scm_list_4 (scm_from_double (current[X_AXIS]),
+ scm_from_double (current[Y_AXIS]),
+ scm_from_double (start[X_AXIS]),
+ scm_from_double (start[Y_AXIS])),
+ out);
+ current = start;
+ }
+ expr = scm_cdr (expr);
+ }
+ else
+ {
+ warning ("Malformed path for path stencil.");
+ return out;
+ }
+ first = false;
+ }
+ return scm_reverse_x (out, SCM_EOL);
+}
+
+void
+internal_make_path_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr, bool use_building)
+{
+ SCM blot = scm_car (expr);
+ expr = scm_cdr (expr);
+ SCM path = all_commands_to_absolute_and_group (expr);
+ // note that expr has more stuff that we don't need after this - simply ignore it
+ //////////////////////
+ for (SCM s = path; scm_is_pair (s); s = scm_cdr (s))
+ {
+ scm_to_int (scm_length (scm_car (s))) == 4
+ ? make_draw_line_boxes (boxes, buildings, trans, scm_cons (blot, scm_car (s)), use_building)
+ : make_draw_bezier_boxes (boxes, buildings, trans, scm_cons (blot, scm_car (s)));
+ }
+}
+
+void
+make_path_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
+{
+ return internal_make_path_boxes (boxes, buildings, trans, scm_cons (scm_car (expr), get_path_list (scm_cdr (expr))), false);
+}
+
+void
+make_polygon_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
+{
+ SCM coords = get_number_list (scm_car (expr));
+ expr = scm_cdr (expr);
+ SCM blot_diameter = scm_car (expr);
+ //////////////////////
+ bool first = true;
+ SCM l = SCM_EOL;
+ for (SCM s = coords; scm_is_pair (s); s = scm_cddr (s))
+ {
+ l = scm_cons (first ? ly_symbol2scm ("moveto") : ly_symbol2scm ("lineto"), l);
+ l = scm_cons (scm_car (s), l);
+ l = scm_cons (scm_cadr (s), l);
+ first = false;
+ }
+ l = scm_cons (ly_symbol2scm ("closepath"), l);
+ internal_make_path_boxes (boxes, buildings, trans, scm_cons (blot_diameter, scm_reverse_x (l, SCM_EOL)), true);
+}
+
+void
+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 = unsmob_metrics (fm_scm);
+ expr = scm_cdr (expr);
+ SCM glyph = scm_car (expr);
+ string glyph_s = ly_scm2string (glyph);
+
+ //////////////////////
+ Open_type_font *open_fm
+ = dynamic_cast<Open_type_font *>
+ (dynamic_cast<Modified_font_metric *>(fm)->original_font ());
+ SCM_ASSERT_TYPE (open_fm, fm_scm, SCM_ARG1, __FUNCTION__, "OpenType font");
+
+ size_t gidx = open_fm->name_to_index (glyph_s);
+ // Bbox is the best approximation of the width based on how it would be
+ // calculated in open-type-font.cc if it were based on real extents
+ Box bbox = open_fm->get_unscaled_indexed_char_dimensions (gidx);
+ bbox.scale (dynamic_cast<Modified_font_metric *>(fm)->get_magnification () * open_fm->design_size () / open_fm->get_units_per_EM ());
+ // Real bbox is the real bbox of the object
+ Box real_bbox = open_fm->get_glyph_outline_bbox (gidx);
+
+ Real scale = bbox[X_AXIS].length () / real_bbox[X_AXIS].length ();
+
+ pango_matrix_scale (&trans, scale, scale);
+
+ SCM outline = open_fm->get_glyph_outline (gidx);
+ //////////////////////
+ for (SCM s = outline;
+ scm_is_pair (s);
+ s = scm_cdr (s))
+ {
+ scm_to_int (scm_length (scm_car (s))) == 4
+ ? make_draw_line_boxes (boxes, buildings, trans, scm_cons (scm_from_double (0), scm_car (s)), false)
+ : make_draw_bezier_boxes (boxes, buildings, trans, scm_cons (scm_from_double (0), scm_car (s)));
+ }
+}
+
+void
+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 = unsmob_metrics (fm_scm);
+ expr = scm_cdr (expr);
+ expr = scm_cdr (expr); // font-name
+ expr = scm_cdr (expr); // size
+ expr = scm_cdr (expr); // cid?
+ SCM whxy = scm_cadar (expr);
+ vector<Real> widths;
+ vector<Interval> heights;
+ vector<Real> xos;
+ vector<Real> yos;
+ vector<string> char_ids;
+ //////////////////////
+ Pango_font *pango_fm = dynamic_cast<Pango_font *> (fm);
+ SCM_ASSERT_TYPE (pango_fm, fm_scm, SCM_ARG1, __FUNCTION__, "Pango font");
+
+ for (SCM s = whxy; scm_is_pair (s); s = scm_cdr (s))
+ {
+ SCM now = scm_car (s);
+ widths.push_back (robust_scm2double (scm_car (now), 0.0));
+ now = scm_cdr (now);
+ heights.push_back (robust_scm2interval (scm_car (now), Interval (0, 0)));
+ now = scm_cdr (now);
+ xos.push_back (robust_scm2double (scm_car (now), 0.0));
+ now = scm_cdr (now);
+ yos.push_back (robust_scm2double (scm_car (now), 0.0));
+ now = scm_cdr (now);
+ char_ids.push_back (robust_scm2string (scm_car (now), ""));
+ }
+ Real cumulative_x = 0.0;
+ for (vsize i = 0; i < widths.size (); i++)
+ {
+ PangoMatrix transcopy (trans);
+ Offset pt0 (cumulative_x + xos[i], heights[i][DOWN] + yos[i]);
+ Offset pt1 (cumulative_x + widths[i] + xos[i], heights[i][UP] + yos[i]);
+ cumulative_x += widths[i];
+
+ Box kerned_bbox;
+ kerned_bbox.add_point (pt0);
+ kerned_bbox.add_point (pt1);
+ size_t gidx = pango_fm->name_to_index (char_ids[i]);
+ Box real_bbox = pango_fm->get_scaled_indexed_char_dimensions (gidx);
+ Box bbox = pango_fm->get_unscaled_indexed_char_dimensions (gidx);
+ SCM outline = pango_fm->get_glyph_outline (gidx);
+
+ // scales may have rounding error but should be close
+ Real xlen = real_bbox[X_AXIS].length () / bbox[X_AXIS].length ();
+ Real ylen = real_bbox[Y_AXIS].length () / bbox[Y_AXIS].length ();
+
+ /*
+ TODO:
+
+ The value will be nan for whitespace, in which case we just want
+ filler, so the kerned bbox is ok.
+
+ However, if the value is inf, this likely means that LilyPond is
+ using a font that is currently difficult to get the measurements
+ from the Pango_font. This should eventually be fixed. The solution
+ for now is just to use the bounding box.
+ */
+ if (isnan (xlen) || isnan (ylen) || isinf (xlen) || isinf (ylen))
+ outline = box_to_scheme_lines (kerned_bbox);
+ else
+ {
+ assert (abs (xlen - ylen) < 10e-3);
+
+ Real scale_factor = max (xlen, ylen);
+ // the three operations below move the stencil from its original coordinates to current coordinates
+ pango_matrix_translate (&transcopy, kerned_bbox[X_AXIS][LEFT], kerned_bbox[Y_AXIS][DOWN] - real_bbox[Y_AXIS][DOWN]);
+ pango_matrix_translate (&transcopy, real_bbox[X_AXIS][LEFT], real_bbox[Y_AXIS][DOWN]);
+ pango_matrix_scale (&transcopy, scale_factor, scale_factor);
+ pango_matrix_translate (&transcopy, -bbox[X_AXIS][LEFT], -bbox[Y_AXIS][DOWN]);
+ }
+ //////////////////////
+ for (SCM s = outline;
+ scm_is_pair (s);
+ s = scm_cdr (s))
+ {
+ scm_to_int (scm_length (scm_car (s))) == 4
+ ? make_draw_line_boxes (boxes, buildings, transcopy, scm_cons (scm_from_double (0), scm_car (s)), false)
+ : make_draw_bezier_boxes (boxes, buildings, transcopy, scm_cons (scm_from_double (0), scm_car (s)));
+ }
+ }
+}
+
+/*
+ receives a stencil expression and a transform matrix
+ depending on the stencil name, dispatches it to the appropriate function
+*/
+
+void
+stencil_dispatcher (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
+{
+ if (not scm_is_pair (expr))
+ return;
+ if (scm_car (expr) == ly_symbol2scm ("draw-line"))
+ make_draw_line_boxes (boxes, buildings, trans, scm_cdr (expr), true);
+ else if (scm_car (expr) == ly_symbol2scm ("dashed-line"))
+ {
+ expr = scm_cdr (expr);
+ SCM th = scm_car (expr);
+ expr = scm_cdr (expr);
+ expr = scm_cdr (expr); // on
+ expr = scm_cdr (expr); // off
+ SCM x1 = scm_car (expr);
+ expr = scm_cdr (expr);
+ SCM x2 = scm_car (expr);
+ make_draw_line_boxes (boxes, buildings, trans, scm_list_5 (th, scm_from_double (0.0), scm_from_double (0.0), x1, x2), true);
+ }
+ else if (scm_car (expr) == ly_symbol2scm ("circle"))
+ {
+ expr = scm_cdr (expr);
+ SCM rad = scm_car (expr);
+ expr = scm_cdr (expr);
+ SCM th = scm_car (expr);
+ make_partial_ellipse_boxes (boxes, buildings, trans,
+ scm_list_n (rad,
+ rad,
+ scm_from_double (0.0),
+ scm_from_double (360.0),
+ th,
+ SCM_BOOL_F,
+ SCM_BOOL_T,
+ SCM_UNDEFINED));
+ }
+ else if (scm_car (expr) == ly_symbol2scm ("ellipse"))
+ {
+ expr = scm_cdr (expr);
+ SCM x_rad = scm_car (expr);
+ expr = scm_cdr (expr);
+ SCM y_rad = scm_car (expr);
+ expr = scm_cdr (expr);
+ SCM th = scm_car (expr);
+ make_partial_ellipse_boxes (boxes, buildings, trans,
+ scm_list_n (x_rad,
+ y_rad,
+ scm_from_double (0.0),
+ scm_from_double (360.0),
+ th,
+ SCM_BOOL_F,
+ SCM_BOOL_T,
+ SCM_UNDEFINED));
+ }
+ else if (scm_car (expr) == ly_symbol2scm ("partial-ellipse"))
+ make_partial_ellipse_boxes (boxes, buildings, trans, scm_cdr (expr));
+ else if (scm_car (expr) == ly_symbol2scm ("round-filled-box"))
+ make_round_filled_box_boxes (boxes, trans, scm_cdr (expr));
+ else if (scm_car (expr) == ly_symbol2scm ("named-glyph"))
+ make_named_glyph_boxes (boxes, buildings, trans, scm_cdr (expr));
+ else if (scm_car (expr) == ly_symbol2scm ("polygon"))
+ make_polygon_boxes (boxes, buildings, trans, scm_cdr (expr));
+ else if (scm_car (expr) == ly_symbol2scm ("path"))
+ make_path_boxes (boxes, buildings, trans, scm_cdr (expr));
+ else if (scm_car (expr) == ly_symbol2scm ("glyph-string"))
+ make_glyph_string_boxes (boxes, buildings, trans, scm_cdr (expr));
+ else
+ {
+#if 0
+ warning ("Stencil expression not supported by the veritcal skylines.");
+#endif
+ /*
+ We don't issue a warning here, as we assume that stencil-expression.cc
+ is doing stencil-checking correctly.
+ */
+ }
+}
+
+/*
+ traverses a stencil expression, returning a vector of Transform_matrix_and_expression
+ the struct Transform_matrix_and_expression contains two members,
+ a Transform_matrix that indicates where to move a stencil and the stencil expression
+ to show how to construct the stencil
+*/
+vector<Transform_matrix_and_expression>
+stencil_traverser (PangoMatrix trans, SCM expr)
+{
+ if (scm_is_null (expr))
+ return vector<Transform_matrix_and_expression> ();
+ else if (expr == ly_string2scm (""))
+ return vector<Transform_matrix_and_expression> ();
+ else if (scm_car (expr) == ly_symbol2scm ("combine-stencil"))
+ {
+ vector<Transform_matrix_and_expression> out;
+ for (SCM s = scm_cdr (expr); scm_is_pair (s); s = scm_cdr (s))
+ {
+ vector<Transform_matrix_and_expression> res = stencil_traverser (trans, scm_car (s));
+ out.insert (out.end (), res.begin (), res.end ());
+ }
+ return out;
+ }
+ else if (scm_car (expr) == ly_symbol2scm ("footnote"))
+ return vector<Transform_matrix_and_expression> ();
+ else if (scm_car (expr) == ly_symbol2scm ("translate-stencil"))
+ {
+ Real x = robust_scm2double (scm_caadr (expr), 0.0);
+ Real y = robust_scm2double (scm_cdadr (expr), 0.0);
+ pango_matrix_translate (&trans, x, y);
+ return stencil_traverser (trans, scm_caddr (expr));
+ }
+ else if (scm_car (expr) == ly_symbol2scm ("scale-stencil"))
+ {
+ Real x = robust_scm2double (scm_caadr (expr), 0.0);
+ Real y = robust_scm2double (scm_cadadr (expr), 0.0);
+ pango_matrix_scale (&trans, x, y);
+ return stencil_traverser (trans, scm_caddr (expr));
+ }
+ else if (scm_car (expr) == ly_symbol2scm ("rotate-stencil"))
+ {
+ Real ang = robust_scm2double (scm_caadr (expr), 0.0);
+ Real x = robust_scm2double (scm_car (scm_cadadr (expr)), 0.0);
+ Real y = robust_scm2double (scm_cdr (scm_cadadr (expr)), 0.0);
+ pango_matrix_translate (&trans, x, y);
+ pango_matrix_rotate (&trans, -ang);
+ pango_matrix_translate (&trans, -x, -y);
+ return stencil_traverser (trans, scm_caddr (expr));
+ }
+ else if (scm_car (expr) == ly_symbol2scm ("delay-stencil-evaluation"))
+ return stencil_traverser (trans, scm_force (scm_cadr (expr)));
+ else if (scm_car (expr) == ly_symbol2scm ("grob-cause"))
+ return stencil_traverser (trans, scm_caddr (expr));
+ else if (scm_car (expr) == ly_symbol2scm ("color"))
+ return stencil_traverser (trans, scm_caddr (expr));
+ else if (scm_car (expr) == ly_symbol2scm ("id"))
+ return stencil_traverser (trans, scm_caddr (expr));
+ else
+ {
+ vector<Transform_matrix_and_expression> out;
+ out.push_back (Transform_matrix_and_expression (trans, expr));
+ return out;
+ }
+ warning ("Stencil expression not supported by the veritcal skylines.");
+ return vector<Transform_matrix_and_expression> ();
+}
+
+SCM
+Grob::internal_simple_skylines_from_stencil (SCM smob, Axis a)
+{
+ Grob *me = unsmob_grob (smob);
+
+ if (to_boolean (me->get_property ("cross-staff")))
+ return Skyline_pair ().smobbed_copy ();
+
+ extract_grob_set (me, "elements", elts);
+ if (elts.size ())
+ return internal_skylines_from_element_stencils (smob, a);
+
+ Stencil *s = unsmob_stencil (me->get_property ("stencil"));
+ if (!s)
+ return Skyline_pair ().smobbed_copy ();
+
+ vector<Box> boxes;
+ boxes.push_back (Box (s->extent (X_AXIS), s->extent (Y_AXIS)));
+ return Skyline_pair (boxes, a).smobbed_copy ();
+}
+
+MAKE_SCHEME_CALLBACK (Grob, simple_vertical_skylines_from_stencil, 1);
+SCM
+Grob::simple_vertical_skylines_from_stencil (SCM smob)
+{
+ return internal_simple_skylines_from_stencil (smob, X_AXIS);
+}
+
+MAKE_SCHEME_CALLBACK (Grob, simple_horizontal_skylines_from_stencil, 1);
+SCM
+Grob::simple_horizontal_skylines_from_stencil (SCM smob)
+{
+ return internal_simple_skylines_from_stencil (smob, Y_AXIS);
+}
+
+SCM
+Stencil::skylines_from_stencil (SCM sten, Real pad, Axis a)
+{
+ Stencil *s = unsmob_stencil (sten);
+ if (!s)
+ return Skyline_pair ().smobbed_copy ();
+
+ vector<Transform_matrix_and_expression> data
+ = stencil_traverser (make_transform_matrix (1.0, 0.0, 0.0, 1.0, 0.0, 0.0),
+ s->expr ());
+ vector<Box> boxes;
+ vector<Drul_array<Offset> > buildings;
+ for (vsize i = 0; i < data.size (); i++)
+ stencil_dispatcher (boxes, buildings, data[i].tm_, data[i].expr_);
+
+ // we use the bounding box if there are no boxes
+ if (!boxes.size () && !buildings.size ())
+ boxes.push_back (Box (s->extent (X_AXIS), s->extent (Y_AXIS)));
+
+ Skyline_pair out (boxes, a);
+ out.merge (Skyline_pair (buildings, a));
+
+ for (DOWN_and_UP (d))
+ out[d] = out[d].padded (pad);
+
+ out.deholify ();
+ return out.smobbed_copy ();
+}
+
+MAKE_SCHEME_CALLBACK (Grob, vertical_skylines_from_stencil, 1);
+SCM
+Grob::vertical_skylines_from_stencil (SCM 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);
+
+ return out;
+}
+
+MAKE_SCHEME_CALLBACK (Grob, horizontal_skylines_from_stencil, 1);
+SCM
+Grob::horizontal_skylines_from_stencil (SCM 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);
+
+ return out;
+}
+
+SCM
+Grob::internal_skylines_from_element_stencils (SCM smob, Axis a)
+{
+ Grob *me = unsmob_grob (smob);
+
+ extract_grob_set (me, "elements", elts);
+ vector<Real> x_pos;
+ vector<Real> y_pos;
+ Grob *x_common = common_refpoint_of_array (elts, me, X_AXIS);
+ Grob *y_common = common_refpoint_of_array (elts, me, Y_AXIS);
+ for (vsize i = 0; i < elts.size (); i++)
+ {
+ x_pos.push_back (elts[i]->relative_coordinate (x_common, X_AXIS));
+ y_pos.push_back (elts[i]->relative_coordinate (y_common, Y_AXIS));
+ }
+ Real my_x = me->relative_coordinate (x_common, X_AXIS);
+ Real my_y = me->relative_coordinate (y_common, Y_AXIS);
+ Skyline_pair res;
+ for (vsize i = 0; i < elts.size (); i++)
+ {
+ Skyline_pair *skyp = Skyline_pair::unsmob (elts[i]->get_property (a == X_AXIS ? "vertical-skylines" : "horizontal-skylines"));
+ if (skyp)
+ {
+ /*
+ Here, copying is essential. Otherwise, the skyline pair will
+ get doubly shifted!
+ */
+ /*
+ It took Mike about 6 months of his life to add the `else' clause
+ below. For horizontal skylines, the raise and shift calls need
+ to be reversed. This is what was causing the problems in the
+ shifting with all of the tests. RIP 6 months!
+ */
+ Skyline_pair copy = Skyline_pair (*skyp);
+ if (a == X_AXIS)
+ {
+ copy.shift (x_pos[i] - my_x);
+ copy.raise (y_pos[i] - my_y);
+ }
+ else
+ {
+ copy.raise (x_pos[i] - my_x);
+ copy.shift (y_pos[i] - my_y);
+ }
+ res.merge (copy);
+ }
+ }
+ return res.smobbed_copy ();
+}
+
+MAKE_SCHEME_CALLBACK (Grob, vertical_skylines_from_element_stencils, 1);
+SCM
+Grob::vertical_skylines_from_element_stencils (SCM smob)
+{
+ return internal_skylines_from_element_stencils (smob, X_AXIS);
+}
+
+MAKE_SCHEME_CALLBACK (Grob, horizontal_skylines_from_element_stencils, 1);
+SCM
+Grob::horizontal_skylines_from_element_stencils (SCM smob)
+{
+ return internal_skylines_from_element_stencils (smob, Y_AXIS);
+}
Stencil *s = unsmob_stencil (stil);
LY_ASSERT_SMOB (Stencil, stil, 1);
LY_ASSERT_TYPE (scm_is_number, amount, 2);
+
LY_ASSERT_TYPE (is_axis, axis, 3);
Real real_amount = scm_to_double (amount);
#include "pointer-group-interface.hh"
#include "skyline-pair.hh"
#include "staff-symbol-referencer.hh"
+#include "system-start-delimiter.hh"
#include "text-interface.hh"
#include "warn.hh"
#include "unpure-pure-container.hh"
return grobs_scm;
}
+MAKE_SCHEME_CALLBACK (System, vertical_skyline_elements, 1);
+SCM
+System::vertical_skyline_elements (SCM 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++)
+ if (System_start_delimiter::has_interface (my_elts[i]))
+ vertical_skyline_grobs.push_back (my_elts[i]);
+
+ System *me = dynamic_cast<System *> (me_grob);
+ Grob *align = unsmob_grob (me->get_object ("vertical-alignment"));
+ if (!align)
+ {
+ SCM grobs_scm = Grob_array::make_array ();
+ unsmob_grob_array (grobs_scm)->set_array (vertical_skyline_grobs);
+ return grobs_scm;
+ }
+
+ extract_grob_set (align, "elements", elts);
+
+ for (vsize i = 0; i < elts.size (); i++)
+ if (Hara_kiri_group_spanner::has_interface (elts[i]))
+ vertical_skyline_grobs.push_back (elts[i]);
+
+ SCM grobs_scm = Grob_array::make_array ();
+ unsmob_grob_array (grobs_scm)->set_array (vertical_skyline_grobs);
+ return grobs_scm;
+}
+
void
System::break_into_pieces (vector<Column_x_positions> const &breaking)
{
pl->set_property ("last-in-score", SCM_BOOL_T);
Interval staff_refpoints;
- if (Grob *align = get_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++)
return dynamic_cast<System *> (system_grob);
}
-Grob *
-System::get_vertical_alignment ()
+MAKE_SCHEME_CALLBACK (System, get_vertical_alignment, 1);
+SCM
+System::get_vertical_alignment (SCM smob)
{
- extract_grob_set (this, "elements", elts);
+ Grob *me = unsmob_grob (smob);
+ extract_grob_set (me, "elements", elts);
Grob *ret = 0;
for (vsize i = 0; i < elts.size (); i++)
if (Align_interface::has_interface (elts[i]))
{
if (ret)
- programming_error ("found multiple vertical alignments in this system");
+ me->programming_error ("found multiple vertical alignments in this system");
ret = elts[i];
}
if (!ret)
- programming_error ("didn't find a vertical alignment in this system");
- return ret;
+ {
+ me->programming_error ("didn't find a vertical alignment in this system");
+ return SCM_EOL;
+ }
+ return ret->self_scm ();
}
// Finds the furthest staff in the given direction whose x-extent
Grob *
System::get_extremal_staff (Direction dir, Interval const &iv)
{
- Grob *align = get_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 = get_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 = get_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 = get_vertical_alignment ();
+ Grob *alignment = unsmob_grob (get_object ("vertical-alignment"));
if (!alignment)
return Interval ();
get_maybe_spaceable_staves (SCM smob, int filter)
{
System *me = dynamic_cast<System *> (unsmob_grob (smob));
- Grob *align = me->get_vertical_alignment ();
+ Grob *align = unsmob_grob (me->get_object ("vertical_alignment"));
SCM ret = SCM_EOL;
if (align)
"in-note-stencil "
"labels "
"pure-Y-extent "
- "skyline-horizontal-padding "
+ "vertical-alignment "
);
*/
#include "text-interface.hh"
+#include "skyline-pair.hh"
+#include "lookup.hh"
#include "config.hh"
#include "font-interface.hh"
#include "grob.hh"
{
Grob *head_;
Moment end_moment_;
- SCM tie_definition_;
Stream_event *tie_stream_event_;
Stream_event *tie_event_;
+ Spanner *tie_;
// Indicate whether a tie from the same moment has been processed successfully
// This is needed for tied chords, e.g. <c e g>~ g, because otherwise the c
// and e will trigger a warning for an unterminated tie!
Head_event_tuple ()
{
head_ = 0;
- tie_definition_ = SCM_EOL;
tie_event_ = 0;
tie_stream_event_ = 0;
tie_from_chord_created = false;
+ tie_ = 0;
}
};
class Tie_engraver : public Engraver
{
+ /*
+ Whether tie event has been processed and can be deleted or should
+ be kept for later portions of a split note.
+ */
+ bool event_processed_;
Stream_event *event_;
vector<Grob *> now_heads_;
vector<Head_event_tuple> heads_to_tie_;
Spanner *tie_column_;
protected:
+ void process_acknowledged ();
void stop_translation_timestep ();
- virtual void derived_mark () const;
void start_translation_timestep ();
DECLARE_ACKNOWLEDGER (note_head);
DECLARE_TRANSLATOR_LISTENER (tie);
TRANSLATOR_DECLARATIONS (Tie_engraver);
};
-void
-Tie_engraver::derived_mark () const
-{
- Engraver::derived_mark ();
- for (vsize i = 0; i < heads_to_tie_.size (); i++)
- scm_gc_mark (heads_to_tie_[i].tie_definition_);
-}
-
Tie_engraver::Tie_engraver ()
{
event_ = 0;
tie_column_ = 0;
+ event_processed_ = false;
}
IMPLEMENT_TRANSLATOR_LISTENER (Tie_engraver, tie);
// moment that created a tie, so this is not necessarily an unterminated
// tie. Happens e.g. for <c e g>~ g
if (!tie_start.tie_from_chord_created)
- tie_start.head_->warning (_ ("unterminated tie"));
+ {
+ tie_start.tie_->warning (_ ("unterminated tie"));
+ tie_start.tie_->suicide ();
+ }
}
/*
if (ly_is_equal (right_ev->get_property ("pitch"), left_ev->get_property ("pitch"))
&& (!Tie_engraver::has_autosplit_end (left_ev)))
{
- Grob *p = new Spanner (heads_to_tie_[i].tie_definition_);
+ Grob *p = heads_to_tie_[i].tie_;
Moment end = heads_to_tie_[i].end_moment_;
- SCM cause = heads_to_tie_[i].tie_event_
- ? heads_to_tie_[i].tie_event_->self_scm ()
- : heads_to_tie_[i].tie_stream_event_->self_scm ();
+ Stream_event *cause = heads_to_tie_[i].tie_event_
+ ? heads_to_tie_[i].tie_event_
+ : heads_to_tie_[i].tie_stream_event_;
+
+ announce_end_grob (p, cause->self_scm ());
- announce_grob (p, cause);
Tie::set_head (p, LEFT, th);
Tie::set_head (p, RIGHT, h);
- if (is_direction (unsmob_stream_event (cause)->get_property ("direction")))
+ if (is_direction (cause->get_property ("direction")))
{
- Direction d = to_dir (unsmob_stream_event (cause)->get_property ("direction"));
+ Direction d = to_dir (cause->get_property ("direction"));
p->set_property ("direction", scm_from_int (d));
}
}
void
-Tie_engraver::stop_translation_timestep ()
+Tie_engraver::process_acknowledged ()
{
bool wait = to_boolean (get_property ("tieWaitForNote"));
if (ties_.size ())
vector<Head_event_tuple> new_heads_to_tie;
- /*
- Whether tie event has been processed and can be deleted or should
- be kept for later portions of a split note.
- */
- bool event_processed = false;
for (vsize i = 0; i < now_heads_.size (); i++)
{
if (left_ev && (tie_event || tie_stream_event)
&& (!Tie_engraver::has_autosplit_end (left_ev)))
{
- event_processed = true;
+ event_processed_ = true;
Head_event_tuple event_tup;
- SCM start_definition
- = updated_grob_properties (context (), ly_symbol2scm ("Tie"));
-
event_tup.head_ = head;
- event_tup.tie_definition_ = start_definition;
event_tup.tie_event_ = tie_event;
event_tup.tie_stream_event_ = tie_stream_event;
+ event_tup.tie_ = make_spanner ("Tie", tie_event
+ ? tie_event->self_scm ()
+ : tie_stream_event->self_scm ());
Moment end = now_mom ();
if (end.grace_part_)
for (vsize i = 0; i < new_heads_to_tie.size (); i++)
heads_to_tie_.push_back (new_heads_to_tie[i]);
+ now_heads_.clear ();
+}
+
+void
+Tie_engraver::stop_translation_timestep ()
+{
/*
Discard event only if it has been processed with at least one
appropriate note.
*/
- if (event_processed)
+ if (event_processed_)
event_ = 0;
- now_heads_.clear ();
+ event_processed_ = false;
}
void
boxes.push_back (Box (x, y));
}
- /* todo: the horizon_padding is somewhat arbitrary */
- chord_outlines_[key] = Skyline (boxes, details_.skyline_padding_, Y_AXIS, -dir);
+ chord_outlines_[key] = Skyline (boxes, Y_AXIS, -dir).padded (details_.skyline_padding_);
if (bounds[0]->break_status_dir ())
{
Interval iv (Axis_group_interface::staff_extent (bounds[0], x_refpoint_, X_AXIS, y_refpoint_, Y_AXIS));
if (tuplets_[j].bracket_)
{
Item *i = dynamic_cast<Item *> (inf.grob ());
- Tuplet_bracket::add_script (tuplets_[j].bracket_, i);
+ if (!i->internal_has_interface (ly_symbol2scm ("dynamic-interface")))
+ Tuplet_bracket::add_script (tuplets_[j].bracket_, i);
}
}
ev = info.ultimate_event_cause ();
if (ev)
{
+ // Each tweak conses an address and a value.
+ // The address has one of the following forms:
+ // symbol -> direct tweak
+ // (grob . symbol) -> targeted tweak
+ // (#t . symbol-path) -> direct nested tweak
+ // (grob . symbol-path) -> targeted nested tweak
for (SCM s = ev->get_property ("tweaks");
scm_is_pair (s); s = scm_cdr (s))
{
if (scm_is_pair (scm_caar (s)))
{
- if (SCM_UNBNDP (grobname))
- grobname = scm_from_locale_symbol (info.grob ()->name ().c_str ());
- if (scm_is_eq (scm_caaar (s), grobname))
- info.grob ()->set_property (scm_cdaar (s), scm_cdar (s));
+ if (scm_is_symbol (scm_caaar (s)))
+ {
+ if (SCM_UNBNDP (grobname))
+ grobname = scm_from_locale_symbol
+ (info.grob ()->name ().c_str ());
+ if (scm_is_eq (scm_caaar (s), grobname))
+ if (scm_is_symbol (scm_cdaar (s)))
+ info.grob ()->set_property (scm_cdaar (s), scm_cdar (s));
+ else
+ set_nested_property (info.grob (), scm_cdaar (s),
+ scm_cdar (s));
+ }
+ else if (direct)
+ set_nested_property (info.grob (), scm_cdaar (s),
+ scm_cdar (s));
}
else if (direct)
info.grob ()->set_property (scm_caar (s), scm_cdar (s));
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+ Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
LilyPond is free software: you can redistribute it and/or modify
int context_info, int delta_pitch);
bool is_stacked_head (int prefix_set,
int context_info);
- Real align_heads (vector<Grob_info> primitives,
+ Real align_heads (vector<Grob_info> const &primitives,
Real flexa_width,
Real thickness);
void check_for_prefix_loss (Item *primitive);
protected:
virtual Spanner *create_ligature_spanner ();
virtual void transform_heads (Spanner *ligature,
- vector<Grob_info> primitives);
+ vector<Grob_info> const &primitives);
DECLARE_TRANSLATOR_LISTENER (pes_or_flexa);
DECLARE_TRANSLATOR_LISTENER (ligature);
};
}
Real
-Vaticana_ligature_engraver::align_heads (vector<Grob_info> primitives,
+Vaticana_ligature_engraver::align_heads (vector<Grob_info> const &primitives,
Real flexa_width,
Real thickness)
{
void
Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
- vector<Grob_info> primitives)
+ vector<Grob_info> const &primitives)
{
Real flexa_width = robust_scm2double (ligature->get_property ("flexa-width"), 2);
== (Spanner *)me);
Output_def *layout = me->layout ();
- Real half_space = 0.5;
Item *bound = dynamic_cast<Spanner *> (me)->get_bound (LEFT);
Interval empty;
Offset start;
- start[X_AXIS] = me->spanner_length () - left - half_space;
+ start[X_AXIS] = me->spanner_length () - left;
/*
ugh, Tuplet_bracket should use Horizontal_bracket, not the other way around.
else
str = "|";
- no_vertical_end
- |= (str != ":|"
- && str != "|:"
- && str != "|."
- && str != ":|:"
- && str != ":|.|:"
- && str != ":|.:"
- && str != ".|");
+ no_vertical_end |= ly_scm2bool (scm_call_1 (ly_lily_module_constant ("volta-bracket::calc-hook-visibility"),
+ ly_string2scm (str)));
if (no_vertical_end || no_vertical_start)
{
"bars "
"thickness "
"height "
+ "shorten-pair "
);
-\version "2.16.0"
+\version "2.17.6"
\language "italiano"
%%%%%%%
%
dwn = {
- \once \override Voice.Accidental #'stencil = #(lambda (grob)
+ \once \override Voice.Accidental.stencil = #(lambda (grob)
(ly:stencil-combine-at-edge
(ly:accidental-interface::print grob) Y UP
(grob-interpret-markup grob (markup #:line
$Id: bagpipe.ly,v 1.12 2006/03/16 14:39:46 hanwen Exp $
%}
-\version "2.16.0"
+\version "2.17.6"
% Notes of the scale of the Great Highland Bagpipe. Extra high notes for bombarde.
% Flat notes used mainly in some modern music.
hideKeySignature = {
% We normally don't want to show the key signature.
- \override Staff.KeySignature #'stencil = ##f
+ \override Staff.KeySignature.stencil = ##f
\set Staff.extraNatural = ##f
\key d \major
- \accidentalStyle "forget"
+ \accidentalStyle forget
}
showKeySignature = {
% Show the key signature e.g. for BMW compatibility.
- \override Staff.KeySignature #'stencil = #ly:key-signature-interface::print
+ \override Staff.KeySignature.stencil = #ly:key-signature-interface::print
\set Staff.extraNatural = ##f
\key d \major
- \accidentalStyle "forget"
+ \accidentalStyle forget
}
% Layout tweaks.
\context {
\Voice
% All stems go down.
- \override Stem #'direction = #DOWN
+ \override Stem.direction = #DOWN
% All slurs and ties are on top.
- \override Slur #'direction = #UP
- \override Tie #'direction = #UP
+ \override Slur.direction = #UP
+ \override Tie.direction = #UP
}
}
% Add appropriate tweaks needed for piping grace notes to look great.
stemspace = #(define-music-function (parser location extent) (pair?) #{
- \once \override Staff.Stem #'X-extent = #extent
+ \once \override Staff.Stem.X-extent = #extent
#})
pgrace = #(define-music-function (parser location notes) (ly:music?) #{
- \override Score.GraceSpacing #'spacing-increment = #0
- \override Score.Stem #'beamlet-max-length-proportion = #'(0.5 . 0.5)
+ \override Score.GraceSpacing.spacing-increment = #0
+ \override Score.Stem.beamlet-max-length-proportion = #'(0.5 . 0.5)
\small \grace $notes \normalsize
- \revert Score.Stem #'beamlet-default-length
+ \revert Score.Stem.beamlet-default-length
#})
% Single grace notes
%%%% 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.17.6"
RemoveEmptyStaves = \with {
\remove "Axis_group_engraver"
% is left before adding a new one.
\remove "Hara_kiri_engraver"
\consists "Hara_kiri_engraver"
- \override VerticalAxisGroup #'remove-empty = ##t
+ \override VerticalAxisGroup.remove-empty = ##t
\description "Remove staves which are considered to be empty according
to the list of interfaces set by @code{keepAliveInterfaces}."
}
%%%% 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.17.6"
%% < 1.8 compatibility switch
#(ly:set-option 'old-relative)
center = #0
%% FIXME
-%% should also set \override Beam #'breakable, but how to do it "portably"? (ie. also
+%% should also set \override Beam.breakable, but how to do it "portably"? (ie. also
%% working with lyric sections)
%%
-%% try \once \override Score.Beam #'breakable = ##t
+%% try \once \override Score.Beam.breakable = ##t
%% rather name \newline, \pageBreak ?
break = #(make-music 'LineBreakEvent 'break-permission 'force)
%%%% 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.17.6"
\context {
\name "Global"
\consists "Figured_bass_position_engraver"
\consists "Script_row_engraver"
\consists "Cue_clef_engraver"
- \consists "Footnote_engraver"
localKeySignature = #'()
createSpacing = ##t
clefGlyph = #"clefs.percussion"
clefPosition = #0
- \override Script #'staff-padding = #0.75
+ \override Script.staff-padding = #0.75
}
\name RhythmicStaff
\alias "Staff"
- \override BarLine #'bar-extent = #'(-2 . 2)
- \override VoltaBracket #'staff-padding = #3
- \override StaffSymbol #'line-count = #1
+ \override BarLine.bar-extent = #'(-2 . 2)
+ \override VoltaBracket.staff-padding = #3
+ \override StaffSymbol.line-count = #1
- \override Stem #'neutral-direction = #UP
- \override Beam #'neutral-direction = #UP
+ \override Stem.neutral-direction = #UP
+ \override Beam.neutral-direction = #UP
\consists "Output_property_engraver"
\consists "Font_size_engraver"
\consists "Script_engraver"
\consists "Script_column_engraver"
+ \consists "Fingering_column_engraver"
\consists "Rhythmic_column_engraver"
\consists "Note_spacing_engraver"
\consists "Spanner_break_forbid_engraver"
\name CueVoice
\alias Voice
fontSize = #-4
- \override Stem #'length-fraction = #(magstep -4)
- \override Beam #'length-fraction = #(magstep -4)
- \override Beam #'beam-thickness = #0.35
+ \override Stem.length-fraction = #(magstep -4)
+ \override Beam.length-fraction = #(magstep -4)
+ \override Beam.beam-thickness = #0.35
}
\context {
\consists "Dynamic_align_engraver"
\consists "Text_engraver"
\consists "Text_spanner_engraver"
+ \consists "Font_size_engraver"
\consists "Axis_group_engraver"
\consists "Tweak_engraver"
pedalSustainStrings = #'("Ped." "*Ped." "*")
pedalUnaCordaStrings = #'("una corda" "" "tre corde")
- \override VerticalAxisGroup #'staff-affinity = #CENTER
- \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing =
+ \override VerticalAxisGroup.staff-affinity = #CENTER
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
#'((basic-distance . 5)
(padding . 0.5))
- \override TextScript #'font-shape = #'italic
- \override DynamicLineSpanner #'Y-offset = #0
- \override DynamicText #'X-offset =
+ \override TextScript.font-shape = #'italic
+ \override DynamicLineSpanner.Y-offset = #0
+ \override DynamicText.X-offset =
#(ly:make-simple-closure
`(,+
,(ly:make-simple-closure
instrumentName = #'()
shortInstrumentName = #'()
- \override VerticalAxisGroup #'remove-first = ##t
- \override VerticalAxisGroup #'remove-empty = ##t
- \override VerticalAxisGroup #'staff-affinity = #UP
- \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing =
+ \override VerticalAxisGroup.remove-first = ##t
+ \override VerticalAxisGroup.remove-empty = ##t
+ \override VerticalAxisGroup.staff-affinity = #UP
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
#'((basic-distance . 5.5)
(padding . 0.5)
(stretchability . 1))
- \override VerticalAxisGroup #'nonstaff-nonstaff-spacing =
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing =
#'((basic-distance . 0)
(minimum-distance . 2.8)
(padding . 0.2)
(stretchability . 0))
- \override VerticalAxisGroup #'nonstaff-unrelatedstaff-spacing #'padding = #1.5
- \override InstrumentName #'self-alignment-Y = ##f
+ \override VerticalAxisGroup.nonstaff-unrelatedstaff-spacing.padding = #1.5
+ \override InstrumentName.self-alignment-Y = ##f
%% sync with define-grobs.scm ;
- \override InstrumentName #'font-size = #1.0
+ \override InstrumentName.font-size = #1.0
%% make sure that barlines aren't collapsed, when
%% Bar_engraver is there.
- \override BarLine #'bar-extent = #'(-0.05 . 0.05)
+ \override BarLine.bar-extent = #'(-0.05 . 0.05)
}
\description "A context for printing the names of notes."
\consists "Axis_group_engraver"
- \override VerticalAxisGroup #'staff-affinity = #UP
- \override VerticalAxisGroup #'nonstaff-nonstaff-spacing =
+ \override VerticalAxisGroup.staff-affinity = #UP
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing =
#'((basic-distance . 0)
(minimum-distance . 2.8)
(padding . 0.2)
(stretchability . 0))
- \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing =
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
#'((basic-distance . 5.5)
(padding . 0.5)
(stretchability . 1))
- \override VerticalAxisGroup
- #'nonstaff-unrelatedstaff-spacing #'padding = 1.5
+ \override VerticalAxisGroup.nonstaff-unrelatedstaff-spacing.padding = 1.5
\consists "Tie_engraver"
\consists "Note_name_engraver"
\consists "Chord_name_engraver"
\consists "Hara_kiri_engraver"
% \consists "Note_spacing_engraver"
- \override VerticalAxisGroup #'remove-first = ##t
- \override VerticalAxisGroup #'remove-empty = ##t
- \override VerticalAxisGroup #'staff-affinity = #DOWN
- \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing #'padding = #0.5
- \override VerticalAxisGroup #'nonstaff-nonstaff-spacing #'padding = #0.5
+ \override VerticalAxisGroup.remove-first = ##t
+ \override VerticalAxisGroup.remove-empty = ##t
+ \override VerticalAxisGroup.staff-affinity = #DOWN
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #0.5
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing.padding = #0.5
}
\context {
decrescendoSpanner = #'hairpin
defaultBarType = #"|"
- doubleRepeatType = #":|:"
- startRepeatType = #"|:"
- endRepeatType = #":|"
+ doubleRepeatType = #":..:"
+ startRepeatType = #".|:"
+ endRepeatType = #":|."
barNumberVisibility = #first-bar-number-invisible-and-no-parenthesized-bar-numbers
barNumberFormatter = #robust-bar-number-function
+ clefOctavationFormatter = #clef-octavation-markup
+ cueClefOctavationFormatter = #clef-octavation-markup
automaticBars = ##t
explicitClefVisibility = #all-visible
\consists "Separating_line_group_engraver"
\consists "Hara_kiri_engraver"
- \override VerticalAxisGroup #'remove-empty = ##t
- \override VerticalAxisGroup #'remove-first = ##t
- \override VerticalAxisGroup #'staff-affinity = #UP
- \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing #'padding = #0.5
- \override VerticalAxisGroup #'nonstaff-nonstaff-spacing #'padding = #0.5
+ \override VerticalAxisGroup.remove-empty = ##t
+ \override VerticalAxisGroup.remove-first = ##t
+ \override VerticalAxisGroup.staff-affinity = #UP
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #0.5
+ \override VerticalAxisGroup.nonstaff-nonstaff-spacing.padding = #0.5
}
\context {
%% TabStaff increase the staff-space, which in turn
%% increases beam thickness and spacing; beams are
%% too big. We have to adjust the beam settings:
- \override Beam #'beam-thickness = #0.32
- \override Beam #'length-fraction = #0.62
+ \override Beam.beam-thickness = #0.32
+ \override Beam.length-fraction = #0.62
%% the same goes for tremolo beams
- \override StemTremolo #'beam-thickness = #0.32
+ \override StemTremolo.beam-thickness = #0.32
%% NOTE: in lily/stem-tremolo.cc, we have length-fraction = 1,
%% and the tablature staff space is scaled (1.5 by default),
%% so we use the inversion of the scale factor:
- \override StemTremolo #'length-fraction = #(lambda (grob)
+ \override StemTremolo.length-fraction = #(lambda (grob)
(/ 1 (ly:staff-symbol-staff-space grob)))
- \override StemTremolo #'beam-width = #stem-tremolo::calc-tab-width
+ \override StemTremolo.beam-width = #stem-tremolo::calc-tab-width
%% No accidental in tablature !
\remove "Accidental_engraver"
%% make the Stems as short as possible to minimize their influence
%% on the slur::calc-control-points routine
- \override Stem #'no-stem-extend = ##t
- \override Flag #'style = #'no-flag
- \override Stem #'details = #'((lengths 0 0 0 0 0 0)
+ \override Stem.no-stem-extend = ##t
+ \override Flag.style = #'no-flag
+ \override Stem.details = #'((lengths 0 0 0 0 0 0)
(beamed-lengths 0 0 0)
(beamed-minimum-free-lengths 0 0 0)
(beamed-extreme-minimum-free-lengths 0 0)
(stem-shorten 0 0))
%% after all, the stubs of the stems may still be visible, so ...
- \override Stem #'stencil = ##f
- \override Flag #'stencil = ##f
+ \override Stem.stencil = ##f
+ \override Flag.stencil = ##f
%% automatic beams should be suppressed for similar reasons ...
autoBeaming = ##f
%% remove beams, dots and rests ...
- \override Beam #'stencil = ##f
- \override StemTremolo #'stencil = ##f
- \override Dots #'stencil = ##f
- \override Rest #'stencil = ##f
- \override MultiMeasureRest #'stencil = ##f
- \override MultiMeasureRestNumber #'stencil = ##f
- \override MultiMeasureRestText #'stencil = ##f
+ \override Beam.stencil = ##f
+ \override StemTremolo.stencil = ##f
+ \override Dots.stencil = ##f
+ \override Rest.stencil = ##f
+ \override MultiMeasureRest.stencil = ##f
+ \override MultiMeasureRestNumber.stencil = ##f
+ \override MultiMeasureRestText.stencil = ##f
%% ... all kinds of ties/slurs
- \override Tie #'stencil = ##f
- \override RepeatTie #'stencil = ##f
- \override LaissezVibrerTie #'stencil = ##f
- \override Slur #'stencil = #slur::draw-tab-slur
- \override PhrasingSlur #'stencil = ##f
+ \override Tie.stencil = ##f
+ \override RepeatTie.stencil = ##f
+ \override LaissezVibrerTie.stencil = ##f
+ \override Slur.stencil = #slur::draw-tab-slur
+ \override PhrasingSlur.stencil = ##f
%% 'tied to' fret numbers become invisible or parenthesized, respectively)
- \override Tie #'after-line-breaking = #tie::handle-tab-note-head
- \override RepeatTie #'after-line-breaking = #repeat-tie::handle-tab-note-head
+ \override Tie.after-line-breaking = #tie::handle-tab-note-head
+ \override RepeatTie.after-line-breaking = #repeat-tie::handle-tab-note-head
%% ... and all kinds of markups, spanners etc.
- \override TupletBracket #'stencil = ##f
- \override TupletNumber #'stencil = ##f
- \override DynamicText #'stencil = ##f
- \override DynamicTextSpanner #'stencil = ##f
- \override TextSpanner #'stencil = ##f
- \override Hairpin #'stencil = ##f
- \override Script #'stencil = ##f
- \override TextScript #'stencil = ##f
- \override Glissando #'stencil = #glissando::draw-tab-glissando
+ \override TupletBracket.stencil = ##f
+ \override TupletNumber.stencil = ##f
+ \override DynamicText.stencil = ##f
+ \override DynamicTextSpanner.stencil = ##f
+ \override TextSpanner.stencil = ##f
+ \override Hairpin.stencil = ##f
+ \override Script.stencil = ##f
+ \override TextScript.stencil = ##f
+ \override Glissando.stencil = #glissando::draw-tab-glissando
%% the direction for glissando lines will be automatically corrected
- \override Glissando #'extra-dy = #glissando::calc-tab-extra-dy
- \override Glissando #'bound-details #'right = #`((attach-dir . ,LEFT)
+ \override Glissando.extra-dy = #glissando::calc-tab-extra-dy
+ \override Glissando.bound-details.right = #`((attach-dir . ,LEFT)
(padding . 0.3))
- \override Glissando #'bound-details #'left = #`((attach-dir . ,RIGHT)
+ \override Glissando.bound-details.left = #`((attach-dir . ,RIGHT)
(padding . 0.3))
%% dead notes
- \override TabNoteHead #'glyph-name = #tab-note-head::calc-glyph-name
- \override TabNoteHead #'stencil = #tab-note-head::whiteout-if-style-set
+ \override TabNoteHead.glyph-name = #tab-note-head::calc-glyph-name
+ \override TabNoteHead.stencil = #tab-note-head::whiteout-if-style-set
}
\context {
\defaultchild "TabVoice"
%% 6 strings, bigger spacing
- \override StaffSymbol #'staff-space = #1.5
+ \override StaffSymbol.staff-space = #1.5
%% Don't draw stems over the tablature figures !
- \override Stem #'avoid-note-head = ##t
+ \override Stem.avoid-note-head = ##t
%% No accidental in tablature !
\remove "Accidental_engraver"
\remove "Ottava_spanner_engraver"
%% the clef handler
- \override Clef #'stencil = #clef::print-modern-tab-if-set
+ \override Clef.stencil = #clef::print-modern-tab-if-set
%% no time signature
- \override TimeSignature #'stencil = ##f
+ \override TimeSignature.stencil = ##f
%% no arpeggios
- \override Arpeggio #'stencil = ##f
+ \override Arpeggio.stencil = ##f
%% we ignore collision warnings that may occur due to
%% stem overlapping, because we have no stems ;-)
- \override NoteColumn #'ignore-collision = ##t
+ \override NoteColumn.ignore-collision = ##t
%% Special "TAB" clef
clefGlyph = #"clefs.tab"
clefPosition = #0
\consists "Episema_engraver"
%% Set default head for notes outside of \[ \].
- \override NoteHead #'style = #'vaticana.punctum
+ \override NoteHead.style = #'vaticana.punctum
%% Put some space before and after divisiones.
%% FIXME: This does not seem to show any effect.
- \override Script #'padding = #0.5
+ \override Script.padding = #0.5
%% There are no beams in Gregorian Chant notation.
autoBeaming = ##f
%% We can not remove Bar_engraver; otherwise clefs and custodes will
%% not show up any more among other line breaking issues.
%% Instead, we make the grob transparent.
- \override BarLine #'transparent = ##t
+ \override BarLine.transparent = ##t
- \override StaffSymbol #'line-count = #4
- \override StaffSymbol #'thickness = #0.6
+ \override StaffSymbol.line-count = #4
+ \override StaffSymbol.thickness = #0.6
%% FIXME: unit on StaffSymbol's width should be \linewidth.
- %% \override StaffSymbol #'width = #60.0
+ %% \override StaffSymbol.width = #60.0
%% Choose vaticana do clef on 3rd line as default.
clefGlyph = #"clefs.vaticana.do"
clefOctavation = #0
%% Select vaticana style font.
- \override KeySignature #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
- \override Accidental #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
- \override Custos #'style = #'vaticana
- \override Custos #'neutral-position = #3
- \override Custos #'neutral-direction = #DOWN
- \override Dots #'style = #'vaticana
+ \override KeySignature.glyph-name-alist = #alteration-vaticana-glyph-name-alist
+ \override Accidental.glyph-name-alist = #alteration-vaticana-glyph-name-alist
+ \override Custos.style = #'vaticana
+ \override Custos.neutral-position = #3
+ \override Custos.neutral-direction = #DOWN
+ \override Dots.style = #'vaticana
}
\context {
%% other ligature engraver would cause a "Junking event: `LigatureEvent'"
%% warning for every "\[" and "\]". Therefore, we make the grob
%% transparent instead.
- \override LigatureBracket #'transparent = ##t
+ \override LigatureBracket.transparent = ##t
%% Put some space before and after divisiones.
%% FIXME: This does not seem to show any effect.
- \override Script #'padding = #0.5
+ \override Script.padding = #0.5
%% There are no beams in Gregorian Chant notation.
autoBeaming = ##f
%% We can not remove Bar_engraver; otherwise clefs and custodes will
%% not show up any more among other line breaking issues.
%% Instead, we make the grob transparent.
- \override BarLine #'transparent = ##t
+ \override BarLine.transparent = ##t
}
\context {
\consists "Mensural_ligature_engraver"
%% Set default head for notes outside of \[ \].
- \override NoteHead #'style = #'mensural
- \override Rest #'style = #'mensural
- \override Flag #'style = #'mensural
+ \override NoteHead.style = #'mensural
+ \override Rest.style = #'mensural
+ \override Flag.style = #'mensural
%% There are no beams in mensural notation.
autoBeaming = ##f
%% We can not remove Bar_engraver; otherwise clefs and custodes will
%% not show up any more among other line breaking issues.
%% Instead, we make the grob transparent.
- \override BarLine #'transparent = ##t
+ \override BarLine.transparent = ##t
- \override StaffSymbol #'thickness = #0.6
+ \override StaffSymbol.thickness = #0.6
%% FIXME: unit on StaffSymbol's width should be \linewidth.
- %% \override StaffSymbol #'width = #60.0
+ %% \override StaffSymbol.width = #60.0
%% Choose mensural g clef on 2nd line as default.
clefGlyph = #"clefs.mensural.g"
clefOctavation = #0
%% Select mensural style font.
- \override TimeSignature #'style = #'mensural
- \override KeySignature #'glyph-name-alist = #alteration-mensural-glyph-name-alist
- \override Accidental #'glyph-name-alist = #alteration-mensural-glyph-name-alist
- \override Custos #'style = #'mensural
- \override Custos #'neutral-position = #3
- \override Custos #'neutral-direction = #DOWN
+ \override TimeSignature.style = #'mensural
+ \override KeySignature.glyph-name-alist = #alteration-mensural-glyph-name-alist
+ \override Accidental.glyph-name-alist = #alteration-mensural-glyph-name-alist
+ \override Custos.style = #'mensural
+ \override Custos.neutral-position = #3
+ \override Custos.neutral-direction = #DOWN
%% Accidentals are valid only once (same as
- %% \accidentalStyle "forget")
+ %% \accidentalStyle forget)
extraNatural = ##f
autoAccidentals = #`(Staff ,(make-accidental-rule 'same-octave -1))
autoCautionaries = #'()
\consists "Mensural_ligature_engraver"
%% Set glyph styles.
- \override NoteHead #'style = #'petrucci
- \override Rest #'style = #'mensural
+ \override NoteHead.style = #'petrucci
+ \override Rest.style = #'mensural
% Thickens and shortens stems.
- \override Stem #'thickness = #1.7
- \override Stem #'length = #5
+ \override Stem.thickness = #1.7
+ \override Stem.length = #5
%% There are no beams in Petrucci notation.
autoBeaming = ##f
\consists "Custos_engraver"
- \override StaffSymbol #'thickness = #1.3
+ \override StaffSymbol.thickness = #1.3
%% Choose Petrucci g clef on 2nd line as default.
clefGlyph = #"clefs.petrucci.g"
clefPosition = #-2
clefOctavation = #0
- \override Custos #'style = #'mensural
- \override Custos #'neutral-position = #3
- \override Custos #'neutral-direction = #DOWN
+ \override Custos.style = #'mensural
+ \override Custos.neutral-position = #3
+ \override Custos.neutral-direction = #DOWN
%% Accidentals are valid only once (if the following note is different)
extraNatural = ##f
accommodated for typesetting a piece in Kievan style."
%% Set glyph styles.
- \override NoteHead #'style = #'kievan
- \override Rest #'style = #'mensural
- \override Accidental #'glyph-name-alist = #alteration-kievan-glyph-name-alist
- \override Dots #'style = #'kievan
- \override Slur #'stencil = ##f
+ \override NoteHead.style = #'kievan
+ \override Stem.X-offset = #stem::kievan-offset-callback
+ \override Stem.stencil = ##f
+ \override Flag.stencil = ##f
+ \override Rest.style = #'mensural
+ \override Accidental.glyph-name-alist = #alteration-kievan-glyph-name-alist
+ \override Dots.style = #'kievan
+ \override Slur.stencil = ##f
+ \override Stem.length = #0.0
+ \override Beam.positions = #beam::get-kievan-positions
+ \override Beam.quantized-positions = #beam::get-kievan-quantized-positions
+ \override NoteHead.duration-log = #note-head::calc-kievan-duration-log
%% There are beams in Kievan notation, but they are invoked manually
autoBeaming = ##f
-\version "2.16.0"
+\version "2.17.6"
startGraceSlur = #(make-music 'SlurEvent 'span-direction START 'spanner-id "grace")
stopGraceSlur = #(make-music 'SlurEvent 'span-direction STOP 'spanner-id "grace")
startAcciaccaturaMusic = {
<>\startGraceSlur
- \override Flag #'stroke-style = #"grace"
+ \temporary \override Flag.stroke-style = #"grace"
}
stopAcciaccaturaMusic = {
- \revert Flag #'stroke-style
+ \revert Flag.stroke-style
<>\stopGraceSlur
}
startSlashedGraceMusic = {
- \override Flag #'stroke-style = #"grace"
+ \temporary \override Flag.stroke-style = #"grace"
}
stopSlashedGraceMusic = {
- \revert Flag #'stroke-style
+ \revert Flag.stroke-style
}
$Id$
%}
-\version "2.16.0"
+\version "2.17.6"
%
% Declare memorable shortcuts for special unicode characters
% Declare head prefix shortcuts.
%
virga =
- \once \override NoteHead #'virga = ##t
+ \once \override NoteHead.virga = ##t
stropha =
- \once \override NoteHead #'stropha = ##t
+ \once \override NoteHead.stropha = ##t
inclinatum =
- \once \override NoteHead #'inclinatum = ##t
+ \once \override NoteHead.inclinatum = ##t
auctum =
- \once \override NoteHead #'auctum = ##t
+ \once \override NoteHead.auctum = ##t
descendens =
- \once \override NoteHead #'descendens = ##t
+ \once \override NoteHead.descendens = ##t
ascendens =
- \once \override NoteHead #'ascendens = ##t
+ \once \override NoteHead.ascendens = ##t
pes =
- \once \override NoteHead #'pes-or-flexa = ##t
+ \once \override NoteHead.pes-or-flexa = ##t
flexa =
- \once \override NoteHead #'pes-or-flexa = ##t
+ \once \override NoteHead.pes-or-flexa = ##t
oriscus =
- \once \override NoteHead #'oriscus = ##t
+ \once \override NoteHead.oriscus = ##t
quilisma =
- \once \override NoteHead #'quilisma = ##t
+ \once \override NoteHead.quilisma = ##t
deminutum =
- \once \override NoteHead #'deminutum = ##t
+ \once \override NoteHead.deminutum = ##t
linea =
- \once \override NoteHead #'linea = ##t
+ \once \override NoteHead.linea = ##t
cavum =
- \once \override NoteHead #'cavum = ##t
+ \once \override NoteHead.cavum = ##t
%
% Declare divisiones shortcuts.
%
virgula = {
- \once \override BreathingSign #'text = #(make-musicglyph-markup "scripts.rcomma")
- \once \override BreathingSign #'font-size = #-2
+ \once \override BreathingSign.text = #(make-musicglyph-markup "scripts.rcomma")
+ \once \override BreathingSign.font-size = #-2
% Workaround: add padding. Correct fix would be spacing engine handle this.
- \once \override BreathingSign #'extra-X-extent = #'(-1.0 . 0)
+ \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
+ \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
\breathe
}
caesura = {
- \once \override BreathingSign #'text = #(make-musicglyph-markup "scripts.rvarcomma")
- \once \override BreathingSign #'font-size = #-2
+ \once \override BreathingSign.text = #(make-musicglyph-markup "scripts.rvarcomma")
+ \once \override BreathingSign.font-size = #-2
% Workaround: add padding. Correct fix would be spacing engine handle this.
- \once \override BreathingSign #'extra-X-extent = #'(-1.0 . 0)
+ \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
+ \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
\breathe
}
divisioMinima = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-minima
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima
% Workaround: add padding. Correct fix would be spacing engine handle this.
- \once \override BreathingSign #'extra-X-extent = #'(-1.0 . 0)
+ \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
+ \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
\breathe
}
divisioMaior = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maior
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maior
+ \once \override BreathingSign.Y-offset = #0
% Workaround: add padding. Correct fix would be spacing engine handle this.
- \once \override BreathingSign #'extra-X-extent = #'(-1.0 . 0)
+ \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
+ \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
\breathe
}
divisioMaxima = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maxima
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maxima
+ \once \override BreathingSign.Y-offset = #0
% Workaround: add padding. Correct fix would be spacing engine handle this.
- \once \override BreathingSign #'extra-X-extent = #'(-1.0 . 0)
+ \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
+ \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
\breathe
}
finalis = {
- \once \override BreathingSign #'stencil = #ly:breathing-sign::finalis
- \once \override BreathingSign #'Y-offset = #0
+ \once \override BreathingSign.stencil = #ly:breathing-sign::finalis
+ \once \override BreathingSign.Y-offset = #0
% Workaround: add padding. Correct fix would be spacing engine handle this.
- \once \override BreathingSign #'extra-X-extent = #'(-1.0 . 0)
- \once \override BreathingSign #'extra-spacing-height = #'(-0.5 . 0.5)
+ \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
+ \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
\breathe
}
\context {
\VaticanaStaff
- \override StaffSymbol #'color = #red
- \override LedgerLineSpanner #'color = #red
+ \override StaffSymbol.color = #red
+ \override LedgerLineSpanner.color = #red
}
\context {
\Score
%%%
barAlways = ##f
- \override SpacingSpanner #'packed-spacing = ##t
+ \override SpacingSpanner.packed-spacing = ##t
%%%
%%% TODO: Play around with the following SpacingSpanner
%%% causes tons of "programming error: adding reverse spring,
%%% setting to unit" messages.
%%%
- %\override SpacingSpanner #'base-shortest-duration = #(ly:make-moment 1 4)
- %\override SpacingSpanner #'shortest-duration-space = #0
- %\override SpacingSpanner #'average-spacing-wishes = ##f
- %\override SpacingSpanner #'spacing-increment = #0.0
- %\override SpacingSpanner #'uniform-stretching = ##t
+ %\override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 4)
+ %\override SpacingSpanner.shortest-duration-space = #0
+ %\override SpacingSpanner.average-spacing-wishes = ##f
+ %\override SpacingSpanner.spacing-increment = #0.0
+ %\override SpacingSpanner.uniform-stretching = ##t
}
}
\Staff
\remove "Clef_engraver"
\remove "Key_engraver"
- \override StaffSymbol #'transparent = ##t
+ \override StaffSymbol.transparent = ##t
\remove "Time_signature_engraver"
\remove "Bar_engraver"
- \override VerticalAxisGroup #'staff-staff-spacing = #'()
+ \override VerticalAxisGroup.staff-staff-spacing = #'()
}
\context {
\Voice
\remove "Ligature_bracket_engraver"
\consists "Vaticana_ligature_engraver"
- \override NoteHead #'style = #'vaticana.punctum
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
+ \override NoteHead.style = #'vaticana.punctum
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
}
}
\version "2.16.0"
-#(if (not (ly:undead? lilypond-declarations))
- (ly:parser-include-string parser
- "\\include \"declarations-init.ly\""))
+#(session-initialize
+ (lambda ()
+ ;; we can't use ly:parser-include-string here since that does not
+ ;; actually do any parsing but merely switches inputs, so the
+ ;; session saved by the session initializer after calling this
+ ;; 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)
+ "\\include \"declarations-init.ly\"")))
-%% We need to save the variables of the current module along with
-%% their values: functions defined in the module might refer to the
-%% variables
-
-#(if lilypond-declarations
- (if (ly:undead? lilypond-declarations)
- (begin
- (for-each
- (lambda (p)
- (let ((var (cadr p))
- (val (cddr p)))
- (variable-set! var
- (if (ly:output-def? val)
- (ly:output-def-clone val)
- val))
- (module-add! (current-module) (car p) var)))
- (ly:get-undead lilypond-declarations))
- (note-names-language parser default-language))
- (let ((decl '()))
- (module-for-each
- (lambda (s v)
- (let ((val (variable-ref v)))
- (if (not (ly:lily-parser? val))
- (set! decl
- (cons
- (cons*
- s v
- (if (ly:output-def? val)
- (ly:output-def-clone val)
- val))
- decl)))))
- (current-module))
- (set! lilypond-declarations (ly:make-undead decl)))))
+#(note-names-language parser default-language)
#(ly:set-option 'old-relative #f)
#(define toplevel-scores (list))
-\version "2.16.0"
+\version "2.17.6"
%{
\layout {
\context {
\Score
- \override KeySignature #'glyph-name-alist = \makamGlyphs
- \override Accidental #'glyph-name-alist = \makamGlyphs
- \override AccidentalCautionary #'glyph-name-alist = \makamGlyphs
- \override TrillPitchAccidental #'glyph-name-alist = \makamGlyphs
- \override AmbitusAccidental #'glyph-name-alist = \makamGlyphs
+ \override KeySignature.glyph-name-alist = \makamGlyphs
+ \override Accidental.glyph-name-alist = \makamGlyphs
+ \override AccidentalCautionary.glyph-name-alist = \makamGlyphs
+ \override TrillPitchAccidental.glyph-name-alist = \makamGlyphs
+ \override AmbitusAccidental.glyph-name-alist = \makamGlyphs
}
}
%%%% 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.17.6"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'break-permission 'allow))))
alterBroken =
-#(define-music-function (parser location name property arg)
- (string? scheme? list?)
- (_i "Override @var{property} for pieces of broken spanner @var{name} with
-values @var{arg}.")
- (let* ((name (string-delete name char-set:blank)) ; remove any spaces
- (name-components (string-split name #\.))
- (context-name "Bottom")
- (grob-name #f))
-
- (if (> 2 (length name-components))
- (set! grob-name (car name-components))
- (begin
- (set! grob-name (cadr name-components))
- (set! context-name (car name-components))))
-
- ;; only apply override if grob is a spanner
- (let ((description
- (assoc-get (string->symbol grob-name) all-grob-descriptions)))
- (if (and description
- (member 'spanner-interface
- (assoc-get 'interfaces
- (assoc-get 'meta description))))
- #{
- \override $context-name . $grob-name $property =
- #(value-for-spanner-piece arg)
- #}
+#(define-music-function (parser location 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
+a starting spanner event, or a symbol list in the form
+@samp{Context.Grob} or just @samp{Grob}. Iff @var{item} is in the
+form of a spanner event, @var{property} may also have the form
+@samp{Grob.property} for specifying a directed tweak.")
+ (if (ly:music? item)
+ (if (eq? (ly:music-property item 'span-direction) START)
+ #{ \tweak #property #(value-for-spanner-piece arg) #item #}
(begin
- (ly:input-warning location (_ "not a spanner name, `~a'") grob-name)
- (make-music 'SequentialMusic 'void #t))))))
+ (ly:music-warning item (_ "not a spanner"))
+ item))
+ (let* ((p (check-grob-path item parser location
+ #:default 'Bottom
+ #:min 2
+ #:max 2))
+ (name (and p (second p)))
+ (description
+ (and name (assoc-get name all-grob-descriptions))))
+ (if (and description
+ (member 'spanner-interface
+ (assoc-get 'interfaces
+ (assoc-get 'meta description))))
+ #{
+ \override #item . #property =
+ #(value-for-spanner-piece arg)
+ #}
+ (begin
+ (ly:input-warning location (_ "not a spanner name, `~a'") name)
+ (make-music 'Music))))))
appendToTag =
#(define-music-function (parser location tag more music)
(timesig (cons (ly:moment-main-numerator mlen)
(ly:moment-main-denominator mlen))))
#{
- \once \override Staff.TimeSignature #'stencil = #(lambda (grob)
+ \once \override Staff.TimeSignature.stencil = #(lambda (grob)
(grob-interpret-markup grob (format-compound-time args)))
- \set Timing.timeSignatureFraction = $timesig
- \set Timing.baseMoment = $beat
- \set Timing.beatStructure = $beatGrouping
+ \set Timing.timeSignatureFraction = #timesig
+ \set Timing.baseMoment = #beat
+ \set Timing.beatStructure = #beatGrouping
\set Timing.beamExceptions = #'()
- \set Timing.measureLength = $mlen
+ \set Timing.measureLength = #mlen
#} ))
crossStaff =
#(define-music-function (parser location notes) (ly:music?)
(_i "Create cross-staff stems")
#{
- \override Stem #'cross-staff = #cross-staff-connect
- \override Flag #'style = #'no-flag
- $notes
- \revert Stem #'cross-staff
- \revert Flag #'style
+ \temporary \override Stem.cross-staff = #cross-staff-connect
+ \temporary \override Flag.style = #'no-flag
+ #notes
+ \revert Stem.cross-staff
+ \revert Flag.style
#})
cueClef =
argument))
footnote =
-#(define-music-function (parser location mark offset grob-name footnote music)
- ((markup?) number-pair? (symbol?) markup? (ly:music?))
- (_i "Make the markup @var{footnote} a footnote on @var{music}. The
+#(define-music-function (parser location 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
respect to the marked music.
If @var{mark} is not given or specified as @var{\\default}, it is
-replaced by an automatically generated sequence number. If a symbol
-@var{grob-name} is specified, then grobs of that type will be marked
-if they have @var{music} as their ultimate cause; by default all grobs
-having @var{music} as their @emph{direct} cause will be marked,
-similar to the way @code{\\tweak} works.
-
-If @var{music} is given as @code{\\default}, a footnote event
-affecting @emph{all} grobs matching @var{grob-name} at a given time
-step is generated. This may be required for creating footnotes on
-time signatures, clefs, and other items not cooperating with
-@code{\\tweak}.
+replaced by an automatically generated sequence number. If @var{item}
+is a symbol list of form @samp{Grob} or @samp{Context.Grob}, then
+grobs of that type will be marked at the current time step in the
+given context (default @code{Bottom}).
+
+If @var{item} is music, the music will get a footnote attached to a
+grob immediately attached to the event, like @var{\\tweak} does. For
+attaching a footnote to an @emph{indirectly} caused grob, write
+@code{\\single\\footnote}, use @var{item} to specify the grob, and
+follow it with the music to annotate.
Like with @code{\\tweak}, if you use a footnote on a following
post-event, the @code{\\footnote} command itself needs to be attached
'Y-offset (cdr offset)
'automatically-numbered (not mark)
'text (or mark (make-null-markup))
- 'footnote-text footnote
- 'symbol (or grob-name '()))))
- (cond (music
- (set! (ly:music-property music 'tweaks)
- (acons (if grob-name
- (cons grob-name 'footnote-music)
- 'footnote-music)
- mus
- (ly:music-property music 'tweaks)))
- music)
- (grob-name mus)
- (else
- (ly:input-warning location
- (_ "\\footnote requires music or grob-name"))
- (make-music 'Music)))))
+ 'footnote-text footnote)))
+ #{ \tweak footnote-music #mus #item #}))
grace =
#(def-grace-function startGraceMusic stopGraceMusic
harmonics played on a fretted instrument by touching the strings at @var{fret}.")
#{
\set harmonicDots = ##t
- \override TabNoteHead #'stencil = #(tab-note-head::print-custom-fret-label (number->string fret))
- \override NoteHead #'Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height
+ \temporary \override TabNoteHead.stencil = #(tab-note-head::print-custom-fret-label (number->string fret))
+ \temporary \override NoteHead.Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height
(lambda (grob start end)
(ly:grob::stencil-height grob)))
- \override NoteHead #'stencil = #(lambda (grob) (ly:grob-set-property! grob 'style 'harmonic-mixed)
+ \temporary \override NoteHead.stencil = #(lambda (grob) (ly:grob-set-property! grob 'style 'harmonic-mixed)
(ly:note-head::print grob))
- $(make-harmonic
+ #(make-harmonic
(calc-harmonic-pitch (fret->pitch (number->string fret)) music))
\unset harmonicDots
- \revert TabNoteHead #'stencil
- \revert NoteHead #'Y-extent
- \revert NoteHead #'stencil
+ \revert TabNoteHead.stencil
+ \revert NoteHead.Y-extent
+ \revert NoteHead.stencil
#})
harmonicByRatio = #(define-music-function (parser location ratio music) (number? ly:music?)
given through @var{ratio}.")
#{
\set harmonicDots = ##t
- \override TabNoteHead #'stencil = #(tab-note-head::print-custom-fret-label (ratio->fret ratio))
- \override NoteHead #'Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height
+ \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)))
- \override NoteHead #'stencil = #(lambda (grob) (ly:grob-set-property! grob 'style 'harmonic-mixed)
+ \temporary \override NoteHead.stencil = #(lambda (grob) (ly:grob-set-property! grob 'style 'harmonic-mixed)
(ly:note-head::print grob))
- $(make-harmonic
+ #(make-harmonic
(calc-harmonic-pitch (ratio->pitch ratio) music))
\unset harmonicDots
- \revert TabNoteHead #'stencil
- \revert NoteHead #'Y-extent
- \revert NoteHead #'stencil
+ \revert TabNoteHead.stencil
+ \revert NoteHead.Y-extent
+ \revert NoteHead.stencil
#})
+hide =
+#(define-music-function (parser location item) (symbol-list-or-music?)
+ (_i "Set @var{item}'s @samp{transparent} property to @code{#t},
+making it invisible while still retaining its dimensions.
+
+If @var{item} is a symbol list of form @code{GrobName} or
+@code{Context.GrobName}, the result is an override for the grob name
+specified by it. If @var{item} is a music expression, the result is
+the same music expression with an appropriate tweak applied to it.")
+ (if (ly:music? item)
+ #{ \tweak transparent ##t #item #}
+ #{ \override #item . transparent = ##t #}))
+
inStaffSegno =
#(define-music-function (parser location) ()
(_i "Put the segno variant 'varsegno' at this position into the staff,
keepWithTag =
-#(define-music-function (parser location tag music) (symbol? ly:music?)
- (_i "Include only elements of @var{music} that are tagged with @var{tag}.")
+#(define-music-function (parser location tag music)
+ (symbol-list-or-symbol? ly:music?)
+ (_i "Include only elements of @var{music} that are either untagged
+or tagged with one of the tags in @var{tag}. @var{tag} may be either
+a single symbol or a list of symbols.")
(music-filter
- (lambda (m)
- (let* ((tags (ly:music-property m 'tags))
- (res (memq tag tags)))
- (or
- (eq? tags '())
- res)))
+ (if (symbol? tag)
+ (lambda (m)
+ (let ((music-tags (ly:music-property m 'tags)))
+ (or (null? music-tags)
+ (memq tag music-tags))))
+ (lambda (m)
+ (let ((music-tags (ly:music-property m 'tags)))
+ (or (null? music-tags)
+ (any (lambda (t) (memq t music-tags)) tag)))))
music))
key =
(make-music 'RelativeOctaveCheck
'pitch pitch))
+omit =
+#(define-music-function (parser location item) (symbol-list-or-music?)
+ (_i "Set @var{item}'s @samp{stencil} property to @code{#f},
+effectively omitting it without taking up space.
+
+If @var{item} is a symbol list of form @code{GrobName} or
+@code{Context.GrobName}, the result is an override for the grob name
+specified by it. If @var{item} is a music expression, the result is
+the same music expression with an appropriate tweak applied to it.")
+ (if (ly:music? item)
+ #{ \tweak stencil ##f #item #}
+ #{ \override #item . stencil = ##f #}))
+
once =
#(define-music-function (parser location music) (ly:music?)
(_i "Set @code{once} to @code{#t} on all layout instruction events in @var{music}.")
(override-time-signature-setting time-signature setting)))
overrideProperty =
-#(define-music-function (parser location name property value)
- (string? symbol? scheme?)
+#(define-music-function (parser location grob-property-path value)
+ (symbol-list? scheme?)
- (_i "Set @var{property} to @var{value} in all grobs named @var{name}.
-The @var{name} argument is a string of the form @code{\"Context.GrobName\"}
-or @code{\"GrobName\"}.")
+ (_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
+ #:default 'Bottom
+ #:min 3)))
+ (if p
+ (make-music 'ApplyOutputEvent
+ 'context-type (first p)
+ 'procedure
+ (lambda (grob orig-context context)
+ (if (equal?
+ (cdr (assoc 'name (ly:grob-property grob 'meta)))
+ (second p))
+ (ly:grob-set-nested-property!
+ grob (cddr p) value))))
+ (make-music 'Music))))
- (let ((name-components (string-split name #\.))
- (context-name 'Bottom)
- (grob-name #f))
- (if (> 2 (length name-components))
- (set! grob-name (string->symbol (car name-components)))
- (begin
- (set! grob-name (string->symbol (list-ref name-components 1)))
- (set! context-name (string->symbol (list-ref name-components 0)))))
- (make-music 'ApplyOutputEvent
- 'context-type context-name
- 'procedure
- (lambda (grob orig-context context)
- (if (equal?
- (cdr (assoc 'name (ly:grob-property grob 'meta)))
- grob-name)
- (set! (ly:grob-property grob property) value))))))
'element music))
removeWithTag =
-#(define-music-function (parser location tag music) (symbol? ly:music?)
- (_i "Remove elements of @var{music} that are tagged with @var{tag}.")
+#(define-music-function (parser location tag music)
+ (symbol-list-or-symbol? ly:music?)
+ (_i "Remove elements of @var{music} that are tagged with one of the
+tags in @var{tag}. @var{tag} may be either a single symbol or a list
+of symbols.")
(music-filter
- (lambda (m)
- (let* ((tags (ly:music-property m 'tags))
- (res (memq tag tags)))
- (not res)))
+ (if (symbol? tag)
+ (lambda (m)
+ (not (memq tag (ly:music-property m 'tags))))
+ (lambda (m)
+ (let ((music-tags (ly:music-property m 'tags)))
+ (or (null? music-tags)
+ (not (any (lambda (t) (memq t music-tags)) tag))))))
music))
resetRelativeOctave =
mods))
shape =
-#(define-music-function (parser location grob offsets)
- (string? list?)
- (_i "Offset control-points of @var{grob} by @var{offsets}. The argument
-is a list of number pairs or list of such lists. Each element of a pair
-represents an offset to one of the coordinates of a control-point.")
- (define ((shape-curve offsets) grob)
+#(define-music-function (parser location 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
+element of a pair represents an offset to one of the coordinates of a
+control-point. If @var{item} is a string, the result is
+@code{\\once\\override} for the specified grob type. If @var{item} is
+a music expression, the result is the same music expression with an
+appropriate tweak applied.")
+ (define (shape-curve grob)
(let* ((orig (ly:grob-original grob))
(siblings (if (ly:spanner? grob)
(ly:spanner-broken-into orig) '()))
(if (>= total-found 2)
(helper siblings offsets)
(offset-control-points (car offsets)))))
-
- #{
- \once \override $grob #'control-points = #(shape-curve offsets)
- #})
+ #{ \tweak control-points #shape-curve #item #})
shiftDurations =
#(define-music-function (parser location dur dots arg)
(lambda (x)
(shift-one-duration-log x dur dots)) arg))
+single =
+#(define-music-function (parser location 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}.")
+ (set! (ly:music-property music 'tweaks)
+ (fold-some-music
+ (lambda (m) (eq? (ly:music-property m 'name)
+ 'OverrideProperty))
+ (lambda (m tweaks)
+ (let ((p (cond
+ ((ly:music-property m 'grob-property #f) => list)
+ (else
+ (ly:music-property m 'grob-property-path)))))
+ (acons (cons (ly:music-property m 'symbol) ;grob name
+ (if (pair? (cdr p))
+ p ;grob property path
+ (car p))) ;grob property
+ (ly:music-property m 'grob-value)
+ tweaks)))
+ (ly:music-property music 'tweaks)
+ overrides))
+ music)
+
skip =
#(define-music-function (parser location dur) (ly:duration?)
(_i "Skip forward by @var{dur}.")
(_i "Set the system stretch, by reading the 'system-stretch property of
the `parameters' assoc list.")
#{
- \overrideProperty #"Score.NonMusicalPaperColumn"
- #'line-break-system-details
+ \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
#(list (cons 'alignment-extra-space (cdr (assoc 'system-stretch parameters)))
(cons 'system-Y-extent (cdr (assoc 'system-Y-extent parameters))))
#})
styledNoteHeads =
#(define-music-function (parser location style heads music)
- (symbol? list-or-symbol? ly: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 tag arg) (symbol? ly:music?)
-
- (_i "Add @var{tag} to the @code{tags} property of @var{arg}.")
+#(define-music-function (parser location tag music) (symbol-list-or-symbol? ly:music?)
+ (_i "Tag the following @var{music} with @var{tag} and return the
+result, by adding the single symbol or symbol list @var{tag} to the
+@code{tags} property of @var{music}.")
(set!
- (ly:music-property arg 'tags)
- (cons tag
- (ly:music-property arg 'tags)))
- arg)
+ (ly:music-property music 'tags)
+ ((if (symbol? tag) cons append)
+ tag
+ (ly:music-property music 'tags)))
+ music)
+
+temporary =
+#(define-music-function (parser location 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
+corresponding @code{\\revert} is executed. This is achieved by
+clearing the @samp{pop-first} property normally set on
+@code{\\override}s.
+
+An @code{\\override}/@/@code{\\revert} sequence created by using
+@code{\\temporary} and @code{\\undo} on the same music containing
+overrides will cancel out perfectly or cause a@tie{}warning.
+
+Non-property-related music is ignored, warnings are generated for any
+property-changing music that isn't an @code{\\override}.")
+ (define warned #f)
+ (for-some-music
+ (lambda (m)
+ (and (or (music-is-of-type? m 'layout-instruction-event)
+ (music-is-of-type? m 'context-specification)
+ (music-is-of-type? m 'apply-context)
+ (music-is-of-type? m 'time-signature-music))
+ (case (ly:music-property m 'name)
+ ((OverrideProperty)
+ (if (ly:music-property m 'pop-first #f)
+ (set! (ly:music-property m 'pop-first) '()))
+ (if (ly:music-property m 'once #f)
+ (set! (ly:music-property m 'once) '()))
+ #t)
+ ((ContextSpeccedMusic)
+ #f)
+ (else
+ (if (not warned)
+ (begin
+ (ly:input-warning location (_ "Cannot make ~a revertible")
+ (ly:music-property m 'name))
+ (set! warned #t)))
+ #t))))
+ music)
+ music)
time =
#(define-music-function (parser location beat-structure fraction)
'Staff))
tweak =
-#(define-music-function (parser location grob prop value music)
- ((string?) symbol? scheme? ly:music?)
- (_i "Add a tweak to the following @var{music}.
-Layout objects created by @var{music} get their property @var{prop}
-set to @var{value}. If @var{grob} is specified, like with
+#(define-music-function (parser location 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}
+set to @var{value}. If @var{prop} has the form @samp{Grob.property}, like with
@example
-\\tweak Accidental #'color #red cis'
+\\tweak Accidental.color #red cis'
@end example
an indirectly created grob (@samp{Accidental} is caused by
@samp{NoteHead}) can be tweaked; otherwise only directly created grobs
-are affected.")
- (if (not (object-property prop 'backend-type?))
- (begin
- (ly:input-warning location (_ "cannot find property type-check for ~a") prop)
- (ly:warning (_ "doing assignment anyway"))))
- (set!
- (ly:music-property music 'tweaks)
- (acons (if grob (cons (string->symbol grob) prop) prop)
- value
- (ly:music-property music 'tweaks)))
- music)
+are affected.
+
+As a special case, @var{item} may be a symbol list specifying a grob
+path, in which case @code{\\once\\override} is called on it instead of
+creating tweaked music. This is mainly useful when using
+@code{\\tweak} as as a component for building other functions.
+
+@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
+ #:start 1
+ #:default #t
+ #:min 2)))
+ (if p
+ (set! (ly:music-property item 'tweaks)
+ (acons (cond ((pair? (cddr p)) p)
+ ((symbol? (car p))
+ (cons (car p) (cadr p)))
+ (else (cadr p)))
+ value
+ (ly:music-property item 'tweaks))))
+ item)
+ ;; We could just throw this at \override and let it sort this
+ ;; out on its own, but this way we should get better error
+ ;; diagnostics.
+ (let ((a (check-grob-path item parser location
+ #:default 'Bottom #:min 2 #:max 2))
+ (b (check-grob-path prop parser location
+ #:start 2)))
+ (if (and a b)
+ #{ \once\override #(append a b) = #value #}
+ (make-music 'Music)))))
+
+undo =
+#(define-music-function (parser location music)
+ (ly:music?)
+ (_i "Convert @code{\\override} and @code{\\set} in @var{music} to
+@code{\\revert} and @code{\\unset}, respectively. Any reverts and
+unsets already in @var{music} cause a warning. Non-property-related music is ignored.")
+ (define warned #f)
+ (let loop
+ ((music music))
+ (let
+ ((lst
+ (fold-some-music
+ (lambda (m) (or (music-is-of-type? m 'layout-instruction-event)
+ (music-is-of-type? m 'context-specification)
+ (music-is-of-type? m 'apply-context)
+ (music-is-of-type? m 'time-signature-music)))
+ (lambda (m overrides)
+ (case (ly:music-property m 'name)
+ ((OverrideProperty)
+ (cons
+ (make-music 'RevertProperty
+ 'symbol (ly:music-property m 'symbol)
+ 'grob-property-path
+ (cond
+ ((ly:music-property m 'grob-property #f) => list)
+ (else
+ (ly:music-property m 'grob-property-path))))
+ overrides))
+ ((PropertySet)
+ (cons
+ (make-music 'PropertyUnset
+ 'symbol (ly:music-property m 'symbol))
+ overrides))
+ ((ContextSpeccedMusic)
+ (cons
+ (make-music 'ContextSpeccedMusic
+ 'element (loop (ly:music-property m 'element))
+ 'context-type (ly:music-property m 'context-type))
+ overrides))
+ (else
+ (if (not warned)
+ (begin
+ (ly:input-warning location (_ "Cannot revert ~a")
+ (ly:music-property m 'name))
+ (set! warned #t)))
+ overrides)))
+ '()
+ music)))
+ (cond
+ ((null? lst) (make-music 'Music))
+ ((null? (cdr lst)) (car lst))
+ (else (make-sequential-music lst))))))
unfoldRepeats =
#(define-music-function (parser location music) (ly:music?)
%%
%% Page breaking
%%
- blank-after-score-page-force = 2
- blank-last-page-force = 0
- blank-page-force = 5
+ blank-after-score-page-penalty = 2
+ blank-last-page-penalty = 0
+ blank-page-penalty = 5
page-breaking = #ly:optimal-breaking
% chord-shape-table
addChordShape =
-#(define-music-function (parser location key-symbol tuning shape-definition)
+#(define-void-function (parser location 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})}.")
(hash-set! chord-shape-table
(cons key-symbol tuning)
- shape-definition)
- (make-music 'SequentialMusic 'void #t))
+ shape-definition))
#(define (chord-shape shape-code tuning)
(get-chord-shape shape-code tuning chord-shape-table))
% fretboard-table
storePredefinedDiagram =
-#(define-music-function
+#(define-void-function
(parser location fretboard-table chord tuning diagram-definition)
(hash-table? ly:music? pair? string-or-pair?)
(_i "Add predefined fret diagram defined by @var{diagram-definition}
diagram-definition)))
(hash-set! fretboard-table
hash-key
- verbose-definition)
- (make-music 'SequentialMusic 'void #t)))
+ verbose-definition)))
% property-init.ly
-\version "2.16.0"
+\version "2.17.6"
%% for dashed slurs, phrasing slurs, and ties
#(define (make-simple-dash-definition dash-fraction dash-period)
(_i "Revert to the default note head style.")
(revert-head-style '(NoteHead TabNoteHead)))
-
accidentalStyle =
#(define-music-function
- (parser location context style) ((symbol?) string?)
- (_i "Set accidental style to @var{style}, a string. If an optional
-@var{context} symbol is given, e.g. @code{#'Staff} or @code{#'Voice},
-the settings are applied to that context. Otherwise, the context
-defaults to @samp{Staff}, except for piano styles, which use
-@samp{GrandStaff} as a context." )
- (if context
- (set-accidental-style (string->symbol style) context)
- (set-accidental-style (string->symbol style))))
+ (parser location 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
+context. Otherwise, the context defaults to @samp{Staff}, except for
+piano styles, which use @samp{GrandStaff} as a context." )
+ (case (length style)
+ ((1) (set-accidental-style (car style)))
+ ((2) (set-accidental-style (cadr style) (car style)))
+ (else
+ (ly:parser-error parser (_ "not an accidental style")
+ location)
+ (make-music 'Music))))
%% arpeggios
arpeggio = #(make-music 'ArpeggioEvent)
arpeggioArrowUp = {
- \revert Arpeggio #'stencil
- \revert Arpeggio #'X-extent
- \override Arpeggio #'arpeggio-direction = #UP
+ \revert Arpeggio.stencil
+ \revert Arpeggio.X-extent
+ \override Arpeggio.arpeggio-direction = #UP
}
arpeggioArrowDown = {
- \revert Arpeggio #'stencil
- \revert Arpeggio #'X-extent
- \override Arpeggio #'arpeggio-direction = #DOWN
+ \revert Arpeggio.stencil
+ \revert Arpeggio.X-extent
+ \override Arpeggio.arpeggio-direction = #DOWN
}
arpeggioNormal = {
- \revert Arpeggio #'stencil
- \revert Arpeggio #'X-extent
- \revert Arpeggio #'arpeggio-direction
- \revert Arpeggio #'dash-definition
+ \revert Arpeggio.stencil
+ \revert Arpeggio.X-extent
+ \revert Arpeggio.arpeggio-direction
+ \revert Arpeggio.dash-definition
}
arpeggioBracket = {
- \revert Arpeggio #'X-extent
- \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket
+ \revert Arpeggio.X-extent
+ \override Arpeggio.stencil = #ly:arpeggio::brew-chord-bracket
}
arpeggioParenthesis = {
- \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-slur
- \override Arpeggio #'X-extent = #ly:grob::stencil-width
- \revert Arpeggio #'dash-definition
+ \override Arpeggio.stencil = #ly:arpeggio::brew-chord-slur
+ \override Arpeggio.X-extent = #ly:grob::stencil-width
+ \revert Arpeggio.dash-definition
}
arpeggioParenthesisDashed = {
- \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-slur
- \override Arpeggio #'X-extent = #ly:grob::stencil-width
- \override Arpeggio #'dash-definition = #'((0 1 0.4 0.75))
+ \override Arpeggio.stencil = #ly:arpeggio::brew-chord-slur
+ \override Arpeggio.X-extent = #ly:grob::stencil-width
+ \override Arpeggio.dash-definition = #'((0 1 0.4 0.75))
}
%% balloon length
balloonLengthOn = {
- \override BalloonTextItem #'extra-spacing-width = #'(0 . 0)
- \override BalloonTextItem #'extra-spacing-height = #'(-inf.0 . +inf.0)
+ \override BalloonTextItem.extra-spacing-width = #'(0 . 0)
+ \override BalloonTextItem.extra-spacing-height = #'(-inf.0 . +inf.0)
}
balloonLengthOff = {
- \override BalloonTextItem #'extra-spacing-width = #'(+inf.0 . -inf.0)
- \override BalloonTextItem #'extra-spacing-height = #'(0 . 0)
+ \override BalloonTextItem.extra-spacing-width = #'(+inf.0 . -inf.0)
+ \override BalloonTextItem.extra-spacing-height = #'(0 . 0)
}
+%% bar lines
+
+defineBarLine =
+#(define-void-function
+ (parser location 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,
+ and the span bar, respectively." )
+ (if (not (= (length glyph-list) 3))
+ (ly:error (_ "Argument list for bar '~a' must have three components.") bar)
+ (define-bar-line bar
+ (car glyph-list)
+ (cadr glyph-list)
+ (caddr glyph-list))))
+
+
%% bass figures
bassFigureExtendersOn = {
\set Staff.useBassFigureExtenders = ##f
}
bassFigureStaffAlignmentDown =
- \override Staff.BassFigureAlignmentPositioning #'direction = #DOWN
+ \override Staff.BassFigureAlignmentPositioning.direction = #DOWN
bassFigureStaffAlignmentUp =
- \override Staff.BassFigureAlignmentPositioning #'direction = #UP
+ \override Staff.BassFigureAlignmentPositioning.direction = #UP
bassFigureStaffAlignmentNeutral =
- \revert Staff.BassFigureAlignmentPositioning #'direction
+ \revert Staff.BassFigureAlignmentPositioning.direction
%% cadenzas
%% dots
-dotsUp = \override Dots #'direction = #UP
-dotsDown = \override Dots #'direction = #DOWN
-dotsNeutral = \revert Dots #'direction
+dotsUp = \override Dots.direction = #UP
+dotsDown = \override Dots.direction = #DOWN
+dotsNeutral = \revert Dots.direction
%% dynamics
dynamicUp = {
- \override DynamicText #'direction = #UP
- \override DynamicLineSpanner #'direction = #UP
+ \override DynamicText.direction = #UP
+ \override DynamicLineSpanner.direction = #UP
}
dynamicDown = {
- \override DynamicText #'direction = #DOWN
- \override DynamicLineSpanner #'direction = #DOWN
+ \override DynamicText.direction = #DOWN
+ \override DynamicLineSpanner.direction = #DOWN
}
dynamicNeutral = {
- \revert DynamicText #'direction
- \revert DynamicLineSpanner #'direction
+ \revert DynamicText.direction
+ \revert DynamicLineSpanner.direction
}
%% easy heads
easyHeadsOn = {
- \override NoteHead #'stencil = #note-head::brew-ez-stencil
- \override NoteHead #'font-size = #-8
- \override NoteHead #'font-family = #'sans
- \override NoteHead #'font-series = #'bold
+ \override NoteHead.stencil = #note-head::brew-ez-stencil
+ \override NoteHead.font-size = #-8
+ \override NoteHead.font-family = #'sans
+ \override NoteHead.font-series = #'bold
}
easyHeadsOff = {
- \revert NoteHead #'stencil
- \revert NoteHead #'font-size
- \revert NoteHead #'font-family
- \revert NoteHead #'font-series
+ \revert NoteHead.stencil
+ \revert NoteHead.font-size
+ \revert NoteHead.font-family
+ \revert NoteHead.font-series
}
%% End the incipit and print a ``normal line start''.
endincipit = \context Staff {
\partial 16 s16 % Hack to handle e.g. \bar ".|" \endincipit
- \once \override Staff.Clef #'full-size-change = ##t
- \once \override Staff.Clef #'non-default = ##t
+ \once \override Staff.Clef.full-size-change = ##t
+ \once \override Staff.Clef.non-default = ##t
\bar ""
}
hideNotes = {
% hide notes, accidentals, etc.
- \override Dots #'transparent = ##t
- \override NoteHead #'transparent = ##t
- \override NoteHead #'no-ledgers = ##t
- \override Stem #'transparent = ##t
- \override Flag #'transparent = ##t
- \override Beam #'transparent = ##t
- \override Accidental #'transparent = ##t
- \override Rest #'transparent = ##t
- \override TabNoteHead #'transparent = ##t
+ \override Dots.transparent = ##t
+ \override NoteHead.transparent = ##t
+ \override NoteHead.no-ledgers = ##t
+ \override Stem.transparent = ##t
+ \override Flag.transparent = ##t
+ \override Beam.transparent = ##t
+ \override Accidental.transparent = ##t
+ \override Rest.transparent = ##t
+ \override TabNoteHead.transparent = ##t
}
unHideNotes = {
- \revert Accidental #'transparent
- \revert Beam #'transparent
- \revert Stem #'transparent
- \revert Flag #'transparent
- \revert NoteHead #'transparent
- \revert NoteHead #'no-ledgers
- \revert Dots #'transparent
- \revert Rest #'transparent
- \revert TabNoteHead #'transparent
+ \revert Accidental.transparent
+ \revert Beam.transparent
+ \revert Stem.transparent
+ \revert Flag.transparent
+ \revert NoteHead.transparent
+ \revert NoteHead.no-ledgers
+ \revert Dots.transparent
+ \revert Rest.transparent
+ \revert TabNoteHead.transparent
}
improvisationOn = {
\set squashedPosition = #0
- \override NoteHead #'style = #'slash
- \override Accidental #'stencil = ##f
- \override AccidentalCautionary #'stencil = ##f
+ \override NoteHead.style = #'slash
+ \override Accidental.stencil = ##f
+ \override AccidentalCautionary.stencil = ##f
}
improvisationOff = {
\unset squashedPosition
- \revert NoteHead #'style
- \revert Accidental #'stencil
- \revert AccidentalCautionary #'stencil
+ \revert NoteHead.style
+ \revert Accidental.stencil
+ \revert AccidentalCautionary.stencil
+}
+
+%% kievan
+kievanOn = {
+ \override NoteHead.style = #'kievan
+ \override Stem.X-offset = #stem::kievan-offset-callback
+ \override Stem.stencil = ##f
+ \override Flag.stencil = ##f
+ \override Rest.style = #'mensural
+ \override Accidental.glyph-name-alist = #alteration-kievan-glyph-name-alist
+ \override Dots.style = #'kievan
+ \override Slur.stencil = ##f
+ \override Stem.length = #0.0
+ \override Beam.positions = #beam::get-kievan-positions
+ \override Beam.quantized-positions = #beam::get-kievan-quantized-positions
+ \override NoteHead.duration-log = #note-head::calc-kievan-duration-log
+}
+kievanOff = {
+ \revert NoteHead.style
+ \revert Stem.X-offset
+ \revert Stem.stencil
+ \revert Rest.style
+ \revert Accidental.glyph-name-alist
+ \revert Dots.style
+ \revert Slur.stencil
+ \revert Flag.stencil
+ \revert Stem.length
+ \revert Beam.positions
+ \revert Beam.quantized-positions
+ \revert NoteHead.duration-log
}
-
%% merging
mergeDifferentlyDottedOn =
- \override Staff.NoteCollision #'merge-differently-dotted = ##t
+ \override Staff.NoteCollision.merge-differently-dotted = ##t
mergeDifferentlyDottedOff =
- \revert Staff.NoteCollision #'merge-differently-dotted
+ \revert Staff.NoteCollision.merge-differently-dotted
mergeDifferentlyHeadedOn =
- \override Staff.NoteCollision #'merge-differently-headed = ##t
+ \override Staff.NoteCollision.merge-differently-headed = ##t
mergeDifferentlyHeadedOff =
- \revert Staff.NoteCollision #'merge-differently-headed
+ \revert Staff.NoteCollision.merge-differently-headed
%% numeric time signature
-numericTimeSignature = \override Staff.TimeSignature #'style = #'numbered
-defaultTimeSignature = \revert Staff.TimeSignature #'style
+numericTimeSignature = \override Staff.TimeSignature.style = #'numbered
+defaultTimeSignature = \revert Staff.TimeSignature.style
%% palm mutes
%% phrasing slurs
% directions
-phrasingSlurUp = \override PhrasingSlur #'direction = #UP
-phrasingSlurDown = \override PhrasingSlur #'direction = #DOWN
-phrasingSlurNeutral = \revert PhrasingSlur #'direction
+phrasingSlurUp = \override PhrasingSlur.direction = #UP
+phrasingSlurDown = \override PhrasingSlur.direction = #DOWN
+phrasingSlurNeutral = \revert PhrasingSlur.direction
% dash-patterns (make-simple-dash-definition defined at top of file)
phrasingSlurDashPattern =
(_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.")
#{
- \override PhrasingSlur #'dash-definition =
+ \override PhrasingSlur.dash-definition =
$(make-simple-dash-definition dash-fraction dash-period)
#})
phrasingSlurDashed =
- \override PhrasingSlur #'dash-definition = #'((0 1 0.4 0.75))
+ \override PhrasingSlur.dash-definition = #'((0 1 0.4 0.75))
phrasingSlurDotted =
- \override PhrasingSlur #'dash-definition = #'((0 1 0.1 0.75))
+ \override PhrasingSlur.dash-definition = #'((0 1 0.1 0.75))
phrasingSlurHalfDashed =
- \override PhrasingSlur #'dash-definition = #'((0 0.5 0.4 0.75)
+ \override PhrasingSlur.dash-definition = #'((0 0.5 0.4 0.75)
(0.5 1 1 1))
phrasingSlurHalfSolid =
- \override PhrasingSlur #'dash-definition = #'((0 0.5 1 1)
+ \override PhrasingSlur.dash-definition = #'((0 0.5 1 1)
(0.5 1 0.4 0.75))
phrasingSlurSolid =
- \revert PhrasingSlur #'dash-definition
+ \revert PhrasingSlur.dash-definition
%% point and click
pointAndClickOn =
-#(define-music-function (parser location) ()
+#(define-void-function (parser location) ()
(_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)
- (make-music 'SequentialMusic 'void #t))
+ (ly:set-option 'point-and-click #t))
pointAndClickOff =
-#(define-music-function (parser location) ()
+#(define-void-function (parser location) ()
(_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)
- (make-music 'SequentialMusic 'void #t))
+ (ly:set-option 'point-and-click #f))
pointAndClickTypes =
-#(define-void-function (parser location types) (list-or-symbol?)
+#(define-void-function (parser location 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))
%% shifts
-shiftOn = \override NoteColumn #'horizontal-shift = #1
-shiftOnn = \override NoteColumn #'horizontal-shift = #2
-shiftOnnn = \override NoteColumn #'horizontal-shift = #3
-shiftOff = \revert NoteColumn #'horizontal-shift
+shiftOn = \override NoteColumn.horizontal-shift = #1
+shiftOnn = \override NoteColumn.horizontal-shift = #2
+shiftOnnn = \override NoteColumn.horizontal-shift = #3
+shiftOff = \revert NoteColumn.horizontal-shift
%% slurs
% directions
-slurUp = \override Slur #'direction = #UP
-slurDown = \override Slur #'direction = #DOWN
-slurNeutral = \revert Slur #'direction
+slurUp = \override Slur.direction = #UP
+slurDown = \override Slur.direction = #DOWN
+slurNeutral = \revert Slur.direction
% dash-patterns (make-simple-dash-definition defined at top of file)
slurDashPattern =
(_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.")
#{
- \override Slur #'dash-definition =
+ \override Slur.dash-definition =
$(make-simple-dash-definition dash-fraction dash-period)
#})
-slurDashed = \override Slur #'dash-definition = #'((0 1 0.4 0.75))
-slurDotted = \override Slur #'dash-definition = #'((0 1 0.1 0.75))
-slurHalfDashed = \override Slur #'dash-definition = #'((0 0.5 0.4 0.75)
+slurDashed = \override Slur.dash-definition = #'((0 1 0.4 0.75))
+slurDotted = \override Slur.dash-definition = #'((0 1 0.1 0.75))
+slurHalfDashed = \override Slur.dash-definition = #'((0 0.5 0.4 0.75)
(0.5 1 1 1))
-slurHalfSolid = \override Slur #'dash-definition = #'((0 0.5 1 1)
+slurHalfSolid = \override Slur.dash-definition = #'((0 0.5 1 1)
(0.5 1 0.4 0.75))
-slurSolid = \revert Slur #'dash-definition
+slurSolid = \revert Slur.dash-definition
%% staff switches
%% stems
-stemUp = \override Stem #'direction = #UP
-stemDown = \override Stem #'direction = #DOWN
-stemNeutral = \revert Stem #'direction
+stemUp = \override Stem.direction = #UP
+stemDown = \override Stem.direction = #DOWN
+stemNeutral = \revert Stem.direction
%% tablature
% switch to full notation
tabFullNotation = {
% time signature
- \revert TabStaff.TimeSignature #'stencil
+ \revert TabStaff.TimeSignature.stencil
% stems (the half note gets a double stem)
- \revert TabVoice.Stem #'length
- \revert TabVoice.Stem #'no-stem-extend
- \revert TabVoice.Flag #'style
- \revert TabVoice.Stem #'details
- \revert TabVoice.Stem #'stencil
- \revert TabVoice.Flag #'stencil
- \override TabVoice.Stem #'stencil = #tabvoice::draw-double-stem-for-half-notes
- \override TabVoice.Stem #'X-extent = #tabvoice::make-double-stem-width-for-half-notes
+ \revert TabVoice.Stem.length
+ \revert TabVoice.Stem.no-stem-extend
+ \revert TabVoice.Flag.style
+ \revert TabVoice.Stem.details
+ \revert TabVoice.Stem.stencil
+ \revert TabVoice.Flag.stencil
+ \override TabVoice.Stem.stencil = #tabvoice::draw-double-stem-for-half-notes
+ \override TabVoice.Stem.X-extent = #tabvoice::make-double-stem-width-for-half-notes
\set TabVoice.autoBeaming = ##t
- \revert TabVoice.NoteColumn #'ignore-collision
+ \revert TabVoice.NoteColumn.ignore-collision
% beams, dots
- \revert TabVoice.Beam #'stencil
- \revert TabVoice.StemTremolo #'stencil
- \revert TabVoice.Dots #'stencil
- \revert TabVoice.Tie #'stencil
- \revert TabVoice.Tie #'after-line-breaking
- \revert TabVoice.RepeatTie #'stencil
- \revert TabVoice.RepeatTie #'after-line-breaking
- \revert TabVoice.LaissezVibrerTie #'stencil
- \revert TabVoice.Slur #'stencil
- \revert TabVoice.PhrasingSlur #'stencil
+ \revert TabVoice.Beam.stencil
+ \revert TabVoice.StemTremolo.stencil
+ \revert TabVoice.Dots.stencil
+ \revert TabVoice.Tie.stencil
+ \revert TabVoice.Tie.after-line-breaking
+ \revert TabVoice.RepeatTie.stencil
+ \revert TabVoice.RepeatTie.after-line-breaking
+ \revert TabVoice.LaissezVibrerTie.stencil
+ \revert TabVoice.Slur.stencil
+ \revert TabVoice.PhrasingSlur.stencil
% tuplet stuff
- \revert TabVoice.TupletBracket #'stencil
- \revert TabVoice.TupletNumber #'stencil
+ \revert TabVoice.TupletBracket.stencil
+ \revert TabVoice.TupletNumber.stencil
% dynamic signs
- \revert TabVoice.DynamicText #'stencil
- \revert TabVoice.DynamicTextSpanner #'stencil
- \revert TabVoice.DynamicTextSpanner #'stencil
- \revert TabVoice.Hairpin #'stencil
+ \revert TabVoice.DynamicText.stencil
+ \revert TabVoice.DynamicTextSpanner.stencil
+ \revert TabVoice.DynamicTextSpanner.stencil
+ \revert TabVoice.Hairpin.stencil
% rests
- \revert TabVoice.Rest #'stencil
- \revert TabVoice.MultiMeasureRest #'stencil
- \revert TabVoice.MultiMeasureRestNumber #'stencil
- \revert TabVoice.MultiMeasureRestText #'stencil
+ \revert TabVoice.Rest.stencil
+ \revert TabVoice.MultiMeasureRest.stencil
+ \revert TabVoice.MultiMeasureRestNumber.stencil
+ \revert TabVoice.MultiMeasureRestText.stencil
% markups etc.
- \revert TabVoice.Glissando #'stencil
- \revert TabVoice.Script #'stencil
- \revert TabVoice.TextScript #'stencil
- \revert TabVoice.TextSpanner #'stencil
- \revert TabStaff.Arpeggio #'stencil
- \revert TabStaff.NoteColumn #'ignore-collision
+ \revert TabVoice.Glissando.stencil
+ \revert TabVoice.Script.stencil
+ \revert TabVoice.TextScript.stencil
+ \revert TabVoice.TextSpanner.stencil
+ \revert TabStaff.Arpeggio.stencil
+ \revert TabStaff.NoteColumn.ignore-collision
}
%tie/repeat tie behaviour
hideSplitTiedTabNotes = {
- \override TabVoice.TabNoteHead #'(details tied-properties break-visibility) = #all-invisible
- \override TabVoice.TabNoteHead #'(details tied-properties parenthesize) = ##f
- \override TabVoice.TabNoteHead #'(details repeat-tied-properties note-head-visible) = ##f
- \override TabVoice.TabNoteHead #'(details repeat-tied-properties parenthesize) = ##f
+ \override TabVoice.TabNoteHead.details.tied-properties.break-visibility = #all-invisible
+ \override TabVoice.TabNoteHead.details.tied-properties.parenthesize = ##f
+ \override TabVoice.TabNoteHead.details.repeat-tied-properties.note-head-visible = ##f
+ \override TabVoice.TabNoteHead.details.repeat-tied-properties.parenthesize = ##f
}
showSplitTiedTabNotes = {
- \override TabVoice.TabNoteHead #'(details tied-properties break-visibility) = #begin-of-line-visible
- \override TabVoice.TabNoteHead #'(details tied-properties parenthesize) = ##t
- \override TabVoice.TabNoteHead #'(details repeat-tied-properties note-head-visible) = ##t
- \override TabVoice.TabNoteHead #'(details repeat-tied-properties parenthesize) = ##t
+ \override TabVoice.TabNoteHead.details.tied-properties.break-visibility = #begin-of-line-visible
+ \override TabVoice.TabNoteHead.details.tied-properties.parenthesize = ##t
+ \override TabVoice.TabNoteHead.details.repeat-tied-properties.note-head-visible = ##t
+ \override TabVoice.TabNoteHead.details.repeat-tied-properties.parenthesize = ##t
}
%% text length
textLengthOn = {
- \override TextScript #'extra-spacing-width = #'(0 . 0)
- \override TextScript #'extra-spacing-height = #'(-inf.0 . +inf.0)
+ \override TextScript.extra-spacing-width = #'(0 . 0)
+ \override TextScript.extra-spacing-height = #'(-inf.0 . +inf.0)
}
textLengthOff = {
- \override TextScript #'extra-spacing-width = #'(+inf.0 . -inf.0)
- \override TextScript #'extra-spacing-height = #'(0 . 0)
+ \override TextScript.extra-spacing-width = #'(+inf.0 . -inf.0)
+ \override TextScript.extra-spacing-height = #'(0 . 0)
}
%% text spanners
-textSpannerUp = \override TextSpanner #'direction = #UP
-textSpannerDown = \override TextSpanner #'direction = #DOWN
-textSpannerNeutral = \revert TextSpanner #'direction
+textSpannerUp = \override TextSpanner.direction = #UP
+textSpannerDown = \override TextSpanner.direction = #DOWN
+textSpannerNeutral = \revert TextSpanner.direction
%% ties
% directions
-tieUp = \override Tie #'direction = #UP
-tieDown = \override Tie #'direction = #DOWN
-tieNeutral = \revert Tie #'direction
+tieUp = \override Tie.direction = #UP
+tieDown = \override Tie.direction = #DOWN
+tieNeutral = \revert Tie.direction
% dash-patterns (make-simple-dash-definition defined at top of file)
tieDashPattern =
(_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.")
#{
- \override Tie #'dash-definition =
+ \override Tie.dash-definition =
$(make-simple-dash-definition dash-fraction dash-period)
#})
-tieDashed = \override Tie #'dash-definition = #'((0 1 0.4 0.75))
-tieDotted = \override Tie #'dash-definition = #'((0 1 0.1 0.75))
-tieHalfDashed = \override Tie #'dash-definition = #'((0 0.5 0.4 0.75)
+tieDashed = \override Tie.dash-definition = #'((0 1 0.4 0.75))
+tieDotted = \override Tie.dash-definition = #'((0 1 0.1 0.75))
+tieHalfDashed = \override Tie.dash-definition = #'((0 0.5 0.4 0.75)
(0.5 1 1 1))
-tieHalfSolid = \override Tie #'dash-definition = #'((0 0.5 1 1)
+tieHalfSolid = \override Tie.dash-definition = #'((0 0.5 1 1)
(0.5 1 0.4 0.75))
-tieSolid = \revert Tie #'dash-definition
+tieSolid = \revert Tie.dash-definition
%% tuplets
-tupletUp = \override TupletBracket #'direction = #UP
-tupletDown = \override TupletBracket #'direction = #DOWN
-tupletNeutral = \revert TupletBracket #'direction
+tupletUp = \override TupletBracket.direction = #UP
+tupletDown = \override TupletBracket.direction = #DOWN
+tupletNeutral = \revert TupletBracket.direction
%% voice properties
%% voice styles
voiceOneStyle = {
- \override NoteHead #'style = #'diamond
- \override NoteHead #'color = #red
- \override Stem #'color = #red
- \override Flag #'color = #red
- \override Beam #'color = #red
+ \override NoteHead.style = #'diamond
+ \override NoteHead.color = #red
+ \override Stem.color = #red
+ \override Flag.color = #red
+ \override Beam.color = #red
}
voiceTwoStyle = {
- \override NoteHead #'style = #'triangle
- \override NoteHead #'color = #blue
- \override Stem #'color = #blue
- \override Flag #'color = #blue
- \override Beam #'color = #blue
+ \override NoteHead.style = #'triangle
+ \override NoteHead.color = #blue
+ \override Stem.color = #blue
+ \override Flag.color = #blue
+ \override Beam.color = #blue
}
voiceThreeStyle = {
- \override NoteHead #'style = #'xcircle
- \override NoteHead #'color = #green
- \override Stem #'color = #green
- \override Flag #'color = #green
- \override Beam #'color = #green
+ \override NoteHead.style = #'xcircle
+ \override NoteHead.color = #green
+ \override Stem.color = #green
+ \override Flag.color = #green
+ \override Beam.color = #green
}
voiceFourStyle = {
- \override NoteHead #'style = #'cross
- \override NoteHead #'color = #magenta
- \override Stem #'color = #magenta
- \override Flag #'color = #magenta
- \override Beam #'color = #magenta
+ \override NoteHead.style = #'cross
+ \override NoteHead.color = #magenta
+ \override Stem.color = #magenta
+ \override Flag.color = #magenta
+ \override Beam.color = #magenta
}
voiceNeutralStyle = {
- \revert NoteHead #'style
- \revert NoteHead #'color
- \revert Stem #'color
- \revert Flag #'color
- \revert Beam #'color
+ \revert NoteHead.style
+ \revert NoteHead.color
+ \revert Stem.color
+ \revert Flag.color
+ \revert Beam.color
}
+%% volta brackets
+
+allowVoltaHook =
+#(define-void-function (parser location bar) (string?)
+ (allow-volta-hook bar))
+
%% x notes
xNotesOn =
endcr = #(make-span-event 'CrescendoEvent STOP)
+startMeasureCount = #(make-span-event 'MeasureCounterEvent START)
+stopMeasureCount = #(make-span-event 'MeasureCounterEvent STOP)
+
+
startTextSpan = #(make-span-event 'TextSpanEvent START)
stopTextSpan = #(make-span-event 'TextSpanEvent STOP)
empty-stencil))
%% Bookpart first page and last page predicates
+#(define (part-first-page? layout props)
+ (= (chain-assoc-get 'page:page-number props -1)
+ (ly:output-def-lookup layout 'first-page-number)))
+
+#(define (part-last-page? layout props)
+ (chain-assoc-get 'page:is-bookpart-last-page props #f))
+
#(define (part-first-page layout props arg)
- (if (= (chain-assoc-get 'page:page-number props -1)
- (ly:output-def-lookup layout 'first-page-number))
+ (if (part-first-page? layout props)
+ (interpret-markup layout props arg)
+ empty-stencil))
+
+#(define (not-part-first-page layout props arg)
+ (if (not (part-first-page? layout props))
(interpret-markup layout props arg)
empty-stencil))
#(define (part-last-page layout props arg)
- (if (chain-assoc-get 'page:is-bookpart-last-page props #f)
+ (if (part-last-page? layout props)
(interpret-markup layout props arg)
empty-stencil))
empty-stencil))
#(define (print-page-number-check-first layout props arg)
- (if (or (not (book-first-page? layout props))
+ (if (or (not (part-first-page? layout props))
(eq? (ly:output-def-lookup layout 'print-first-page-number) #t))
(create-page-number-stencil layout props arg)
empty-stencil))
%% force the header to take some space, otherwise the
%% page layout becomes a complete mess.
" "
- \on-the-fly #not-first-page \fromproperty #'header:instrument
+ \on-the-fly #not-part-first-page \fromproperty #'header:instrument
\on-the-fly #print-page-number-check-first \fromproperty #'page:page-number-string
}
evenHeaderMarkup = \markup
\fill-line {
\on-the-fly #print-page-number-check-first \fromproperty #'page:page-number-string
- \on-the-fly #not-first-page \fromproperty #'header:instrument
+ \on-the-fly #not-part-first-page \fromproperty #'header:instrument
" "
}
\column {
\fill-line {
%% Copyright header field only on first page.
- \on-the-fly #first-page \fromproperty #'header:copyright
+ \on-the-fly #part-first-page \fromproperty #'header:copyright
}
\fill-line {
%% Tagline header field only on last page.
- \on-the-fly #last-page \fromproperty #'header:tagline
+ \on-the-fly #part-last-page \fromproperty #'header:tagline
}
}
}
+++ /dev/null
-depth = ..
-
-STEPMAKE_TEMPLATES=makedir install
-
-include $(depth)/make/stepmake.make
-
-default: spec
-
ABC_FILES = $(call src-wildcard,*.abc)
OUT_LY_FILES = $(sort ${ABC_FILES:%.abc=$(outdir)/%.ly})
OUT_FILES = $(OUT_LY_FILES)
-
-EXTRA_DIST_FILES += $(ABC_FILES)
# Add the xml => pdf rule only if we have dblatex
ifeq (,$(findstring dblatex,$(MISSING_OPTIONAL)))
$(outdir)/%.pdf: $(outdir)/%.xml
- cd $(outdir) && $(DBLATEX) $(notdir $<)
+ cd $(outdir) && $(buildscript-dir)/run-and-check "$(DBLATEX) $(notdir $<)" "$*.dblatex.log"
endif
BSTINPUTS=$(top-src-dir)/Documentation/web/ $(buildscript-dir)/bib2texi \
-s $(top-src-dir)/Documentation/lily-bib \
-o $(outdir)/$*.itexi \
+ -q \
$(top-src-dir)/Documentation/web/$*.bib
TEXINFO_SOURCES += $(TELY_FILES) $(ITELY_FILES) $(ITEXI_FILES)
-EXTRA_DIST_FILES +=$(TELY_FILES) $(LY_FILES) $(ITEXI_FILES) $(ITELY_FILES) $(ILY_FILES)
-
# prerequisites for all rules invoking compiled lilypond binary
ifeq ($(LILYPOND_EXTERNAL_BINARY),)
INIT_LY_SOURCES = $(wildcard $(top-src-dir)/scm/*.scm)
OUT_DIFF_FILES = ${LY_FILES:%.ly=$(outdir)/%.diff}
MIDI2LY_IGNORE_RES = -I 'Lily was here' -I '^\\version ' -I 'TEXT_EVENT.*GNU LilyPond' -I '^% included from'
DIFF = diff
-
-EXTRA_DIST_FILES += $(MIDI_FILES) $(HEADER_FILES)
MUSICMXL_FILES = $(call src-wildcard,*.mxl) # Allow .mxl for compressed files
OUT_LY_FILES = $(sort ${MUSICXML_FILES:%.xml=$(outdir)/%.ly} ${MUSICMXL_FILES:%.mxl=$(outdir)/%.ly})
OUT_FILES = $(OUT_LY_FILES)
-
-EXTRA_DIST_FILES += $(MUSICXML_FILES) $(MUSICMXL_FILES) $(call src-wildcard,*.broken)
fet_endchar;
+% A tick character to use instead of a comma or caesura as a breath mark.
+% Very common in vocal notation.
+
+fet_beginchar ("Tick mark", "tickmark");
+ save end_rad, bot_rad, pat, x_centre, x_extent;
+ path pat;
+
+ end_rad = linethickness / 2;
+ bot_rad = linethickness;
+
+ x_centre# = 0.6 staff_space#;
+ x_extent# = 1.7 staff_space#;
+
+ define_pixels (x_centre, x_extent);
+
+ pickup pencircle scaled end_rad;
+
+ lft x1 = -x_centre;
+ y1 = 0.8 staff_space;
+
+ x2 = 0;
+ y2l = 0;
+
+ top rt z3 = (x_extent - x_centre, x_extent);
+
+ x4 = lft x1;
+ y4 = staff_space;
+
+ penpos2 (0.4 staff_space, 90);
+ penpos3 (end_rad, angle(z4 - z3) + 90);
+ penpos1 (end_rad, angle(z2 - z1) + 90);
+
+ pat = z1r
+ .. top z1
+ .. z1l{z2 - z1}
+ .. {z2 - (z1 + (0.3 staff_space,0))}z2l + (-bot_rad, bot_rad)
+ .. z2l
+ .. z2l + (bot_rad, bot_rad){z3 - (0.6 staff_space, 0) - z2}
+ .. {z3 - z4}z3r
+ .. rt z3
+ .. {z4 - z3}z3l
+ .. {z2 - (z3 - (0.6 staff_space, 0))}rt z2r
+ .. {z1 - z2}lft z2r{z1 - z2}
+ .. cycle;
+ fill pat;
+
+ set_char_box (x_centre#, x_extent# - x_centre#, 0, x_extent#);
+
+ penlabels (1, 2, 3);
+ labels (4);
+fet_endchar;
+
+
fet_beginchar ("snap pizzicato (Bartok pizzicato)", "snappizzicato");
save height, width, thickness, superness;
penlabels (1, 2, 3);
enddef;
+
%
% Draw two brevis notes; the second one shifted down by `shift'.
% The other parameters are the same as with `draw_brevis'.
enddef;
-%
-% Draw three brevis notes; the second one shifted down by `shift',
-% the third one by `2 shift'.
-% The other parameters are the same as with `draw_brevis'.
-%
-def draw_triple_brevis (expr exact_center, bwidth, bheight,
- blinethickness, shift) =
- save brevis_width, brevis_height, linethickness;
-
- brevis_width# = bwidth;
- brevis_height# = bheight;
- linethickness# = blinethickness;
-
- save beam_width, beam_height;
- save serif_size, serif_protrude, hole_height;
-
- beam_width# = 1.4 linethickness#;
- hole_height# = 3 linethickness#;
- 2 beam_height# + hole_height# = brevis_height#;
- serif_size# = (hole_height# - linethickness#) / 2;
- serif_protrude# = 1.5 serif_size#;
-
- save xoffs, yoffs;
-
- xoffs# = xpart exact_center;
- yoffs# = ypart exact_center;
-
- define_pixels (xoffs, yoffs);
- define_pixels (brevis_width, brevis_height, linethickness);
- define_pixels (beam_width, beam_height, serif_size, serif_protrude);
-
- z1l = (xoffs, yoffs - linethickness);
- z2r = z1r + serif_size * (1, -1);
- z3l = z2l + (-serif_size, -serif_protrude);
-
- penpos1 (beam_width, 0);
- penpos2 (beam_height, 90);
- penpos3 (beam_width, 180);
-
- z7 = z1 shifted (0, -2 shift);
- z8 = z2 shifted (0, -2 shift);
- z9 = z3 shifted (0, -2 shift);
-
- penpos7 (beam_width, 0);
- penpos8 (beam_height, 90);
- penpos9 (beam_width, 180);
-
- save pat_in, pat_out;
- path pat_in, pat_out;
-
- pat_out := z9r{down}
- .. z9l{up}
- .. z8l{right};
- pat_out := pat_out
- -- reverse pat_out xscaled -1
- shifted (2 xoffs + brevis_width, 0);
- pat_out := pat_out
- -- reverse pat_out yscaled -1
- shifted (0, -2 yoffs)
- -- cycle;
-
- fill pat_out;
-
- pat_in := z1r{down}
- .. z2r{right};
- pat_in := pat_in
- -- reverse pat_in xscaled -1
- shifted (2 xoffs + brevis_width, 0);
- pat_in := pat_in
- -- reverse pat_in yscaled -1
- shifted (0, 2 yoffs)
- -- cycle;
-
- unfill pat_in;
- unfill pat_in shifted (0, -shift);
- unfill pat_in shifted (0, -2 shift);
-
- penlabels (1, 2, 3, 7, 8, 9);
-enddef;
-
-
def draw_neomensural_c_clef (expr exact_center, reduction) =
save reduced_il, reduced_slt, stem_width;
fet_endchar;
-def draw_mensural_c_clef (expr exact_center, reduction) =
- % inspired by Ockeghem, "Missa Prolationum", in: MGG, volume
- % 9, table 94.
-
- save reduced_il;
+def draw_mensural_c_clef (expr exact_center, reduction, fill_char) =
+ save reduced_il, vert_thick, hor_thick, blot_rad;
reduced_il# = staff_space# * reduction;
+ vert_thick# = linethickness# * 1.4;
+ hor_thick# = staff_space# * reduction * 0.25;
+
+ blot_rad = blot_diameter / 2;
+
+ define_pixels (reduced_il, vert_thick, hor_thick);
+
+ pickup pencircle scaled blot_diameter;
+
+ penpos1 (vert_thick, 0);
+ penpos2 (vert_thick, 0);
+ penpos3 (hor_thick, 90);
+ penpos4 (hor_thick, 90);
+ penpos5 (hor_thick, 90);
+ penpos6 (hor_thick, 90);
+ penpos7 (vert_thick, 0);
+ penpos8 (hor_thick, 90);
+
+ z1l = (0, 0);
+ x2l = 0;
+ top y2 = 2.2 reduced_il;
+ z3 = (vert_thick, 0.75 reduced_il);
+ z4 = z3 + (reduced_il - vert_thick, 0);
+ z5 = z4 + (vert_thick, -0.5 reduced_il);
+ z6 = z5 - (reduced_il, 0);
+ z7 = z4 + (0.5 vert_thick, 0.5 reduced_il);
+ z8 = z5 - (vert_thick, 0);
+
+ save pat, pat_mid;
+ path pat, pat_mid;
+
+ pat = z1l
+ -- z2l{up}
+ .. z2 + (0, blot_rad)
+ .. {down}z2r
+ -- top z3r{down}
+ .. {right}rt z3r
+ -- lft z4r{right}
+ .. {up}top z4r
+ -- z7l{up}
+ .. z7 + (0, blot_rad)
+ .. {down}z7r
+ -- top z5l{down}
+ .. {left}lft z5l
+ -- rt z6l{left}
+ .. {down}bot z6l
+ --z1r;
+ pat := pat
+ -- reverse pat yscaled -1
+ -- cycle;
+ fill pat;
- define_pixels (reduced_il);
-
- draw_triple_brevis (exact_center + (0, 0.5 staff_space#),
- 2 reduced_il#, 0.8 staff_space#,
- 0.8 linethickness#, staff_space);
-
- save half_reduced_il;
-
- half_reduced_il# = staff_space# * sqrt (reduction);
-
- define_pixels (half_reduced_il);
-
- set_char_box (0 - xpart exact_center,
- 2 reduced_il# + xpart exact_center,
- 2.2 half_reduced_il# + staff_space# -
- 2 ypart exact_center,
- 2.2 half_reduced_il# + 2 ypart exact_center);
-
- save xoffs, yoffs;
-
- xoffs# = xpart exact_center;
- yoffs# = ypart exact_center;
-
- define_pixels (xoffs, yoffs);
-
- save ellipse, T;
- path ellipse;
- transform T;
+ if fill_char:
+ pat_mid = bot z3l{up}
+ .. {right}rt z3l
+ -- lft z4l{right}
+ .. {down}bot z4l
+ -- top z8r{down}
+ .. {left}lft z8r
+ -- rt z6r{left}
+ .. {up}top z6r
+ --cycle;
+ unfill pat_mid;
+
+ pat_mid := pat_mid shifted (0, -reduced_il);
+ unfill pat_mid;
+ fi;
- T := identity xscaled 1.4 linethickness
- yscaled blot_diameter;
- pickup pencircle transformed T;
- ellipse := fullcircle transformed T;
+ set_char_box (0, reduced_il# + vert_thick#,
+ 2.2 reduced_il#, 2.2 reduced_il#);
- lft x11 = lft x13 = xoffs;
- top y11 = yoffs + 2.2 half_reduced_il;
- bot y13 = yoffs - 2.2 half_reduced_il - staff_space;
- rt x15 = rt x17 = xoffs + brevis_width;
- y15 = yoffs + 1.4 half_reduced_il;
- y17 = yoffs - 1.4 half_reduced_il - staff_space;
+ penlabels (1, 2, 3, 4, 5, 6, 7, 8);
+enddef;
- z12 = z14 yscaled -1 shifted (0, -staff_space);
- z14 = z9;
- z16 = z18 yscaled -1 shifted (0, -staff_space);
- rt z18 = lft z14 shifted (brevis_width, 0);
- penpos12 (1.4 linethickness, 0);
- penpos14 (1.4 linethickness, 0);
- penpos16 (1.4 linethickness, 0);
- penpos18 (1.4 linethickness, 0);
+fet_beginchar ("mensural c clef", "mensural.c");
+ if test = 1:
+ draw_staff (-1, 3, 0.0);
+ fi;
+ draw_mensural_c_clef ((0, 0), 1.0, true);
+fet_endchar;
- fill get_subpath (ellipse, up, down, z11)
- -- z12l
- -- z12r
- -- cycle;
- fill get_subpath (ellipse, down, up, z13)
- -- z14r
- -- z14l
- -- cycle;
- fill get_subpath (ellipse, up, down, z15)
- -- z16l
- -- z16r
- -- cycle;
- fill get_subpath (ellipse, down, up, z17)
- -- z18r
- -- z18l
- -- cycle;
- labels (11, 13, 15, 17);
- penlabels (12, 14, 16, 18);
-enddef;
+fet_beginchar ("mensural c clef", "mensural.c_change");
+ draw_mensural_c_clef ((0, 0), .8, true);
+fet_endchar;
-fet_beginchar ("mensural c clef", "mensural.c");
+fet_beginchar ("black mensural c clef", "blackmensural.c");
if test = 1:
draw_staff (-1, 3, 0.0);
fi;
- draw_mensural_c_clef ((0, 0), 1.0);
+ draw_mensural_c_clef ((0, 0), 1.0, false);
fet_endchar;
-fet_beginchar ("mensural c clef", "mensural.c_change");
- draw_mensural_c_clef ((0, 0), .8);
+fet_beginchar ("black mensural c clef", "blackmensural.c_change");
+ draw_mensural_c_clef ((0, 0), 0.8, false);
fet_endchar;
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: lilypond 2.16.0\n"
+"Project-Id-Version: lilypond 2.17.8\n"
"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
"lilypond.bugs\n"
-"POT-Creation-Date: 2012-08-24 11:03+0200\n"
+"POT-Creation-Date: 2012-12-01 17:00+0000\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"
-"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#: book_base.py:26
#, python-format
"%s"
msgstr ""
-#: book_snippets.py:409
+#: book_snippets.py:406
#, python-format
msgid "deprecated ly-option used: %s=%s"
msgstr ""
-#: book_snippets.py:411
+#: book_snippets.py:408
#, python-format
msgid "compatibility mode translation: %s=%s"
msgstr ""
-#: book_snippets.py:414
+#: book_snippets.py:411
#, python-format
msgid "deprecated ly-option used: %s"
msgstr ""
-#: book_snippets.py:416
+#: book_snippets.py:413
#, python-format
msgid "compatibility mode translation: %s"
msgstr ""
-#: book_snippets.py:533
+#: book_snippets.py:530
#, python-format
msgid "ignoring unknown ly option: %s"
msgstr ""
-#: book_snippets.py:624
+#: book_snippets.py:621
#, python-format
msgid "Missing files: %s"
msgstr ""
-#: book_snippets.py:654
+#: book_snippets.py:651
#, python-format
msgid "Could not overwrite file %s"
msgstr ""
-#: book_snippets.py:741
+#: book_snippets.py:738
#, python-format
msgid "Running through filter `%s'"
msgstr ""
-#: book_snippets.py:761
+#: book_snippets.py:759
#, python-format
msgid "`%s' failed (%d)"
msgstr ""
-#: book_snippets.py:762
+#: book_snippets.py:760
msgid "The error log is as follows:"
msgstr ""
-#: book_snippets.py:882
+#: book_snippets.py:880
#, python-format
msgid "Converting MusicXML file `%s'...\n"
msgstr ""
-#: book_snippets.py:909
+#: book_snippets.py:907
#, python-format
msgid ""
"%s: duplicate filename but different contents of original file,\n"
"printing diff against existing file."
msgstr ""
-#: book_snippets.py:922
+#: book_snippets.py:920
#, python-format
msgid ""
"%s: duplicate filename but different contents of converted lilypond file,\n"
msgid "%s has been replaced by %s"
msgstr ""
-#: convertrules.py:24 lilylib.py:131 warn.cc:223
+#: convertrules.py:24 lilylib.py:136 warn.cc:223
#, c-format, python-format
msgid "warning: %s"
msgstr ""
msgid "Writing fonts to %s"
msgstr ""
-#: lilylib.py:96
+#: lilylib.py:101
#, python-format
msgid "Setting loglevel to %s"
msgstr ""
-#: lilylib.py:99
+#: lilylib.py:104
#, python-format
msgid "Unknown or invalid loglevel '%s'"
msgstr ""
-#: lilylib.py:128 warn.cc:211
+#: lilylib.py:133 warn.cc:211
#, c-format, python-format
msgid "error: %s"
msgstr ""
-#: lilylib.py:185
+#: lilylib.py:190
#, python-format
msgid "Processing %s.ly"
msgstr ""
-#: lilylib.py:189 lilylib.py:250
+#: lilylib.py:194 lilylib.py:255
#, python-format
msgid "Invoking `%s'"
msgstr ""
-#: lilylib.py:191 lilylib.py:252
+#: lilylib.py:196 lilylib.py:257
#, python-format
msgid "Running %s..."
msgstr ""
-#: lilylib.py:328
+#: lilylib.py:333
#, python-format
msgid "Usage: %s"
msgstr ""
msgid "Unable to find instrument for ID=%s\n"
msgstr ""
-#: abc2ly.py:1376 convert-ly.py:81 lilypond-book.py:122 midi2ly.py:1044
+#: abc2ly.py:1386 convert-ly.py:84 lilypond-book.py:122 midi2ly.py:1044
#, python-format
msgid "%s [OPTION]... FILE"
msgstr ""
-#: abc2ly.py:1377
+#: abc2ly.py:1387
#, python-format
msgid ""
"abc2ly converts ABC music files (see\n"
"%s) to LilyPond input.\n"
msgstr ""
-#: abc2ly.py:1385 convert-ly.py:88 etf2ly.py:1208 lilypond-book.py:231
-#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:174
+#: abc2ly.py:1395 convert-ly.py:91 etf2ly.py:1208 lilypond-book.py:231
+#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:138
msgid "show version number and exit"
msgstr ""
-#: abc2ly.py:1388 convert-ly.py:92 etf2ly.py:1204 lilypond-book.py:140
-#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:153
+#: abc2ly.py:1398 convert-ly.py:95 etf2ly.py:1204 lilypond-book.py:140
+#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:117
msgid "show this help and exit"
msgstr ""
-#: abc2ly.py:1391 etf2ly.py:1209 midi2ly.py:1071
+#: abc2ly.py:1401 etf2ly.py:1209 midi2ly.py:1071
msgid "write output to FILE"
msgstr ""
-#: abc2ly.py:1394
+#: abc2ly.py:1404
msgid "be strict about success"
msgstr ""
-#: abc2ly.py:1397
+#: abc2ly.py:1407
msgid "preserve ABC's notion of beams"
msgstr ""
-#: abc2ly.py:1400
+#: abc2ly.py:1410
msgid "suppress progress messages"
msgstr ""
#. "Report bugs in English via %s",
#. or if there is a LilyPond users list or forum in your language
#. "Report bugs in English via %s or in YOUR_LANG via URI"
-#: abc2ly.py:1403 convert-ly.py:146 etf2ly.py:1218 lilypond-book.py:258
-#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:285
+#: abc2ly.py:1413 convert-ly.py:149 etf2ly.py:1218 lilypond-book.py:258
+#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:249
#, c-format, python-format
msgid "Report bugs via %s"
msgstr ""
"version taken from the \\version command, to the current LilyPond version."
msgstr ""
-#: convert-ly.py:48 lilypond-book.py:82
+#: convert-ly.py:49
+msgid "If FILE is `-', read from standard input."
+msgstr ""
+
+#: convert-ly.py:51 lilypond-book.py:82
msgid "Examples:"
msgstr ""
-#: convert-ly.py:75 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
+#: convert-ly.py:78 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
#, python-format
msgid "Copyright (c) %s by"
msgstr ""
-#: convert-ly.py:77 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
+#: convert-ly.py:80 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
msgid "Distributed under terms of the GNU General Public License."
msgstr ""
-#: convert-ly.py:78 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
+#: convert-ly.py:81 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
msgid "It comes with NO WARRANTY."
msgstr ""
-#: convert-ly.py:96 convert-ly.py:137
+#: convert-ly.py:99 convert-ly.py:140
msgid "VERSION"
msgstr ""
-#: convert-ly.py:98
+#: convert-ly.py:101
msgid "start from VERSION [default: \\version found in file]"
msgstr ""
-#: convert-ly.py:101
+#: convert-ly.py:104
msgid "edit in place"
msgstr ""
-#: convert-ly.py:105 lilypond-book.py:179 musicxml2ly.py:2627
+#: convert-ly.py:108 lilypond-book.py:179 musicxml2ly.py:2627
msgid ""
"Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS "
"(default), DEBUG)"
msgstr ""
-#: convert-ly.py:107 lilypond-book.py:163 lilypond-book.py:181
-#: musicxml2ly.py:2629 main.cc:167
+#: convert-ly.py:110 lilypond-book.py:163 lilypond-book.py:181
+#: musicxml2ly.py:2629 main.cc:131
msgid "LOGLEVEL"
msgstr ""
-#: convert-ly.py:113
+#: convert-ly.py:116
msgid "do not add \\version command if missing"
msgstr ""
-#: convert-ly.py:119
+#: convert-ly.py:122
#, python-format
msgid "force updating \\version number to %s"
msgstr ""
-#: convert-ly.py:125
+#: convert-ly.py:128
msgid "only update \\version number if file is modified"
msgstr ""
-#: convert-ly.py:131
+#: convert-ly.py:134
#, python-format
msgid "show rules [default: -f 0, -t %s]"
msgstr ""
-#: convert-ly.py:136
+#: convert-ly.py:139
#, python-format
msgid "convert to VERSION [default: %s]"
msgstr ""
-#: convert-ly.py:141 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
-#: main.cc:176
+#: convert-ly.py:144 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
+#: main.cc:140
msgid "show warranty and copyright"
msgstr ""
-#: convert-ly.py:186
+#: convert-ly.py:189
msgid "Applying conversion: "
msgstr ""
-#: convert-ly.py:202
+#: convert-ly.py:204
msgid "Error while converting"
msgstr ""
-#: convert-ly.py:204
+#: convert-ly.py:206
msgid "Stopping at last successful rule"
msgstr ""
-#: convert-ly.py:231
+#: convert-ly.py:234
#, python-format
msgid "Processing `%s'... "
msgstr ""
-#: convert-ly.py:338
+#: convert-ly.py:344
#, python-format
msgid "%s: Unable to open file"
msgstr ""
-#: convert-ly.py:345
+#: convert-ly.py:350
#, python-format
msgid "%s: Unable to determine version. Skipping"
msgstr ""
-#: convert-ly.py:350
+#: convert-ly.py:356
#, python-format
msgid ""
"%s: Invalid version string `%s' \n"
"`2.8.12'"
msgstr ""
+#: convert-ly.py:362
+#, python-format
+msgid "There was %d error."
+msgid_plural "There were %d errors."
+msgstr[0] ""
+msgstr[1] ""
+
#: etf2ly.py:1197
#, python-format
msgid "%s [OPTION]... ETF-FILE"
msgstr ""
#: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659
-#: main.cc:159 main.cc:171
+#: main.cc:123 main.cc:135
msgid "FILE"
msgstr ""
msgstr ""
#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
-#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:158
+#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:122
msgid "DIR"
msgstr ""
msgid "Unable to find input file %s"
msgstr ""
-#: website_post.py:123
+#: website_post.py:125
msgid "English"
msgstr ""
-#: website_post.py:126
+#: website_post.py:128
msgid "Other languages"
msgstr ""
-#: website_post.py:127
+#: website_post.py:129
#, python-format
msgid "About <a href=\"%s\">automatic language selection</a>."
msgstr ""
msgid "procedure or context-name expected for accidental rule, found %s"
msgstr ""
-#: accidental.cc:200
+#: accidental.cc:169
#, c-format
msgid "Could not find glyph-name for alteration %s"
msgstr ""
-#: accidental.cc:215
+#: accidental.cc:184
msgid "natural alteration glyph not found"
msgstr ""
msgid "removing this vertical group"
msgstr ""
-#: axis-group-interface.cc:668
+#: axis-group-interface.cc:686
+#, c-format
+msgid "\"%s\" is not a valid outside-staff-placement-directive"
+msgstr ""
+
+#: axis-group-interface.cc:756
msgid "an outside-staff object should have a direction, defaulting to up"
msgstr ""
msgid "no viable initial configuration found: may not find good beam slope"
msgstr ""
-#: beam.cc:181
+#: beam.cc:268
msgid "removing beam with no stems"
msgstr ""
msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
msgstr ""
-#. if we get to here, just put everything on one line
-#: constrained-breaking.cc:187 constrained-breaking.cc:205
+#: constrained-breaking.cc:187 constrained-breaking.cc:206
msgid "cannot find line breaking that satisfies constraints"
msgstr ""
msgid "unterminated extender"
msgstr ""
-#: flag.cc:113
+#: flag.cc:134
#, c-format
msgid "flag `%s' not found"
msgstr ""
-#: flag.cc:133
+#: flag.cc:154
#, c-format
msgid "flag stroke `%s' not found"
msgstr ""
msgid "Building font database..."
msgstr ""
-#: footnote-engraver.cc:110
+#: footnote-engraver.cc:87
msgid "Must be footnote-event."
msgstr ""
msgid "unterminated glissando"
msgstr ""
-#: global-context-scheme.cc:96 global-context-scheme.cc:114
+#: global-context-scheme.cc:95 global-context-scheme.cc:113
msgid "no music found in score"
msgstr ""
-#: global-context-scheme.cc:104
+#: global-context-scheme.cc:103
msgid "Interpreting music..."
msgstr ""
-#: global-context-scheme.cc:126
+#: global-context-scheme.cc:125
#, c-format
msgid "elapsed time: %.2f seconds"
msgstr ""
msgid "%d: %s"
msgstr ""
+#: grob.cc:478
+#, c-format
+msgid "ignored infinite %s-offset"
+msgstr ""
+
#: hairpin.cc:60
msgid "Asking for broken bound padding at a non-broken bound."
msgstr ""
-#: hairpin.cc:254
+#: hairpin.cc:256
msgid "decrescendo too small"
msgstr ""
msgid "type check for `%s' failed; value `%s' must be of type `%s'"
msgstr ""
-#: lily-lexer.cc:255
+#: lily-lexer.cc:246
msgid "include files are not allowed in safe mode"
msgstr ""
-#: lily-lexer.cc:282
+#: lily-lexer.cc:273
#, c-format
msgid "identifier name is a keyword: `%s'"
msgstr ""
-#: lily-lexer.cc:303 lily-lexer.cc:316
+#: lily-lexer.cc:294 lily-lexer.cc:307
#, c-format
msgid "%s:EOF"
msgstr ""
"include-string instead."
msgstr ""
-#: lily-parser.cc:109
+#: lily-parser.cc:108
msgid "Parsing..."
msgstr ""
-#: line-spanner.cc:373
-msgid "Line spanner's left point is to the right of its right point."
+#: lookup.cc:181
+#, c-format
+msgid "Not drawing a box with negative dimension, %.2f by %.2f."
msgstr ""
#: lyric-combine-music-iterator.cc:199
msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice."
msgstr ""
-#: main.cc:101
+#: main.cc:70
#, c-format
msgid ""
"This program is free software. It is covered by the GNU General Public\n"
"information.\n"
msgstr ""
-#: main.cc:107
+#: main.cc:76
msgid ""
" This program is free software; you can redistribute it and/or\n"
"modify it under the terms of the GNU General Public License as \n"
"Boston, MA 02111-1307, USA.\n"
msgstr ""
-#: main.cc:141
+#: main.cc:105
msgid "SYM[=VAL]"
msgstr ""
-#: main.cc:142
+#: main.cc:106
msgid ""
"set Scheme option SYM to VAL (default: #t).\n"
"Use -dhelp for help."
msgstr ""
-#: main.cc:146
+#: main.cc:110
msgid "EXPR"
msgstr ""
-#: main.cc:146
+#: main.cc:110
msgid "evaluate scheme code"
msgstr ""
#. Bug in option parser: --output =foe is taken as an abbreviation
#. for --output-format.
-#: main.cc:149
+#: main.cc:113
msgid "FORMATs"
msgstr ""
-#: main.cc:149
+#: main.cc:113
msgid "dump FORMAT,... Also as separate options:"
msgstr ""
-#: main.cc:150
+#: main.cc:114
msgid "generate PDF (default)"
msgstr ""
-#: main.cc:151
+#: main.cc:115
msgid "generate PNG"
msgstr ""
-#: main.cc:152
+#: main.cc:116
msgid "generate PostScript"
msgstr ""
-#: main.cc:155
+#: main.cc:119
msgid "FIELD"
msgstr ""
-#: main.cc:155
+#: main.cc:119
msgid ""
"dump header field FIELD to file\n"
"named BASENAME.FIELD"
msgstr ""
-#: main.cc:158
+#: main.cc:122
msgid "add DIR to search path"
msgstr ""
-#: main.cc:159
+#: main.cc:123
msgid "use FILE as init file"
msgstr ""
-#: main.cc:162
+#: main.cc:126
msgid "USER, GROUP, JAIL, DIR"
msgstr ""
-#: main.cc:162
+#: main.cc:126
msgid ""
"chroot to JAIL, become USER:GROUP\n"
"and cd into DIR"
msgstr ""
-#: main.cc:167
+#: main.cc:131
msgid ""
"print log messages according to LOGLEVEL. Possible values are:\n"
"NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
msgstr ""
-#: main.cc:171
+#: main.cc:135
msgid "write output to FILE (suffix will be added)"
msgstr ""
-#: main.cc:172
+#: main.cc:136
msgid "relocate using directory of lilypond program"
msgstr ""
-#: main.cc:173
+#: main.cc:137
msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
msgstr ""
-#: main.cc:175
+#: main.cc:139
msgid "be verbose (equivalent to loglevel=DEBUG)"
msgstr ""
#. Do not update the copyright years here, run `make grand-replace'
-#: main.cc:242
+#: main.cc:206
#, c-format
msgid ""
"Copyright (c) %s by\n"
msgstr ""
#. No version number or newline here. It confuses help2man.
-#: main.cc:269
+#: main.cc:233
#, c-format
msgid "Usage: %s [OPTION]... FILE..."
msgstr ""
-#: main.cc:271
+#: main.cc:235
msgid "Typeset music and/or produce MIDI from FILE."
msgstr ""
-#: main.cc:273
+#: main.cc:237
msgid "LilyPond produces beautiful music notation."
msgstr ""
-#: main.cc:275
+#: main.cc:239
#, c-format
msgid "For more information, see %s"
msgstr ""
-#: main.cc:277
+#: main.cc:241
msgid "Options:"
msgstr ""
-#: main.cc:331
+#: main.cc:295
#, c-format
msgid "expected %d arguments with jail, found: %u"
msgstr ""
-#: main.cc:345
+#: main.cc:309
#, c-format
msgid "no such user: %s"
msgstr ""
-#: main.cc:347
+#: main.cc:311
#, c-format
msgid "cannot get user id from user name: %s: %s"
msgstr ""
-#: main.cc:362
+#: main.cc:326
#, c-format
msgid "no such group: %s"
msgstr ""
-#: main.cc:364
+#: main.cc:328
#, c-format
msgid "cannot get group id from group name: %s: %s"
msgstr ""
-#: main.cc:372
+#: main.cc:336
#, c-format
msgid "cannot chroot to: %s: %s"
msgstr ""
-#: main.cc:379
+#: main.cc:343
#, c-format
msgid "cannot change group id to: %d: %s"
msgstr ""
-#: main.cc:385
+#: main.cc:349
#, c-format
msgid "cannot change user id to: %d: %s"
msgstr ""
-#: main.cc:391
+#: main.cc:355
#, c-format
msgid "cannot change working directory to: %s: %s"
msgstr ""
-#: main.cc:639
+#: main.cc:601
#, c-format
msgid "exception caught: %s"
msgstr ""
msgid "mark label must be a markup object"
msgstr ""
-#: mensural-ligature-engraver.cc:96
+#: mensural-ligature-engraver.cc:100
msgid "ligature with less than 2 heads -> skipping"
msgstr ""
-#: mensural-ligature-engraver.cc:123
+#: mensural-ligature-engraver.cc:127
msgid "cannot determine pitch of ligature primitive -> skipping"
msgstr ""
-#: mensural-ligature-engraver.cc:137
+#: mensural-ligature-engraver.cc:141
msgid "single note ligature - skipping"
msgstr ""
-#: mensural-ligature-engraver.cc:148
+#: mensural-ligature-engraver.cc:152
msgid "prime interval within ligature -> skipping"
msgstr ""
-#: mensural-ligature-engraver.cc:159
+#: mensural-ligature-engraver.cc:163
msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
msgstr ""
-#: mensural-ligature-engraver.cc:202
+#: mensural-ligature-engraver.cc:206
msgid "semibrevis must be followed by another one -> skipping"
msgstr ""
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:216
msgid ""
"semibreves can only appear at the beginning of a ligature,\n"
"and there may be only zero or two of them"
msgstr ""
-#: mensural-ligature-engraver.cc:232
+#: mensural-ligature-engraver.cc:236
msgid ""
"invalid ligatura ending:\n"
"when the last note is a descending brevis,\n"
"or the ligatura must be LB or SSB"
msgstr ""
-#: mensural-ligature-engraver.cc:387
+#: mensural-ligature-engraver.cc:396
msgid "unexpected case fall-through"
msgstr ""
msgid "placing below"
msgstr ""
-#: note-collision.cc:496
+#: note-collision.cc:497
msgid "ignoring too many clashing note columns"
msgstr ""
-#: note-column.cc:147
+#: note-column.cc:172
msgid "cannot have note heads and rests together on a stem"
msgstr ""
msgid "NoteEvent without pitch"
msgstr ""
-#: open-type-font.cc:44
+#: open-type-font.cc:45
#, c-format
msgid "cannot allocate %lu bytes"
msgstr ""
-#: open-type-font.cc:48
+#: open-type-font.cc:49
#, c-format
msgid "cannot load font table: %s"
msgstr ""
-#: open-type-font.cc:53
+#: open-type-font.cc:54
#, c-format
msgid "FreeType error: %s"
msgstr ""
-#: open-type-font.cc:110
+#: open-type-font.cc:111
#, c-format
msgid "unsupported font format: %s"
msgstr ""
-#: open-type-font.cc:112
+#: open-type-font.cc:113
#, c-format
msgid "error reading font file %s: %s"
msgstr ""
-#: open-type-font.cc:187
+#: open-type-font.cc:188
#, c-format
msgid "FT_Get_Glyph_Name () Freetype error: %s"
msgstr ""
-#: open-type-font.cc:318 pango-font.cc:189
+#: open-type-font.cc:336 pango-font.cc:256
#, c-format
msgid "FT_Get_Glyph_Name () error: %s"
msgstr ""
msgid "Finding the ideal number of pages..."
msgstr ""
-#: optimal-page-breaking.cc:85
+#: optimal-page-breaking.cc:92
msgid ""
"could not satisfy systems-per-page and page-count at the same time, ignoring "
"systems-per-page"
msgstr ""
-#: optimal-page-breaking.cc:105
+#: optimal-page-breaking.cc:112
msgid "Fitting music on 1 page..."
msgstr ""
-#: optimal-page-breaking.cc:107
+#: optimal-page-breaking.cc:114
#, c-format
msgid "Fitting music on %d pages..."
msgstr ""
-#: optimal-page-breaking.cc:109
+#: optimal-page-breaking.cc:116
#, c-format
msgid "Fitting music on %d or %d pages..."
msgstr ""
-#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:172
+#: optimal-page-breaking.cc:126 optimal-page-breaking.cc:179
#, c-format
msgid "trying %d systems"
msgstr ""
-#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:200
+#: optimal-page-breaking.cc:145 optimal-page-breaking.cc:207
#, c-format
msgid "best score for this sys-count: %f"
msgstr ""
-#: optimal-page-breaking.cc:207 page-turn-page-breaking.cc:248
+#: optimal-page-breaking.cc:214 page-turn-page-breaking.cc:248
#: paper-score.cc:162
msgid "Drawing systems..."
msgstr ""
msgid "\tprevious break: %d"
msgstr ""
-#: pango-font.cc:205
+#: pango-font.cc:245
+#, c-format
+msgid "no glyph for character U+%0X in font `%s'"
+msgstr ""
+
+#: pango-font.cc:272
#, c-format
msgid ""
"Glyph has no name, but font supports glyph naming.\n"
"Skipping glyph U+%0X, file %s"
msgstr ""
-#: pango-font.cc:242
+#: pango-font.cc:322
#, c-format
msgid "no PostScript font name for font `%s'"
msgstr ""
-#: pango-font.cc:291
+#: pango-font.cc:372
msgid "FreeType face has no PostScript font name"
msgstr ""
msgid "Relocation: framework_prefix=%s"
msgstr ""
-#: relocate.cc:186
+#: relocate.cc:172
#, c-format
msgid "Relocation: is absolute: argv0=%s\n"
msgstr ""
-#: relocate.cc:192
+#: relocate.cc:178
#, c-format
-msgid "Relocation: from cwd: argv0=%s\n"
+msgid "Relocation : from cwd: argv0=%s\n"
msgstr ""
-#: relocate.cc:208
+#: relocate.cc:194
#, c-format
msgid ""
"Relocation: from PATH=%s\n"
-"argv0=%s"
+"argv0=%s\n"
msgstr ""
-#: relocate.cc:235
+#: relocate.cc:220
msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
msgstr ""
-#: relocate.cc:360
+#: relocate.cc:345
#, c-format
msgid "Relocation file: %s"
msgstr ""
-#: relocate.cc:364 source-file.cc:65
+#: relocate.cc:349 source-file.cc:65
#, c-format
msgid "cannot open file: `%s'"
msgstr ""
-#: relocate.cc:394
+#: relocate.cc:379
#, c-format
msgid "Unknown relocation command %s"
msgstr ""
msgstr ""
#. FIXME:
-#: script-engraver.cc:113
+#: script-engraver.cc:115
msgid "do not know how to interpret articulation:"
msgstr ""
-#: script-engraver.cc:114
+#: script-engraver.cc:116
msgid " scheme encoding: "
msgstr ""
-#: skyline-pair.cc:131
+#: skyline-pair.cc:160
msgid "direction must not be CENTER in ly:skyline-pair::skyline"
msgstr ""
msgid "weird stem size, check for narrow beams"
msgstr ""
-#: system.cc:200
+#: system.cc:201
#, c-format
msgid "Element count %d"
msgstr ""
-#: system.cc:480
+#: system.cc:512
#, c-format
msgid "Grob count %d"
msgstr ""
#. TODO: Also print the arguments of the markup!
-#: text-interface.cc:129
+#: text-interface.cc:131
#, c-format
msgid "Cyclic markup detected: %s"
msgstr ""
#. TODO: Also print the arguments of the markup!
-#: text-interface.cc:142
+#: text-interface.cc:144
#, c-format
msgid "Markup depth exceeds maximal value of %d; Markup: %s"
msgstr ""
msgid "unterminated text spanner"
msgstr ""
-#: tie-engraver.cc:117
+#: tie-engraver.cc:116
msgid "unterminated tie"
msgstr ""
-#: tie-engraver.cc:348
+#: tie-engraver.cc:350
msgid "lonely tie"
msgstr ""
#. If there is no such symbol, we default to the numbered style.
#. (Here really with a warning!)
-#: time-signature.cc:122
+#: time-signature.cc:89
#, c-format
msgid "time signature symbol `%s' not found; reverting to numbered style"
msgstr ""
msgid "giving up"
msgstr ""
-#: parser.yy:161 parser.yy:175
+#: parser.yy:174 parser.yy:188 /home/phil/lilypond-git/lily/parser.yy:174
+#: /home/phil/lilypond-git/lily/parser.yy:188
msgid "Too much lookahead"
msgstr ""
-#: parser.yy:835 parser.yy:1284
+#: parser.yy:466 parser.yy:736 parser.yy:803
+#: /home/phil/lilypond-git/lily/parser.yy:466
+#: /home/phil/lilypond-git/lily/parser.yy:736
+#: /home/phil/lilypond-git/lily/parser.yy:803
+msgid "bad expression type"
+msgstr ""
+
+#: parser.yy:632 parser.yy:1106 /home/phil/lilypond-git/lily/parser.yy:632
+#: /home/phil/lilypond-git/lily/parser.yy:1106
msgid "not a context mod"
msgstr ""
-#: parser.yy:1027
+#: parser.yy:838 /home/phil/lilypond-git/lily/parser.yy:838
+msgid "score expected"
+msgstr ""
+
+#: parser.yy:854 /home/phil/lilypond-git/lily/parser.yy:854
msgid "\\paper cannot be used in \\score, use \\layout instead"
msgstr ""
-#: parser.yy:1051
+#: parser.yy:878 /home/phil/lilypond-git/lily/parser.yy:878
msgid "need \\paper for paper block"
msgstr ""
-#: parser.yy:1204
+#: parser.yy:1031 /home/phil/lilypond-git/lily/parser.yy:1031
msgid "Ignoring non-music expression"
msgstr ""
-#: parser.yy:2044
+#: parser.yy:1042 parser.yy:2352 /home/phil/lilypond-git/lily/parser.yy:1042
+#: /home/phil/lilypond-git/lily/parser.yy:2352
+msgid "music expected"
+msgstr ""
+
+#: parser.yy:1316 /home/phil/lilypond-git/lily/parser.yy:1316
+msgid "not a symbol"
+msgstr ""
+
+#: parser.yy:2049 parser.yy:2162 parser.yy:2175 parser.yy:2184
+#: /home/phil/lilypond-git/lily/parser.yy:2049
+#: /home/phil/lilypond-git/lily/parser.yy:2162
+#: /home/phil/lilypond-git/lily/parser.yy:2175
+#: /home/phil/lilypond-git/lily/parser.yy:2184
+msgid "bad grob property path"
+msgstr ""
+
+#: parser.yy:2142 /home/phil/lilypond-git/lily/parser.yy:2142
msgid "only \\consists and \\remove take non-string argument."
msgstr ""
-#: parser.yy:2057
-msgid "Grob name should be alphanumeric"
+#: parser.yy:2203 /home/phil/lilypond-git/lily/parser.yy:2203
+msgid "bad context property path"
+msgstr ""
+
+#: parser.yy:2296 parser.yy:2300 parser.yy:2318
+#: /home/phil/lilypond-git/lily/parser.yy:2296
+#: /home/phil/lilypond-git/lily/parser.yy:2300
+#: /home/phil/lilypond-git/lily/parser.yy:2318
+msgid "simple string expected"
msgstr ""
-#: parser.yy:2261
+#: parser.yy:2461 /home/phil/lilypond-git/lily/parser.yy:2461
msgid "not a rhythmic event"
msgstr ""
-#: parser.yy:2357 parser.yy:2362
+#: parser.yy:2557 parser.yy:2562 /home/phil/lilypond-git/lily/parser.yy:2557
+#: /home/phil/lilypond-git/lily/parser.yy:2562
msgid "have to be in Lyric mode for lyrics"
msgstr ""
-#: parser.yy:2477
+#: parser.yy:2677 /home/phil/lilypond-git/lily/parser.yy:2677
msgid "expecting string as script definition"
msgstr ""
-#: parser.yy:2637 parser.yy:2681
+#: parser.yy:2778 /home/phil/lilypond-git/lily/parser.yy:2778
+msgid "not an articulation"
+msgstr ""
+
+#: parser.yy:2850 parser.yy:2896 /home/phil/lilypond-git/lily/parser.yy:2850
+#: /home/phil/lilypond-git/lily/parser.yy:2896
#, c-format
msgid "not a duration: %d"
msgstr ""
-#: parser.yy:2800
+#: parser.yy:2913 /home/phil/lilypond-git/lily/parser.yy:2913
+msgid "bass number expected"
+msgstr ""
+
+#: parser.yy:3027 /home/phil/lilypond-git/lily/parser.yy:3027
msgid "have to be in Note mode for notes"
msgstr ""
-#: parser.yy:2855
+#: parser.yy:3086 /home/phil/lilypond-git/lily/parser.yy:3086
msgid "have to be in Chord mode for chords"
msgstr ""
-#: parser.yy:3115
+#: parser.yy:3321 /home/phil/lilypond-git/lily/parser.yy:3321
msgid "not a markup"
msgstr ""
-#: lexer.ll:218
+#: lexer.ll:209 /home/phil/lilypond-git/lily/lexer.ll:209
msgid "stray UTF-8 BOM encountered"
msgstr ""
-#: lexer.ll:221
+#: lexer.ll:212 /home/phil/lilypond-git/lily/lexer.ll:212
msgid "Skipping UTF-8 BOM"
msgstr ""
-#: lexer.ll:279
+#: lexer.ll:270 /home/phil/lilypond-git/lily/lexer.ll:270
#, c-format
msgid "Renaming input to: `%s'"
msgstr ""
-#: lexer.ll:296
+#: lexer.ll:287 /home/phil/lilypond-git/lily/lexer.ll:287
msgid "quoted string expected after \\version"
msgstr ""
-#: lexer.ll:300
+#: lexer.ll:291 /home/phil/lilypond-git/lily/lexer.ll:291
msgid "quoted string expected after \\sourcefilename"
msgstr ""
-#: lexer.ll:304
+#: lexer.ll:295 /home/phil/lilypond-git/lily/lexer.ll:295
msgid "integer expected after \\sourcefileline"
msgstr ""
-#: lexer.ll:327
+#: lexer.ll:319 /home/phil/lilypond-git/lily/lexer.ll:318
msgid "\\maininput not allowed outside init files"
msgstr ""
-#: lexer.ll:351
+#: lexer.ll:343 /home/phil/lilypond-git/lily/lexer.ll:342
#, c-format
msgid "wrong or undefined identifier: `%s'"
msgstr ""
-#: lexer.ll:377
+#: lexer.ll:369 /home/phil/lilypond-git/lily/lexer.ll:368
msgid "string expected after \\include"
msgstr ""
#. backup rule
-#: lexer.ll:387
+#: lexer.ll:379 /home/phil/lilypond-git/lily/lexer.ll:378
msgid "end quote missing"
msgstr ""
-#: lexer.ll:558
-msgid "Brace found at end of lyric. Did you forget a space?"
-msgstr ""
-
-#: lexer.ll:672
-msgid "Brace found at end of markup. Did you forget a space?"
-msgstr ""
-
-#: lexer.ll:684
+#: lexer.ll:691 /home/phil/lilypond-git/lily/lexer.ll:690
msgid "EOF found inside a comment"
msgstr ""
-#: lexer.ll:782
+#: lexer.ll:791 /home/phil/lilypond-git/lily/lexer.ll:792
#, c-format
msgid "invalid character: `%s'"
msgstr ""
-#: lexer.ll:903 lexer.ll:904
+#: lexer.ll:914 /home/phil/lilypond-git/lily/lexer.ll:916
#, c-format
msgid "unknown escaped string: `\\%s'"
msgstr ""
-#: lexer.ll:1186 lexer.ll:1187
+#: lexer.ll:1197 /home/phil/lilypond-git/lily/lexer.ll:1199
msgid "non-UTF-8 input"
msgstr ""
-#: lexer.ll:1230 lexer.ll:1231
+#: lexer.ll:1241 /home/phil/lilypond-git/lily/lexer.ll:1243
#, c-format
msgid "file too old: %s (oldest supported: %s)"
msgstr ""
-#: lexer.ll:1231 lexer.ll:1232
+#: lexer.ll:1242 /home/phil/lilypond-git/lily/lexer.ll:1244
msgid "consider updating the input with the convert-ly script"
msgstr ""
-#: lexer.ll:1237 lexer.ll:1238
+#: lexer.ll:1248 /home/phil/lilypond-git/lily/lexer.ll:1250
#, c-format
msgid "program too old: %s (file requires: %s)"
msgstr ""
msgid "missing stencil expression `~S'"
msgstr ""
+#: bar-line.scm:140
+#, scheme-format
+msgid "Bar glyph ~a not known. Ignoring."
+msgstr ""
+
+#: bar-line.scm:168
+#, scheme-format
+msgid ""
+"Annotation '~a' is allowed in the first argument of a bar line definition "
+"only."
+msgstr ""
+
+#: bar-line.scm:176
+#, scheme-format
+msgid ""
+"Replacement '~a' is allowed in the last argument of a bar line definition "
+"only."
+msgstr ""
+
+#: bar-line.scm:237
+#, scheme-format
+msgid ""
+"add-bar-glyph-print-procedure: glyph '~a' has to be a single ASCII character."
+msgstr ""
+
+#: bar-line.scm:808
+#, scheme-format
+msgid "No span bar glyph defined for bar glyph '~a'; ignoring."
+msgstr ""
+
#: chord-entry.scm:52
#, scheme-format
msgid "Spurious garbage following chord: ~A"
msgid "symbol ~S redefined"
msgstr ""
-#: define-event-classes.scm:67
+#: define-event-classes.scm:69
#, scheme-format
msgid "unknown parent class `~a'"
msgstr ""
msgid "not a valid duration string: ~a"
msgstr ""
-#: define-music-types.scm:765
+#: define-music-types.scm:770
#, scheme-format
msgid "symbol expected: ~S"
msgstr ""
-#: define-music-types.scm:768
+#: define-music-types.scm:773
#, scheme-format
msgid "cannot find music object: ~S"
msgstr ""
-#: define-music-types.scm:787
+#: define-music-types.scm:792
#, scheme-format
msgid "unknown repeat type `~S'"
msgstr ""
-#: define-music-types.scm:788
+#: define-music-types.scm:793
msgid "See define-music-types.scm for supported repeats"
msgstr ""
-#: define-note-names.scm:962
+#: define-note-names.scm:971
msgid "Select note names language."
msgstr ""
-#: define-note-names.scm:968
+#: define-note-names.scm:977
#, scheme-format
msgid "Using `~a' note names..."
msgstr ""
-#: define-note-names.scm:971
+#: define-note-names.scm:980
#, scheme-format
msgid "Could not find language `~a'. Ignoring."
msgstr ""
msgid "Error in beam quanting. Expected ~S 0, found ~S."
msgstr ""
-#: lily-library.scm:299
+#: lily-library.scm:305
msgid "Music unsuitable for context-mod"
msgstr ""
-#: lily-library.scm:349
+#: lily-library.scm:361
#, scheme-format
msgid "Cannot find context-def \\~a"
msgstr ""
-#: lily-library.scm:365
+#: lily-library.scm:377
msgid "Music unsuitable for output-def"
msgstr ""
-#: lily-library.scm:892
+#: lily-library.scm:904
msgid ""
"Find the index between @var{start} and @var{end} (an integer)\n"
"which produces the closest match to @var{target-val} if\n"
"applied to function @var{getter}."
msgstr ""
-#: lily-library.scm:966
+#: lily-library.scm:978
#, scheme-format
msgid "unknown unit: ~S"
msgstr ""
-#: lily-library.scm:991
+#: lily-library.scm:1003
#, scheme-format
msgid "no \\version statement found, please add~afor future compatibility"
msgstr ""
-#: lily-library.scm:997
+#: lily-library.scm:1009
msgid "old relative compatibility not used"
msgstr ""
-#: lily.scm:234
+#: lily.scm:63
+msgid "define-session used after session start"
+msgstr ""
+
+#: lily.scm:311
msgid "Using (ice-9 curried-definitions) module\n"
msgstr ""
-#: lily.scm:237
+#: lily.scm:314
msgid "Guile 1.8\n"
msgstr ""
-#: lily.scm:297
+#: lily.scm:373
#, scheme-format
msgid "cannot find: ~A"
msgstr ""
-#: lily.scm:708
+#: lily.scm:794
msgid "Success: compilation successfully completed"
msgstr ""
-#: lily.scm:709
+#: lily.scm:795
msgid "Compilation completed with warnings or errors"
msgstr ""
-#: lily.scm:771
+#: lily.scm:857
#, scheme-format
msgid "job ~a terminated with signal: ~a"
msgstr ""
-#: lily.scm:774
+#: lily.scm:860
#, scheme-format
msgid ""
"logfile ~a (exit ~a):\n"
"~a"
msgstr ""
-#: lily.scm:796 lily.scm:882
+#: lily.scm:882 lily.scm:971
#, scheme-format
msgid "failed files: ~S"
msgstr ""
-#: lily.scm:873
+#: lily.scm:962
#, scheme-format
msgid "Redirecting output to ~a..."
msgstr ""
-#: lily.scm:892 ps-to-png.scm:66
+#: lily.scm:981 ps-to-png.scm:66
#, scheme-format
msgid "Invoking `~a'...\n"
msgstr ""
msgid "invalid tremolo repeat count: ~a"
msgstr ""
-#: music-functions.scm:689
+#: music-functions.scm:459
+#, scheme-format
+msgid "bad grob property path ~a"
+msgstr ""
+
+#: music-functions.scm:765
msgid "Bad chord repetition"
msgstr ""
-#: music-functions.scm:724
+#: music-functions.scm:800
#, scheme-format
msgid "music expected: ~S"
msgstr ""
-#: music-functions.scm:1042
+#: music-functions.scm:1118
#, scheme-format
msgid "cannot find quoted music: `~S'"
msgstr ""
-#: music-functions.scm:1180
+#: music-functions.scm:1256
msgid "Add @var{octave-shift} to the octave of @var{pitch}."
msgstr ""
-#: music-functions.scm:1240
+#: music-functions.scm:1316
#, scheme-format
msgid "Unknown octaveness type: ~S "
msgstr ""
-#: music-functions.scm:1241
+#: music-functions.scm:1317
msgid "Defaulting to 'any-octave."
msgstr ""
-#: music-functions.scm:1578
+#: music-functions.scm:1662
#, scheme-format
msgid "unknown accidental style: ~S"
msgstr ""
-#: output-ps.scm:277 output-svg.scm:524
+#: output-ps.scm:278 output-svg.scm:524
#, scheme-format
msgid "unknown line-cap-style: ~S"
msgstr ""
-#: output-ps.scm:282 output-svg.scm:530
+#: output-ps.scm:283 output-svg.scm:530
#, scheme-format
msgid "unknown line-join-style: ~S"
msgstr ""
msgid "set-global-staff-size: not in toplevel scope"
msgstr ""
-#: paper.scm:315
+#: paper.scm:321
#, scheme-format
msgid "This is not a \\layout {} object, ~S"
msgstr ""
-#: paper.scm:327
+#: paper.scm:332
#, scheme-format
msgid "Unknown paper size: ~a"
msgstr ""
#. TODO: should raise (generic) exception with throw, and catch
#. that in parse-scm.cc
-#: paper.scm:342
+#: paper.scm:347
msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
msgstr ""
-#: parser-clef.scm:143 parser-clef.scm:183
+#: parser-clef.scm:164 parser-clef.scm:215
#, scheme-format
msgid "unknown clef type `~a'"
msgstr ""
-#: parser-clef.scm:144 parser-clef.scm:184
+#: parser-clef.scm:165 parser-clef.scm:216
#, scheme-format
msgid "supported clefs: ~a"
msgstr ""
msgid "assertion failed: ~S"
msgstr ""
-#: translation-functions.scm:359
+#: translation-functions.scm:377
#, scheme-format
msgid "Negative fret for pitch ~a on string ~a"
msgstr ""
-#: translation-functions.scm:362
+#: translation-functions.scm:380
#, scheme-format
msgid "Missing fret for pitch ~a on string ~a"
msgstr ""
-#: translation-functions.scm:413
+#: translation-functions.scm:423
#, scheme-format
msgid "No open string for pitch ~a"
msgstr ""
-#: translation-functions.scm:428 translation-functions.scm:440
+#: translation-functions.scm:438 translation-functions.scm:450
#, scheme-format
msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
msgstr ""
-#: translation-functions.scm:431
+#: translation-functions.scm:441
msgid "Ignoring string request and recalculating."
msgstr ""
-#: translation-functions.scm:443
+#: translation-functions.scm:453
msgid "Ignoring note in tablature."
msgstr ""
-#: translation-functions.scm:466
+#: translation-functions.scm:476
#, scheme-format
msgid "No string for pitch ~a (given frets ~a)"
msgstr ""
-#: translation-functions.scm:571
+#: translation-functions.scm:581
#, scheme-format
msgid ""
"No label for fret ~a (on string ~a);\n"
depth=../..
-EXTRA_DIST_FILES = $(call src-wildcard,*.py)
-
include $(depth)/make/stepmake.make
default:
"""
import re
import os
+import sys
import time
import operator
'out-www/examples',
'Documentation/topdocs',
'Documentation/bibliography',
- 'Documentation/out-www/THANKS',
'Documentation/out-www/DEDICATION',
'input/']
footer = '''
<div class="footer">
+<!-- This footer was autogenerated by %s -->
<p class="footer_version">
-%(footer_name_version)s
+%%(footer_name_version)s
</p>
<p class="footer_report">
-%(footer_report_links)s
+%%(footer_report_links)s
</p>
</div>
-'''
+''' % sys.argv[0]
web_footer = '''
<div class="footer">
+<!-- This footer was autogenerated by %s -->
</div>
-'''
+''' % sys.argv[0]
footer_name_version = _doc ('This page is for %(package_name)s-%(package_version)s (%(branch_str)s).')
# ugh, must not have "_doc" in strings because it is naively replaced with "_" in hacked gettext process
LANGUAGES_TEMPLATE = '''
<p id="languages">
- %(language_available)s
+<!-- These links were autogenerated by %s -->
+ %%(language_available)s
<br>
- %(browser_language)s
+ %%(browser_language)s
</p>
-'''
+''' % sys.argv[0]
html_re = re.compile ('(.*?)(?:[.]([^/.]*))?[.]html$')
import os
import copy
import shutil
-# TODO: We are using os.popen3, which has been deprecated since python 2.6. The
-# suggested replacement is the Popen function of the subprocess module.
-# Unfortunately, on windows this needs the msvcrt module, which doesn't seem
-# to be available in GUB?!?!?!
-# from subprocess import Popen, PIPE
+import subprocess
+import sys
progress = ly.progress
warning = ly.warning
debug (_ ("Running through filter `%s'") % cmd, True)
- # TODO: Use Popen once we resolve the problem with msvcrt in Windows:
- (stdin, stdout, stderr) = os.popen3 (cmd)
- # p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
- # (stdin, stdout, stderr) = (p.stdin, p.stdout, p.stderr)
+ closefds = True
+ if (sys.platform == "mingw32"):
+ closefds = False
+ p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=closefds)
+ (stdin, stdout, stderr) = (p.stdin, p.stdout, p.stderr)
stdin.write (input)
status = stdin.close ()
def conv (str):
return str
+@rule ((2, 17, 0), r"blank-*-force -> blank-*-penalty")
+def conv (str):
+ str = re.sub ('blank-page-force', 'blank-page-penalty', str)
+ str = re.sub ('blank-last-page-force', 'blank-last-page-penalty', str)
+ str = re.sub ('blank-after-score-page-force', 'blank-after-score-page-penalty', str)
+ return str
+
+
+@rule ((2, 17, 4), r"\shape Grob #offsets -> \shape #offsets Grob")
+def conv (str):
+ str = re.sub (r"\\shape(\s+(?:[a-zA-Z]+|" + matchstring + "))(" +
+ matcharg + ")", r"\\shape\2\1", str)
+ return str
+
+barstring=r"(\\bar|whichBar|defaultBarType|segnoType|doubleRepeatType|startRepeatType|endRepeatType|doubleRepeatSegnoType|startRepeatSegnoType|endRepeatSegnoType)(\s*[=]?\s*[#]?)"
+
+@rule ((2, 17, 5), r"New bar line interface")
+def conv(str):
+ str = re.sub (barstring + r'"\|:"', '\\1\\2".|:"', str)
+ str = re.sub (barstring + r'":\|"', '\\1\\2":|."', str)
+ str = re.sub (barstring + r'"\|\|:"', '\\1\\2".|:-||"', str)
+ str = re.sub (barstring + r'":\|:"', '\\1\\2":..:"', str)
+ str = re.sub (barstring + r'"\.\|\."', '\\1\\2".."', str)
+ str = re.sub (barstring + r'"\|S"', '\\1\\2"S-|"', str)
+ str = re.sub (barstring + r'"S\|"', '\\1\\2"S-S"', str)
+ str = re.sub (barstring + r'":\|S"', '\\1\\2":|.S"', str)
+ str = re.sub (barstring + r'":\|S\."', '\\1\\2":|.S-S"', str)
+ str = re.sub (barstring + r'"S\|:"', '\\1\\2"S.|:-S"', str)
+ str = re.sub (barstring + r'"\.S\|:"', '\\1\\2"S.|:"', str)
+ str = re.sub (barstring + r'":\|S\|:"', '\\1\\2":|.S.|:"', str)
+ str = re.sub (barstring + r'":\|S\.\|:"', '\\1\\2":|.S.|:-S"', str)
+ str = re.sub (barstring + r'":"', '\\1\\2";"', str)
+ str = re.sub (barstring + r'"\|s"', '\\1\\2"|-s"', str)
+ str = re.sub (barstring + r'"dashed"', '\\1\\2"!"', str)
+ str = re.sub (barstring + r'"kievan"', '\\1\\2"k"', str)
+ str = re.sub (barstring + r'"empty"', '\\1\\2"-"', str)
+ return str
+
+symbol_list = (r"#'(?:" + wordsyntax + r"|\(\s*(?:" + wordsyntax + r"\s+)*"
+ + wordsyntax + r"\s*\))")
+
+grob_path = r"(?:" + symbol_list + r"\s+)*" + symbol_list
+
+grob_spec = wordsyntax + r"(?:\s*\.\s*" + wordsyntax + r")?"
+
+def path_replace (m):
+ return m.group (1) + string.join (re.findall (wordsyntax, m.group (2)), ".")
+
+@rule ((2, 17, 6), r"""\accidentalStyle #'Context "style" -> \accidentalStyle Context.style
+\alterBroken "Context.grob" -> \alterBroken Context.grob
+\overrideProperty "Context.grob" -> \overrideProperty Context.grob
+\tweak Grob #'symbol -> \tweak Grob.symbol""")
+def conv (str):
+ def patrep (m):
+ def fn_path_replace (m):
+ x = string.join (re.findall (wordsyntax, m.group (2)), ".")
+ if x in ["TimeSignature", "KeySignature", "BarLine",
+ "Clef", "StaffSymbol", "OttavaBracket",
+ "LedgerLineSpanner"]:
+ x = "Staff." + x
+ return m.group (1) + x
+ if m.group (1):
+ return m.group (0)
+ x = m.group (2) + m.group (4)
+
+ if m.group (3):
+ x = x + re.sub (r"(\s*)(" + symbol_list + ")", fn_path_replace,
+ m.group (3))
+
+ if not m.group (5):
+ x = r"\single" + x
+ return x
+
+ str = re.sub (r'''(\\accidentalStyle\s+)#?"([-A-Za-z]+)"''',
+ r"\1\2", str)
+ str = re.sub (r'''(\\accidentalStyle\s+)#'([A-Za-z]+)\s+#?"?([-A-Za-z]+)"?''',
+ r"\1\2.\3", str)
+ str = re.sub (r'''(\\(?:alterBroken|overrideProperty)\s+)#?"([A-Za-z]+)\s*\.\s*([A-Za-z]+)"''',
+ r"\1\2.\3", str)
+ str = re.sub (r'''(\\tweak\s+)#?"?([A-Za-z]+)"?\s+?#'([-A-Za-z]+)''',
+ r"\1\2.\3", str)
+ str = re.sub (r'''(\\tweak\s+)#'([-A-Za-z]+)''',
+ r"\1\2", str)
+ str = re.sub ("(" + matchmarkup + ")|"
+ + r"(\\footnote(?:\s*"
+ + matchmarkup + ")?" + matcharg + ")(" + matcharg
+ + r")?(\s+" + matchmarkup + r")(\s+\\default)?",
+ patrep, str)
+ str = re.sub (r'''(\\alterBroken)(\s+[A-Za-z.]+)(''' + matcharg
+ + matcharg + ")", r"\1\3\2", str)
+ str = re.sub (r"(\\overrideProperty\s+)(" + grob_spec + r"\s+" + grob_path + ")",
+ path_replace, str)
+ str = re.sub (r"(\\(?:override|revert)\s+)(" + grob_spec + r"\s+" + grob_path + ")",
+ path_replace, str)
+ return str
# Guidelines to write rules (please keep this at the end of this file)
#
import gettext
t = gettext.translation ('lilypond', localedir)
_ = t.ugettext
+ ungettext = t.ungettext
except:
def _ (s):
return s
+ def ungettext (s, p, n):
+ if n == 1:
+ return s
+ return p
underscore = _
# Urg, Python 2.4 does not define stderr/stdout encoding
def format_description(self, description):
return description
+class NonEmptyOptionParser (optparse.OptionParser):
+ "A subclass of OptionParser that gobbles empty string arguments."
+
+ def parse_args (self, args=None, values=None):
+ options, args = optparse.OptionParser.parse_args (self, args, values)
+ return options, filter (None, args)
+
def get_option_parser (*args, **kwargs):
- p = optparse.OptionParser (*args, **kwargs)
+ p = NonEmptyOptionParser (*args, **kwargs)
p.formatter = NonDentedHeadingFormatter ()
p.formatter.set_parser (p)
return p
;;;; You should have received a copy of the GNU General Public License
;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-;; helper functions
+
+
+;; TODO:
+;; (1) Dashed bar lines may stick out above and below the staff lines
+;;
+;; (2) Dashed and dotted lines look ugly in combination with span bars
+;;
+;; (This was the case in the c++-version of (span) bar stuff)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; helper functions for staff and layout properties
+
+(define (calc-blot thickness extent grob)
+ "Calculate the blot diameter by taking @code{'rounded}
+and the dimensions of the extent into account."
+ (let* ((rounded (ly:grob-property grob 'rounded #f))
+ (blot (if rounded
+ (let ((blot-diameter (layout-blot-diameter grob))
+ (height (interval-length extent)))
+
+ (cond ((< thickness blot-diameter) thickness)
+ ((< height blot-diameter) height)
+ (else blot-diameter)))
+ 0)))
+
+ blot))
+
+(define (get-span-glyph bar-glyph)
+ "Get the corresponding span glyph from the @code{span-glyph-bar-alist}.
+Pad the string with @code{annotation-char}s to the length of the
+@var{bar-glyph} string."
+ (let ((span-glyph (assoc-get bar-glyph span-bar-glyph-alist bar-glyph)))
+
+ (if (string? span-glyph)
+ (set! span-glyph (string-pad-right
+ span-glyph
+ (string-length bar-glyph)
+ replacement-char)))
+ span-glyph))
(define (get-staff-symbol grob)
+ "Return the staff symbol corresponding to Grob @var{grob}."
(if (grob::has-interface grob 'staff-symbol-interface)
grob
(ly:grob-object grob 'staff-symbol)))
(define (layout-blot-diameter grob)
+ "Get the blot diameter of the @var{grob}'s corresponding layout."
(let* ((layout (ly:grob-layout grob))
- (blot (ly:output-def-lookup layout 'blot-diameter)))
+ (blot-diameter (ly:output-def-lookup layout 'blot-diameter)))
- blot))
+ blot-diameter))
(define (layout-line-thickness grob)
+ "Get the line thickness of the @var{grob}'s corresponding layout."
(let* ((layout (ly:grob-layout grob))
(line-thickness (ly:output-def-lookup layout 'line-thickness)))
line-thickness))
-(define (staff-symbol-line-count grob)
+(define (staff-symbol-line-count staff)
+ "Get or compute the number of lines of staff @var{staff}."
(let ((line-count 0))
- (if (ly:grob? grob)
- (let ((line-pos (ly:grob-property grob 'line-positions '())))
+ (if (ly:grob? staff)
+ (let ((line-pos (ly:grob-property staff 'line-positions '())))
(set! line-count (if (pair? line-pos)
(length line-pos)
- (ly:grob-property grob 'line-count 0)))))
+ (ly:grob-property staff 'line-count 0)))))
line-count))
iv))
(define (staff-symbol-line-positions grob)
+ "Get or compute the @code{'line-positions} list from @var{grob}."
(let ((line-pos (ly:grob-property grob 'line-positions '())))
(if (not (pair? line-pos))
(iota line-count)))))
line-pos))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; internal helper functions
+
+(define annotation-char #\-)
+(define replacement-char #\ )
+
+(define dummy-extent (cons -1 1))
+
+
+(define (glyph->stencil glyph grob extent)
+ "Return a stencil computed by the procedure associated with
+glyph @var{glyph}. The arguments @var{grob} and @var{extent} are
+mandatory to the procedures stored in @code{bar-glyph-print-procedures}."
+ (let ((proc (assoc-get glyph bar-glyph-print-procedures))
+ (stencil empty-stencil))
+
+ (if (procedure? proc)
+ (set! stencil (proc grob extent))
+ (ly:warning (_ "Bar glyph ~a not known. Ignoring.") glyph))
+ stencil))
+
+(define (string->string-list str)
+ "Convert a string into a list of strings with length 1.
+@code{"aBc"} will be converted to @code{("a" "B" "c")}.
+An empty string will be converted to a list containing @code{""}."
+ (if (and (string? str)
+ (not (zero? (string-length str))))
+ (map (lambda (s)
+ (string s))
+ (string->list str))
+ (list "")))
+
+(define (strip-string-annotation str)
+ "Strip annotations starting with and including the
+annotation char from string @var{str}."
+ (let ((pos (string-index str annotation-char)))
+
+ (if pos
+ (substring str 0 pos)
+ str)))
+
+(define (check-for-annotation str)
+ "Check whether the annotation char is present in string @var{str}."
+ (if (string? str)
+ (if (string-index str annotation-char)
+ (ly:warning
+ (_ "Annotation '~a' is allowed in the first argument of a bar line definition only.")
+ str))))
+
+(define (check-for-replacement str)
+ "Check whether the replacement char is present in string @var{str}."
+ (if (string? str)
+ (if (string-index str replacement-char)
+ (ly:warning
+ (_ "Replacement '~a' is allowed in the last argument of a bar line definition only.")
+ str))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; functions used by external routines
(define-public (span-bar::notify-grobs-of-my-existence grob)
+ "Set the @code{'has-span-bar} property for all elements of Grob @var{grob}."
(let* ((elts (ly:grob-array->list (ly:grob-object grob 'elements)))
(sorted-elts (sort elts ly:grob-vertical<?))
(last-pos (1- (length sorted-elts)))
(set! idx (1+ idx)))
sorted-elts)))
-;; How should a bar line behave at a break?
-;; the following alist has the form
-;; ( unbroken-bar-glyph . ( bar-glyph-at-end-of-line . bar-glyph-at-begin-of-line ))
-
-(define bar-glyph-alist
- '((":|:" . (":|" . "|:"))
- (":|.|:" . (":|" . "|:"))
- (":|.:" . (":|" . "|:"))
- ("||:" . ("||" . "|:"))
- ("dashed" . ("dashed" . '()))
- ("|" . ("|" . ()))
- ("|s" . (() . "|"))
- ("|:" . ("|" . "|:"))
- ("|." . ("|." . ()))
-
- ;; hmm... should we end with a bar line here?
- (".|" . ("|" . ".|"))
- (":|" . (":|" . ()))
- ("||" . ("||" . ()))
- (".|." . (".|." . ()))
- ("|.|" . ("|.|" . ()))
- ("" . ("" . ""))
- (":" . (":" . ""))
- ("." . ("." . ()))
- ("'" . ("'" . ()))
- ("empty" . (() . ()))
- ("brace" . (() . "brace"))
- ("bracket" . (() . "bracket"))
-
- ;; segno bar lines
- ("S" . ("||" . "S"))
- ("|S" . ("|" . "S"))
- ("S|" . ("S" . ()))
- (":|S" . (":|" . "S"))
- (":|S." . (":|S" . ()))
- ("S|:" . ("S" . "|:"))
- (".S|:" . ("|" . "S|:"))
- (":|S|:" . (":|" . "S|:"))
- (":|S.|:" . (":|S" . "|:"))
-
- ;; ancient bar lines
- ("kievan" . ("kievan" . ""))))
-
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Line break decisions.
+
+(define-public (define-bar-line bar-glyph eol-glyph bol-glyph span-glyph)
+ "Define a bar glyph @var{bar-glyph} and its substitute at the end of a line
+(@var{eol-glyph}), at the beginning of a new line (@var{bol-glyph})
+and as a span bar (@var{span-glyph}) respectively."
+ ;; the last argument may not include annotations
+ (check-for-annotation span-glyph)
+ ;; only the last argument may call for replacements
+ (for-each (lambda (s)
+ (check-for-replacement s))
+ (list bar-glyph eol-glyph bol-glyph))
+ ;; the bar-glyph-alist has entries like
+ ;; (bar-glyph . ( eol-glyph . bol-glyph))
+ (set! bar-glyph-alist
+ (acons bar-glyph (cons eol-glyph bol-glyph) bar-glyph-alist))
+
+ ;; the span-bar-glyph-alist has entries like
+ ;; (bar-glyph . span-glyph)
+ (set! span-bar-glyph-alist
+ (acons bar-glyph span-glyph span-bar-glyph-alist)))
+
+(define-session bar-glyph-alist '())
+
+(define-session span-bar-glyph-alist '())
+
+(define-public (add-bar-glyph-print-procedure glyph proc)
+ "Specify the single glyph @var{glyph} that calls print procedure @var{proc}.
+The procedure @var{proc} has to be defined in the form
+@code{(make-...-bar-line grob extent)} even if the @var{extent}
+is not used within the routine."
+ (if (or (not (string? glyph))
+ (> (string-length glyph) 1))
+ (ly:warning
+ (_ "add-bar-glyph-print-procedure: glyph '~a' has to be a single ASCII character.")
+ glyph)
+ (set! bar-glyph-print-procedures
+ (acons glyph proc bar-glyph-print-procedures))))
+
+(define-session bar-glyph-print-procedures `())
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; drawing functions for various bar line types
+;; to include them and other user-defined functions,
+;; all of them have the form
+;; (make-...-bar-line grob extent)
+;; even if the extent is not used.
(define (make-empty-bar-line grob extent)
+ "Draw an empty bar line."
(ly:make-stencil "" (cons 0 0) extent))
-(define (make-simple-bar-line grob width extent rounded)
- (let ((blot (if rounded
- (layout-blot-diameter grob)
- 0)))
+(define (make-simple-bar-line grob extent)
+ "Draw a simple bar line."
+ (let* ((line-thickness (layout-line-thickness grob))
+ (thickness (* (ly:grob-property grob 'hair-thickness 1)
+ line-thickness))
+ (blot (calc-blot thickness extent grob))
+ (extent (bar-line::widen-bar-extent-on-span grob extent)))
+
+ (ly:round-filled-box (cons 0 thickness)
+ extent
+ blot)))
- (ly:round-filled-box (cons 0 width)
+(define (make-thick-bar-line grob extent)
+ "Draw a thick bar line."
+ (let* ((line-thickness (layout-line-thickness grob))
+ (thickness (* (ly:grob-property grob 'thick-thickness 1)
+ line-thickness))
+ (blot (calc-blot thickness extent grob))
+ (extent (bar-line::widen-bar-extent-on-span grob extent)))
+
+ (ly:round-filled-box (cons 0 thickness)
extent
blot)))
-(define (make-tick-bar-line grob height rounded)
- (let ((half-staff (* 1/2 (ly:staff-symbol-staff-space grob)))
- (staff-line-thickness (ly:staff-symbol-line-thickness grob))
- (blot (if rounded
- (layout-blot-diameter grob)
- 0)))
+(define (make-tick-bar-line grob extent)
+ "Draw a tick bar line."
+ (let* ((half-staff (* 1/2 (ly:staff-symbol-staff-space grob)))
+ (staff-line-thickness (ly:staff-symbol-line-thickness grob))
+ (height (interval-end extent))
+ (blot (calc-blot staff-line-thickness extent grob)))
- (ly:round-filled-box (cons 0 staff-line-thickness)
- (cons (- height half-staff) (+ height half-staff))
- blot)))
+ (ly:round-filled-box (cons 0 staff-line-thickness)
+ (cons (- height half-staff) (+ height half-staff))
+ blot)))
-(define (make-colon-bar-line grob)
+(define (make-colon-bar-line grob extent)
+ "Draw repeat dots."
(let* ((staff-space (ly:staff-symbol-staff-space grob))
(line-thickness (ly:staff-symbol-line-thickness grob))
(dot (ly:font-get-glyph (ly:grob-default-font grob) "dots.dot"))
(/ staff-space 2)) Y)))
stencil)))
+
(define (make-dotted-bar-line grob extent)
+ "Draw a dotted bar line."
(let* ((position (round (* (interval-end extent) 2)))
(correction (if (even? position) 0.5 0.0))
(dot (ly:font-get-glyph (ly:grob-default-font grob) "dots.dot"))
(add-stencils! empty-stencil stil-list)))
-(define (make-dashed-bar-line grob extent thickness)
+(define (make-dashed-bar-line grob extent)
+ "Draw a dashed bar line."
(let* ((height (interval-length extent))
(staff-symbol (get-staff-symbol grob))
(staff-space (ly:staff-symbol-staff-space grob))
(line-thickness (layout-line-thickness grob))
+ (thickness (* (ly:grob-property grob 'hair-thickness 1)
+ line-thickness))
(dash-size (- 1.0 (ly:grob-property grob 'gap 0.3)))
(line-count (staff-symbol-line-count staff-symbol)))
stencil)
(let* ((dashes (/ height staff-space))
(total-dash-size (/ height dashes))
- (factor (/ (- dash-size thickness) staff-space)))
-
- (ly:stencil-translate-axis
- (ly:make-stencil (list 'dashed-line
- thickness
- (* factor total-dash-size)
- (* (- 1 factor) total-dash-size)
- 0
- height
- (* factor total-dash-size 0.5))
- (cons 0 thickness)
- (cons 0 height))
- (interval-start extent)
- Y)))))
-
-(define (make-segno-bar-line grob glyph extent rounded)
+ (factor (/ (- dash-size thickness) staff-space))
+ (stencil (ly:stencil-translate-axis
+ (ly:make-stencil (list 'dashed-line
+ thickness
+ (* factor total-dash-size)
+ (* (- 1 factor) total-dash-size)
+ 0
+ height
+ (* factor total-dash-size 0.5))
+ (cons (/ thickness -2) (/ thickness 2))
+ (cons 0 height))
+ (interval-start extent)
+ Y)))
+
+ (ly:stencil-translate-axis stencil (/ thickness 2) X)))))
+
+
+(define ((make-segno-bar-line show-segno) grob extent)
+ "Draw a segno bar line. If @var{show-segno} is set to @code{#t},
+the segno sign is drawn over the double bar line; otherwise, it
+draws the span bar variant, i.e. without the segno sign."
(let* ((line-thickness (layout-line-thickness grob))
- (kern (* (ly:grob-property grob 'kern 1) line-thickness))
(thinkern (* (ly:grob-property grob 'thin-kern 1) line-thickness))
- (hair (* (ly:grob-property grob 'hair-thickness 1) line-thickness))
- (fatline (* (ly:grob-property grob 'thick-thickness 1) line-thickness))
- (thin-stil (make-simple-bar-line grob hair extent rounded))
- (thick-stil (make-simple-bar-line grob fatline extent rounded))
- (colon-stil (make-colon-bar-line grob))
- (segno-stil (ly:stencil-add
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- '() X LEFT thin-stil thinkern)
- X RIGHT thin-stil thinkern)
- (ly:font-get-glyph (ly:grob-default-font grob) "scripts.varsegno")))
- (glyph (cond
- ((string=? glyph "|S") "S")
- ((string=? glyph "S|") "S")
- (else glyph)))
- (stencil (cond
- ((or (string=? glyph "S|:")
- (string=? glyph ".S|:"))
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- thick-stil X RIGHT thin-stil kern)
- X RIGHT colon-stil kern)
- X LEFT segno-stil thinkern))
- ((or (string=? glyph ":|S")
- (string=? glyph ":|S."))
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- thick-stil X LEFT thin-stil kern)
- X LEFT colon-stil kern)
- X RIGHT segno-stil thinkern))
- ((or (string=? glyph ":|S|:")
- (string=? glyph ":|S.|:"))
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- thick-stil X LEFT thin-stil kern)
- X LEFT colon-stil kern)
- X RIGHT segno-stil thinkern)
- X RIGHT thick-stil thinkern)
- X RIGHT thin-stil kern)
- X RIGHT colon-stil kern))
- ((string=? glyph "|._.|")
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- thick-stil X LEFT thin-stil kern)
- X RIGHT thick-stil (+ (interval-length
- (ly:stencil-extent segno-stil X))
- (* 2 thinkern)))
- X RIGHT thin-stil kern))
- (else segno-stil))))
+ (thin-stil (make-simple-bar-line grob extent))
+ (double-line-stil (ly:stencil-combine-at-edge
+ thin-stil
+ X
+ LEFT
+ thin-stil
+ thinkern))
+ (segno (ly:font-get-glyph (ly:grob-default-font grob)
+ "scripts.varsegno"))
+ (stencil (ly:stencil-add
+ (if show-segno
+ segno
+ (ly:make-stencil
+ ""
+ (ly:stencil-extent segno X)
+ (cons 0 0)))
+ (ly:stencil-translate-axis
+ double-line-stil
+ (* 1/2 thinkern)
+ X))))
stencil))
-(define (make-kievan-bar-line grob)
+(define (make-kievan-bar-line grob extent)
+ "Draw a kievan bar line."
(let* ((font (ly:grob-default-font grob))
(stencil (stencil-whiteout
(ly:font-get-glyph font "scripts.barline.kievan"))))
- ;; the kievan bar line has mo staff lines underneath,
- ;; so we whiteout them and move ithe grob to a higher layer
+ ;; the kievan bar line has no staff lines underneath,
+ ;; so we whiteout them and move the grob to a higher layer
(ly:grob-set-property! grob 'layer 1)
stencil))
+(define ((make-bracket-bar-line dir) grob extent)
+ "Draw a bracket-style bar line. If @var{dir} is set to @code{LEFT}, the
+opening bracket will be drawn, for @code{RIGHT} we get the closing bracket."
+ (let* ((thick-stil (make-thick-bar-line grob extent))
+ (brackettips-up (ly:font-get-glyph (ly:grob-default-font grob)
+ "brackettips.up"))
+ (brackettips-down (ly:font-get-glyph (ly:grob-default-font grob)
+ "brackettips.down"))
+ ;; the x-extent of the brackettips must not be taken into account
+ ;; for bar line constructs like "[|:", so we set new bounds:
+ (tip-up-stil (ly:make-stencil (ly:stencil-expr brackettips-up)
+ (cons 0 0)
+ (ly:stencil-extent brackettips-up Y)))
+ (tip-down-stil (ly:make-stencil (ly:stencil-expr brackettips-down)
+ (cons 0 0)
+ (ly:stencil-extent brackettips-down Y)))
+ (stencil (ly:stencil-add
+ thick-stil
+ (ly:stencil-translate-axis tip-up-stil
+ (interval-end extent)
+ Y)
+ (ly:stencil-translate-axis tip-down-stil
+ (interval-start extent)
+ Y))))
+
+ (if (eq? dir LEFT)
+ stencil
+ (ly:stencil-scale stencil -1 1))))
+
+(define ((make-spacer-bar-line glyph) grob extent)
+ "Draw an invisible bar line which has the same dimensions as the one
+drawn by the procedure associated with glyph @var{glyph}."
+ (let* ((stil (glyph->stencil glyph grob extent))
+ (stil-x-extent (ly:stencil-extent stil X)))
+
+ (ly:make-stencil "" stil-x-extent extent)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; bar line callbacks
(define-public (ly:bar-line::calc-bar-extent grob)
(staff-extent (cons 0 0)))
(if (ly:grob? staff-symbol)
- (let* ((bar-line-color (ly:grob-property grob 'color))
- (staff-color (ly:grob-property staff-symbol 'color))
- (staff-line-thickness (ly:staff-symbol-line-thickness grob))
- (staff-space (ly:staff-symbol-staff-space grob)))
-
- (set! staff-extent (ly:staff-symbol::height staff-symbol))
-
- (if (zero? staff-space)
- (set! staff-space 1.0))
-
- (if (< (interval-length staff-extent) staff-space)
- ;; staff is too small (perhaps consists of a single line);
- ;; extend the bar line to make it visible
- (set! staff-extent
- (interval-widen staff-extent staff-space))
- ;; Due to rounding problems, bar lines extending to the outermost edges
- ;; of the staff lines appear wrongly in on-screen display
- ;; (and, to a lesser extent, in print) - they stick out a pixel.
- ;; The solution is to extend bar lines only to the middle
- ;; of the staff line - unless they have different colors,
- ;; when it would be undesirable.
- ;;
- ;; This reduction should not influence whether bar is to be
- ;; expanded later, so length is not updated on purpose.
- (if (eq? bar-line-color staff-color)
- (set! staff-extent
- (interval-widen staff-extent
- (* -1/2 staff-line-thickness)))))))
+ (let ((bar-line-color (ly:grob-property grob 'color))
+ (staff-color (ly:grob-property staff-symbol 'color))
+ (half-staff-line-thickness (/ (ly:staff-symbol-line-thickness grob) 2))
+ (staff-space (ly:staff-symbol-staff-space grob)))
+
+ (set! staff-extent (ly:staff-symbol::height staff-symbol))
+
+ (if (zero? staff-space)
+ (set! staff-space 1.0))
+
+ (if (< (interval-length staff-extent) staff-space)
+ ;; staff is too small (perhaps consists of a single line);
+ ;; extend the bar line to make it visible
+ (set! staff-extent
+ (interval-widen staff-extent staff-space))
+ ;; Due to rounding problems, bar lines extending to the outermost edges
+ ;; of the staff lines appear wrongly in on-screen display
+ ;; (and, to a lesser extent, in print) - they stick out a pixel.
+ ;; The solution is to extend bar lines only to the middle
+ ;; of the staff line - unless they have different colors,
+ ;; when it would be undesirable.
+ ;;
+ ;; This reduction should not influence whether the bar is to be
+ ;; expanded later, so length is not updated on purpose.
+ (if (eq? bar-line-color staff-color)
+ (set! staff-extent
+ (interval-widen staff-extent
+ (- half-staff-line-thickness)))))))
staff-extent))
+;; this function may come in handy when defining new bar line glyphs, so
+;; we make it public.
+;; This code should not be included in ly:bar-line::calc-bar-extent, because
+;; this may confuse the drawing functions for dashed and dotted bar lines.
+(define-public (bar-line::widen-bar-extent-on-span grob extent)
+ "Widens the bar line @var{extent} towards span bars adjacent to grob @var{grob}."
+ (let ((staff-symbol (get-staff-symbol grob))
+ (has-span-bar (ly:grob-property grob 'has-span-bar #f)))
+
+ (if (and (ly:grob? staff-symbol)
+ (pair? has-span-bar))
+ (let ((bar-line-color (ly:grob-property grob 'color))
+ (staff-color (ly:grob-property staff-symbol 'color))
+ (half-staff-line-thickness (/ (ly:staff-symbol-line-thickness grob) 2)))
+ (if (eq? bar-line-color staff-color)
+ ;; if the colors are equal, ly:bar-line::calc-bar-extent has
+ ;; shortened the bar line extent by a half-staff-line-thickness
+ ;; this is reverted on the interval bounds where span bars appear:
+ (begin
+ (and (ly:grob? (car has-span-bar))
+ (set! extent (cons (- (car extent) half-staff-line-thickness)
+ (cdr extent))))
+ (and (ly:grob? (cdr has-span-bar))
+ (set! extent (cons (car extent)
+ (+ (cdr extent) half-staff-line-thickness))))))))
+ extent))
+
(define (bar-line::bar-y-extent grob refpoint)
+ "Compute the y-extent of the bar line relative to @var{refpoint}."
(let* ((extent (ly:grob-property grob 'bar-extent '(0 . 0)))
(rel-y (ly:grob-relative-coordinate grob refpoint Y))
(y-extent (coord-translate extent rel-y)))
y-extent))
(define-public (ly:bar-line::print grob)
- (let ((glyph (ly:grob-property grob 'glyph-name))
+ "The print routine for bar lines."
+ (let ((glyph-name (ly:grob-property grob 'glyph-name))
(extent (ly:grob-property grob 'bar-extent '(0 . 0))))
- (if (and (not (eq? glyph '()))
+ (if (and glyph-name
(> (interval-length extent) 0))
- (bar-line::compound-bar-line grob glyph extent #f)
+ (bar-line::compound-bar-line grob glyph-name extent)
#f)))
-(define-public (bar-line::compound-bar-line grob glyph extent rounded)
+(define-public (bar-line::compound-bar-line grob bar-glyph extent)
+ "Build the bar line stencil."
(let* ((line-thickness (layout-line-thickness grob))
- (height (interval-length extent))
(kern (* (ly:grob-property grob 'kern 1) line-thickness))
- (thinkern (* (ly:grob-property grob 'thin-kern 1) line-thickness))
- (hair (* (ly:grob-property grob 'hair-thickness 1) line-thickness))
- (fatline (* (ly:grob-property grob 'thick-thickness 1) line-thickness))
- (thin-stil (make-simple-bar-line grob hair extent rounded))
- (thick-stil (make-simple-bar-line grob fatline extent rounded))
- (colon-stil (make-colon-bar-line grob))
- (glyph (cond
- ((not glyph) "")
- ((string=? glyph "||:") "|:")
- ;; bar-line::compound-bar-line is called only if
- ;; height > 0, but just in case ...
- ((and (string=? glyph ":|")
- (zero? height)) "|.")
- ((and (string=? glyph "|:")
- (zero? height)) ".|")
- (else glyph)))
- (stencil (cond
- ((string=? glyph "|") thin-stil)
- ((string=? glyph ".") thick-stil)
- ((string=? glyph "||")
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- '() X LEFT thin-stil thinkern)
- X RIGHT thin-stil thinkern))
- ((string=? glyph "|.")
- (ly:stencil-combine-at-edge
- thick-stil X LEFT thin-stil kern))
- ((string=? glyph ".|")
- (ly:stencil-combine-at-edge
- thick-stil X RIGHT thin-stil kern))
- ((string=? glyph "|:")
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- thick-stil X RIGHT thin-stil kern)
- X RIGHT colon-stil kern))
- ((string=? glyph ":|")
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- thick-stil X LEFT thin-stil kern)
- X LEFT colon-stil kern))
- ((string=? glyph ":|:")
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- '() X LEFT thick-stil thinkern)
- X LEFT colon-stil kern)
- X RIGHT thick-stil kern)
- X RIGHT colon-stil kern))
- ((string=? glyph ":|.|:")
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- thick-stil X LEFT thin-stil kern)
- X LEFT colon-stil kern)
- X RIGHT thin-stil kern)
- X RIGHT colon-stil kern))
- ((string=? glyph ":|.:")
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- thick-stil X LEFT thin-stil kern)
- X LEFT colon-stil kern)
- X RIGHT colon-stil kern))
- ((string=? glyph ".|.")
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- '() X LEFT thick-stil thinkern)
- X RIGHT thick-stil kern))
- ((string=? glyph "|.|")
- (ly:stencil-combine-at-edge
- (ly:stencil-combine-at-edge
- thick-stil X LEFT thin-stil kern)
- X RIGHT thin-stil kern))
- ((string=? glyph ":")
- (make-dotted-bar-line grob extent))
- ((or (string=? glyph "|._.|")
- (string-contains glyph "S"))
- (make-segno-bar-line grob glyph extent rounded))
- ((string=? glyph "'")
- (make-tick-bar-line grob (interval-end extent) rounded))
- ((string=? glyph "dashed")
- (make-dashed-bar-line grob extent hair))
- ((string=? glyph "kievan")
- (make-kievan-bar-line grob))
- (else (make-empty-bar-line grob extent)))))
- stencil))
+ (bar-glyph-list (string->string-list
+ (strip-string-annotation bar-glyph)))
+ (span-glyph (get-span-glyph bar-glyph))
+ (span-glyph-list (string->string-list span-glyph))
+ (neg-stencil empty-stencil)
+ (stencil empty-stencil)
+ (is-first-neg-stencil #t)
+ (is-first-stencil #t))
+
+ ;; We build up two separate stencils first:
+ ;; (1) the neg-stencil is built from all glyphs that have
+ ;; a replacement-char in the span bar
+ ;; (2) the main stencil is built from all remaining glyphs
+ ;;
+ ;; Afterwards the neg-stencil is attached left to the
+ ;; stencil; this ensures that the main stencil starts
+ ;; at x = 0.
+ ;;
+ ;; For both routines holds:
+ ;; we stack the stencils obtained by the corresponding
+ ;; single glyphs with spacing 'kern' except for the
+ ;; first stencil
+ ;; (Thanks to Harm who came up with this idea!)
+ (for-each (lambda (bar span)
+ (if (and (string=? span (string replacement-char))
+ is-first-stencil)
+ (begin
+ (set! neg-stencil
+ (ly:stencil-combine-at-edge
+ neg-stencil
+ X
+ RIGHT
+ (glyph->stencil bar grob extent)
+ (if is-first-neg-stencil 0 kern)))
+ (set! is-first-neg-stencil #f))
+ (begin
+ (set! stencil
+ (ly:stencil-combine-at-edge
+ stencil
+ X
+ RIGHT
+ (glyph->stencil bar grob extent)
+ (if is-first-stencil 0 kern)))
+ (set! is-first-stencil #f))))
+ bar-glyph-list span-glyph-list)
+ ;; if we have a non-empty neg-stencil,
+ ;; we attach it to the left side of the stencil
+ (and (not is-first-neg-stencil)
+ (set! stencil
+ (ly:stencil-combine-at-edge
+ stencil
+ X
+ LEFT
+ neg-stencil
+ kern)))
+ stencil))
(define-public (ly:bar-line::calc-anchor grob)
- (let* ((line-thickness (layout-line-thickness grob))
- (kern (* (ly:grob-property grob 'kern 1) line-thickness))
- (glyph (ly:grob-property grob 'glyph-name ""))
+ "Calculate the anchor position of a bar line. The anchor is used for
+the correct placement of bar numbers etc."
+ (let* ((bar-glyph (ly:grob-property grob 'glyph-name ""))
+ (bar-glyph-list (string->string-list (strip-string-annotation bar-glyph)))
+ (span-glyph (assoc-get bar-glyph span-bar-glyph-alist bar-glyph))
(x-extent (ly:grob-extent grob grob X))
- (dot-width (+ (interval-length
- (ly:stencil-extent
- (ly:font-get-glyph
- (ly:grob-default-font grob)
- "dots.dot")
- X))
- kern))
(anchor 0.0))
- (if (> (interval-length x-extent) 0)
- (begin
- (set! anchor (interval-center x-extent))
- (cond ((string=? glyph "|:")
- (set! anchor (+ anchor (/ dot-width -2.0))))
- ((string=? glyph ":|")
- (set! anchor (+ anchor (/ dot-width 2.0)))))))
- anchor))
+ (and (> (interval-length x-extent) 0)
+ (if (or (= (length bar-glyph-list) 1)
+ (string=? bar-glyph span-glyph)
+ (string=? span-glyph ""))
+ ;; We use the x-extent of the stencil if either
+ ;; - we have a single bar-glyph
+ ;; - bar-glyph and span-glyph are identical
+ ;; - we have no span-glyph
+ (set! anchor (interval-center x-extent))
+ ;; If the conditions above do not hold,the anchor is the
+ ;; center of the corresponding span bar stencil extent
+ (set! anchor (interval-center
+ (ly:stencil-extent
+ (span-bar::compound-bar-line grob bar-glyph dummy-extent)
+ X)))))
+ anchor))
(define-public (bar-line::calc-glyph-name grob)
+ "Determine the @code{glyph-name} of the bar line depending on the
+line break status."
(let* ((glyph (ly:grob-property grob 'glyph))
(dir (ly:item-break-dir grob))
(result (assoc-get glyph bar-glyph-alist))
glyph-name))
(define-public (bar-line::calc-break-visibility grob)
+ "Calculate the visibility of a bar line at line breaks."
(let* ((glyph (ly:grob-property grob 'glyph))
(result (assoc-get glyph bar-glyph-alist)))
(vector (string? (car result)) #t (string? (cdr result)))
all-invisible)))
-;; which span bar belongs to a bar line?
-
-(define-public span-bar-glyph-alist
- '(("|:" . ".|")
- ("||:" . ".|")
- (":|" . "|.")
- (":|.:" . "|.")
- (":|:" . ".|.")
- (":|.|:" . "|.|")
- (":|.|" . "|.")
- ("S" . "||" )
- ("S|" . "||")
- ("|S" . "||")
- ("S|:" . ".|")
- (".S|:" . ".|")
- (":|S" . "|.")
- (":|S." . "|.")
- (":|S|:" . "|._.|")
- (":|S.|:" . "|._.|")
- ("kievan" . "")
- ("'" . "")))
-
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; span bar callbacks
(define-public (ly:span-bar::calc-glyph-name grob)
+ "Return the @code{'glyph-name} of the corresponding BarLine grob.
+The corresponding SpanBar glyph is computed within
+@code{span-bar::compound-bar-line}."
(let* ((elts (ly:grob-object grob 'elements))
(pos (1- (ly:grob-array-length elts)))
- (glyph '()))
+ (glyph-name '()))
- (while (and (eq? glyph '())
+ (while (and (eq? glyph-name '())
(> pos -1))
- (begin (set! glyph (ly:grob-property (ly:grob-array-ref elts pos)
- 'glyph-name))
+ (begin (set! glyph-name
+ (ly:grob-property (ly:grob-array-ref elts pos)
+ 'glyph-name))
(set! pos (1- pos))))
- (if (eq? glyph '())
+ (if (eq? glyph-name '())
(begin (ly:grob-suicide! grob)
- (set! glyph "")))
- (assoc-get glyph span-bar-glyph-alist glyph)))
+ (set! glyph-name "")))
+ glyph-name))
(define-public (ly:span-bar::width grob)
+ "Compute the width of the SpanBar stencil."
(let ((width (cons 0 0)))
(if (grob::is-live? grob)
- (let* ((glyph (ly:grob-property grob 'glyph-name))
- (stencil (bar-line::compound-bar-line grob glyph (cons -1 1) #f)))
+ (let* ((glyph-name (ly:grob-property grob 'glyph-name))
+ (stencil (span-bar::compound-bar-line grob
+ glyph-name
+ dummy-extent)))
(set! width (ly:stencil-extent stencil X))))
width))
(define-public (ly:span-bar::before-line-breaking grob)
+ "A dummy callback that kills the Grob @var{grob} if it contains
+no elements."
(let ((elts (ly:grob-object grob 'elements)))
(if (zero? (ly:grob-array-length elts))
(ly:grob-suicide! grob))))
+(define-public (span-bar::compound-bar-line grob bar-glyph extent)
+ "Build the stencil of the span bar."
+ (let* ((line-thickness (layout-line-thickness grob))
+ (kern (* (ly:grob-property grob 'kern 1) line-thickness))
+ (bar-glyph-list (string->string-list
+ (strip-string-annotation bar-glyph)))
+ (span-glyph (assoc-get bar-glyph span-bar-glyph-alist 'undefined))
+ (stencil empty-stencil))
+
+ (if (string? span-glyph)
+ (let ((span-glyph-list (string->string-list span-glyph))
+ (is-first-stencil #t))
+
+ (for-each (lambda (bar span)
+ ;; the stencil stack routine is similar to the one
+ ;; used in bar-line::compound-bar-line, but here,
+ ;; leading replacement-chars are discarded.
+ (if (not (and (string=? span (string replacement-char))
+ is-first-stencil))
+ (begin
+ (set! stencil
+ (ly:stencil-combine-at-edge
+ stencil
+ X
+ RIGHT
+ ;; if the current glyph is the replacement-char,
+ ;; we take the corresponding glyph from the
+ ;; bar-glyph-list and insert an empty stencil
+ ;; with the appropriate width.
+ ;; (this method would fail if the bar-glyph-list
+ ;; were shorter than the span-glyph-list,
+ ;; but this makes hardly any sense from a
+ ;; typographical point of view
+ (if (string=? span (string replacement-char))
+ ((make-spacer-bar-line bar) grob extent)
+ (glyph->stencil span grob extent))
+ (if is-first-stencil 0 kern)))
+ (set! is-first-stencil #f))))
+ bar-glyph-list span-glyph-list))
+ ;; if span-glyph is not a string, it may be #f or 'undefined;
+ ;; the latter signals that the span bar for the current bar-glyph
+ ;; is undefined, so we raise a warning.
+ (if (eq? span-glyph 'undefined)
+ (ly:warning
+ (_ "No span bar glyph defined for bar glyph '~a'; ignoring.")
+ bar-glyph)))
+ stencil))
+
;; The method used in the following routine depends on bar_engraver
;; not being removed from staff context. If bar_engraver is removed,
;; the size of the staff lines is evaluated as 0, which results in a
;; This routine was originally by Juergen Reuter, but it was a on the
;; bulky side. Rewritten by Han-Wen. Ported from c++ to Scheme by Marc Hohl.
(define-public (ly:span-bar::print grob)
+ "The print routine for span bars."
(let* ((elts-array (ly:grob-object grob 'elements))
(refp (ly:grob-common-refpoint-of-array grob elts-array Y))
(elts (reverse (sort (ly:grob-array->list elts-array)
;; Elements must be ordered according to their y coordinates
;; relative to their common axis group parent.
;; Otherwise, the computation goes mad.
- (glyph (ly:grob-property grob 'glyph-name))
+ (bar-glyph (ly:grob-property grob 'glyph-name))
(span-bar empty-stencil))
- (if (string? glyph)
- (let* ((extents '())
- (make-span-bars '())
- (model-bar #f))
-
- ;; we compute the extents of each system and store them
- ;; in a list; dito for the 'allow-span-bar property.
- ;; model-bar takes the bar grob, if given.
- (map (lambda (bar)
- (let* ((ext (bar-line::bar-y-extent bar refp))
- (staff-symbol (ly:grob-object bar 'staff-symbol)))
-
- (if (ly:grob? staff-symbol)
- (let ((refp-extent (ly:grob-extent staff-symbol refp Y)))
-
- (set! ext (interval-union ext refp-extent))
-
- (if (> (interval-length ext) 0)
+ (if (string? bar-glyph)
+ (let ((extents '())
+ (make-span-bars '())
+ (model-bar #f))
+
+ ;; we compute the extents of each system and store them
+ ;; in a list; dito for the 'allow-span-bar property.
+ ;; model-bar takes the bar grob, if given.
+ (map (lambda (bar)
+ (let ((ext (bar-line::bar-y-extent bar refp))
+ (staff-symbol (ly:grob-object bar 'staff-symbol)))
+
+ (if (ly:grob? staff-symbol)
+ (let ((refp-extent (ly:grob-extent staff-symbol refp Y)))
+
+ (set! ext (interval-union ext refp-extent))
+
+ (if (> (interval-length ext) 0)
+ (begin
+ (set! extents (append extents (list ext)))
+ (set! model-bar bar)
+ (set! make-span-bars
+ (append make-span-bars
+ (list (ly:grob-property
+ bar
+ 'allow-span-bar
+ #t))))))))))
+ elts)
+ ;; if there is no bar grob, we use the callback argument
+ (if (not model-bar)
+ (set! model-bar grob))
+ ;; we discard the first entry in make-span-bars,
+ ;; because its corresponding bar line is the
+ ;; uppermost and therefore not connected to
+ ;; another bar line
+ (if (pair? make-span-bars)
+ (set! make-span-bars (cdr make-span-bars)))
+ ;; the span bar reaches from the lower end of the upper staff
+ ;; to the upper end of the lower staff - when allow-span-bar is #t
+ (reduce (lambda (curr prev)
+ (let ((span-extent (cons 0 0))
+ (allow-span-bar (car make-span-bars)))
+
+ (set! make-span-bars (cdr make-span-bars))
+ (if (> (interval-length prev) 0)
(begin
- (set! extents (append extents (list ext)))
- (set! model-bar bar)
- (set! make-span-bars
- (append make-span-bars
- (list (ly:grob-property bar 'allow-span-bar #t))))))))))
- elts)
- ;; if there is no bar grob, we use the callback argument
- (if (not model-bar)
- (set! model-bar grob))
- ;; we discard the first entry in make-span-bars, because its corresponding
- ;; bar line is the uppermost and therefore not connected to another bar line
- (if (pair? make-span-bars)
- (set! make-span-bars (cdr make-span-bars)))
- ;; the span bar reaches from the lower end of the upper staff
- ;; to the upper end of the lower staff - when allow-span-bar is #t
- (reduce (lambda (curr prev)
- (let ((l (cons 0 0))
- (allow-span-bar (car make-span-bars)))
-
- (set! make-span-bars (cdr make-span-bars))
- (if (> (interval-length prev) 0)
- (begin
- (set! l (cons (cdr prev) (car curr)))
- (if (or (zero? (interval-length l))
- (not allow-span-bar))
- (begin
- ;; there is overlap between the bar lines
- ;; or 'allow-span-bar = #f.
- ;; Do nothing.
- )
+ (set! span-extent (cons (cdr prev)
+ (car curr)))
+ ;; draw the span bar only when the staff lines
+ ;; don't overlap and allow-span-bar is #t:
+ (and (> (interval-length span-extent) 0)
+ allow-span-bar
(set! span-bar
- (ly:stencil-add span-bar
- (bar-line::compound-bar-line
- model-bar
- glyph
- l
- #f))))))
- curr))
- "" extents)
- (set! span-bar (ly:stencil-translate-axis
- span-bar
- (- (ly:grob-relative-coordinate grob refp Y))
- Y))))
+ (ly:stencil-add
+ span-bar
+ (span-bar::compound-bar-line
+ model-bar
+ bar-glyph
+ span-extent))))))
+ curr))
+ "" extents)
+ (set! span-bar (ly:stencil-translate-axis
+ span-bar
+ (- (ly:grob-relative-coordinate grob refp Y))
+ Y))))
span-bar))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; volta bracket functions
+
+(define-public (allow-volta-hook bar-glyph)
+ "Allow the volta bracket hook being drawn over bar line @var{bar-glyph}."
+ (if (string? bar-glyph)
+ (set! volta-bracket-allow-volta-hook-list
+ (append volta-bracket-allow-volta-hook-list
+ (list bar-glyph)))
+ (ly:warning (_ ("Volta hook bar line must be a string; ignoring '~a'.")
+ bar-glyph))))
+
+(define-session volta-bracket-allow-volta-hook-list '())
+
+(define-public (volta-bracket::calc-hook-visibility bar-glyph)
+ "Determine the visibility of the volta bracket hook. It is called in
+@code{lily/volta-bracket.cc} and returns @code{#t} if @emph{no} hook
+should be drawn."
+ (not (member bar-glyph volta-bracket-allow-volta-hook-list)))
+
+(define-public (ly:volta-bracket::calc-shorten-pair grob)
+ "Calculate the @code{shorten-pair} values for an ideal placement
+of the volta brackets relative to the bar lines."
+ (let* ((line-thickness (layout-line-thickness grob))
+ (volta-half-line-thickness (* (ly:grob-property grob 'thickness 1.6)
+ line-thickness
+ 1/2))
+ (bar-array (ly:grob-object grob 'bars))
+ (bar-array-length (ly:grob-array-length bar-array))
+ ;; the bar-array starts with the uppermost bar line grob that is
+ ;; covered by the left edge of the volta bracket; more (span)
+ ;; bar line grobs from other staves may follow
+ (left-bar-line (if (> bar-array-length 0)
+ (ly:grob-array-ref bar-array 0)
+ '()))
+ ;; we need the vertical-axis-group-index of the left-bar-line
+ ;; to find the corresponding right-bar-line
+ (vag-index (if (null? left-bar-line)
+ -1
+ (ly:grob-get-vertical-axis-group-index left-bar-line)))
+ ;; the bar line corresponding to the right edge of the volta bracket
+ ;; is the last entry with the same vag-index, so we transform the array to a list,
+ ;; reverse it and search for suitable entries:
+ (filtered-grobs (filter (lambda (e)
+ (eq? (ly:grob-get-vertical-axis-group-index e)
+ vag-index))
+ (reverse (ly:grob-array->list bar-array))))
+ ;; we need the first one (if any)
+ (right-bar-line (if (pair? filtered-grobs)
+ (car filtered-grobs)
+ '()))
+ ;; the left-bar-line may be a #'<Grob Item >,
+ ;; so we add "" as a fallback return value
+ (left-bar-glyph-name (if (null? left-bar-line)
+ (string annotation-char)
+ (ly:grob-property left-bar-line 'glyph-name "")))
+ (right-bar-glyph-name (if (null? right-bar-line)
+ (string annotation-char)
+ (ly:grob-property right-bar-line 'glyph-name "")))
+ (left-bar-broken (or (null? left-bar-line)
+ (not (zero? (ly:item-break-dir left-bar-line)))))
+ (right-bar-broken (or (null? right-bar-line)
+ (not (zero? (ly:item-break-dir right-bar-line)))))
+ (left-span-stencil-extent (ly:stencil-extent
+ (span-bar::compound-bar-line
+ left-bar-line
+ left-bar-glyph-name
+ dummy-extent)
+ X))
+ (right-span-stencil-extent (ly:stencil-extent
+ (span-bar::compound-bar-line
+ right-bar-line
+ right-bar-glyph-name
+ dummy-extent)
+ X))
+ (left-shorten 0.0)
+ (right-shorten 0.0))
+
+ ;; since "empty" intervals may look like (1.0 . -1.0), we use the
+ ;; min/max functions to make sure that the placement is not corrupted
+ ;; in case of empty bar lines
+ (set! left-shorten
+ (if left-bar-broken
+ (- (max 0 (interval-end left-span-stencil-extent))
+ (max 0 (interval-end (ly:stencil-extent
+ (bar-line::compound-bar-line
+ left-bar-line
+ left-bar-glyph-name
+ dummy-extent)
+ X)))
+ volta-half-line-thickness)
+ (- (max 0 (interval-end left-span-stencil-extent))
+ volta-half-line-thickness)))
+
+ (set! right-shorten
+ (if right-bar-broken
+ (+ (- (max 0 (interval-end right-span-stencil-extent)))
+ volta-half-line-thickness)
+ (- (min 0 (interval-start right-span-stencil-extent))
+ volta-half-line-thickness)))
+
+ (cons left-shorten right-shorten)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; predefined bar glyph print procedures
+
+(add-bar-glyph-print-procedure "" make-empty-bar-line)
+(add-bar-glyph-print-procedure "|" make-simple-bar-line)
+(add-bar-glyph-print-procedure "." make-thick-bar-line)
+(add-bar-glyph-print-procedure "!" make-dashed-bar-line)
+(add-bar-glyph-print-procedure "'" make-tick-bar-line)
+(add-bar-glyph-print-procedure ":" make-colon-bar-line)
+(add-bar-glyph-print-procedure ";" make-dotted-bar-line)
+(add-bar-glyph-print-procedure "k" make-kievan-bar-line)
+(add-bar-glyph-print-procedure "S" (make-segno-bar-line #t))
+(add-bar-glyph-print-procedure "=" (make-segno-bar-line #f))
+(add-bar-glyph-print-procedure "[" (make-bracket-bar-line LEFT))
+(add-bar-glyph-print-procedure "]" (make-bracket-bar-line RIGHT))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; predefined bar lines
+;;
+;; definition of bar lines goes as follows:
+;;
+;; (define-bar-line "normal bar[-annotation]" "end of line" "start of line" "span bar")
+;;
+;; each entry has to be a string or #f.
+;; The empty string "" is allowed and yields in an invisible bar line,
+;; whereas #f reads 'no stencil'.
+;;
+;; Convention: if two bar lines would be identical in their
+;; unbroken bar glyph, we use annotations to make them distinct;
+;; as a general rule of thumb the main difference in their
+;; behavior at the end of a line is used as annotation, cf.
+;;
+;; (define-bar-line ".|:" "|" ".|:" ".|")
+;; (define-bar-line ".|:-||" "||" ".|:" ".|")
+;;
+;; or
+;;
+;; (define-bar-line "S-|" "|" "S" "=")
+;; (define-bar-line "S-S" "S" "" "=")
+
+;; common bar lines
+(define-bar-line "" "" "" #f)
+(define-bar-line "-" #f #f #f)
+(define-bar-line "|" "|" #f "|")
+(define-bar-line "|-s" #f "|" "|")
+(define-bar-line "." "." #f ".")
+(define-bar-line ".|" "|" ".|" ".|")
+(define-bar-line "|." "|." #f "|.")
+(define-bar-line "||" "||" #f "||")
+(define-bar-line ".." ".." #f "..")
+(define-bar-line "|.|" "|.|" #f "|.|")
+(define-bar-line "!" "!" #f "!")
+(define-bar-line ";" ";" #f ";")
+(define-bar-line "'" "'" #f #f)
+
+;; repeats
+(define-bar-line ":|.:" ":|." ".|:" " |.")
+(define-bar-line ":..:" ":|." ".|:" " ..")
+(define-bar-line ":|.|:" ":|." ".|:" " |.|")
+(define-bar-line ":.|.:" ":|." ".|:" " .|.")
+(define-bar-line ":|." ":|." #f " |.")
+(define-bar-line ".|:" "|" ".|:" ".|")
+(define-bar-line "[|:" "|" "[|:" " |")
+(define-bar-line ":|]" ":|]" #f " |")
+(define-bar-line ":|][|:" ":|]" "[|:" " | |")
+(define-bar-line ".|:-||" "||" ".|:" ".|")
+
+;; segno bar lines
+(define-bar-line "S" "||" "S" "=")
+(define-bar-line "S-|" "|" "S" "=")
+(define-bar-line "S-S" "S" #f "=")
+(define-bar-line ":|.S" ":|." "S" " |.")
+(define-bar-line ":|.S-S" ":|.S" "" " |.")
+(define-bar-line "S.|:" "|" "S.|:" " .|")
+(define-bar-line "S.|:-S" "S" ".|:" " .|")
+(define-bar-line ":|.S.|:" ":|." "S.|:" " |. .|")
+(define-bar-line ":|.S.|:-S" ":|.S" ".|:" " |. .|")
+
+;; ancient bar lines
+(define-bar-line "k" "k" #f #f) ;; kievan style
+
+;; volta hook settings
+(allow-volta-hook ":|.")
+(allow-volta-hook ".|:")
+(allow-volta-hook "|.")
+(allow-volta-hook ":..:")
+(allow-volta-hook ":|.|:")
+(allow-volta-hook ":|.:")
+(allow-volta-hook ".|")
+(allow-volta-hook ":|.S")
+(allow-volta-hook ":|.S-S")
+(allow-volta-hook ":|.S.|:")
+(allow-volta-hook ":|.S.|:-S")
+(allow-volta-hook ":|]")
+(allow-volta-hook ":|][|:")
(define-public (boolean-or-symbol? x)
(or (boolean? x) (symbol? x)))
+(define-public (symbol-list? x)
+ (and (list? x) (every symbol? x)))
+
+(define-public (symbol-list-or-music? x)
+ (if (list? x)
+ (every symbol? x)
+ (ly:music? x)))
+
(define-public (string-or-symbol? x)
(or (string? x) (symbol? x)))
(define-public (string-or-pair? x)
(or (string? x) (pair? x)))
+(define-public (string-or-music? x)
+ (or (string? x) (ly:music? x)))
+
(define-public (number-or-pair? x)
(or (number? x) (pair? x)))
(define-public (cheap-list? x)
(or (pair? x) (null? x)))
-(define-public (list-or-symbol? x)
- (or (cheap-list? x) (symbol? x)))
+(define-public (symbol-list-or-symbol? x)
+ (if (list? x)
+ (every symbol? x)
+ (symbol? x)))
(define-public (scheme? x) #t)
;;
;;
;; (define-public (make-rhythmic-location bar-num num den)
-;: (define-public (rhythmic-location? a)
+;; (define-public (rhythmic-location? a)
;; (define-public (make-graceless-rhythmic-location loc)
;; (define-public rhythmic-location-measure-position cdr)
;; (define-public rhythmic-location-bar-number car)
;; (define-public (rhythmic-location<? a b)
-;: (define-public (rhythmic-location<=? a b)
-;: (define-public (rhythmic-location>=? a b)
+;; (define-public (rhythmic-location<=? a b)
+;; (define-public (rhythmic-location>=? a b)
;; (define-public (rhythmic-location>? a b)
-;: (define-public (rhythmic-location=? a b)
+;; (define-public (rhythmic-location=? a b)
;; (define-public (rhythmic-location->file-string a)
;; (define-public (rhythmic-location->string a)
;;
;; the total of this will be
;; O(#systems * #regions)
-;;
+;;
;; we can actually do better by sorting the regions as well,
;; but let's leave that for future extensions.
;;
(define-public (system-clipped-x-extent system-grob clip-region)
"Return the X-extent of @var{system-grob} when clipped with
@var{clip-region}. Return @code{#f} if not appropriate."
-
+
(let*
((region-start (car clip-region))
(columns (ly:grob-object system-grob 'columns))
(region-end (cdr clip-region))
(found-grace-end #f)
- (candidate-columns
+ (candidate-columns
(filter
(lambda (j)
(let*
(loc (ly:grob-property column 'rhythmic-location))
(grace-less (make-graceless-rhythmic-location loc))
)
-
+
(and (rhythmic-location? loc)
(rhythmic-location<=? region-start loc)
(or (rhythmic-location<? grace-less region-end)
)))
))
-
+
(iota (ly:grob-array-length columns))))
-
+
(column-range
(if (>= 1 (length candidate-columns))
#f
system-grob
(ly:grob-array-ref columns (car column-range)))
system-grob X))
-
+
(interval-end
(ly:grob-robust-relative-extent
(if (= (1- (ly:grob-array-length columns)) (cdr column-range))
system-grob
(ly:grob-array-ref columns (cdr column-range)))
system-grob X)))
-
-
+
+
#f
)))
-
+
clipped-x-interval))
(clefGlyph ,string? "Name of the symbol within the music font.")
(clefOctavation ,integer? "Add this much extra octavation.
Values of 7 and -7 are common.")
+ (clefOctavationFormatter ,procedure? "A procedure that takes the
+Octavation number as a string and the style as a symbol and returns a markup.")
+ (clefOctavationStyle ,symbol? "Determines the way the octavateEight
+grob is displayed. Possible values are @samp{default}, @samp{parenthesized}
+and @samp{bracketed}.")
(clefPosition ,number? "Where should the center of the clef
symbol go, measured in half staff spaces from the center of the
staff.")
(cueClefGlyph ,string? "Name of the symbol within the music font.")
(cueClefOctavation ,integer? "Add this much extra octavation.
Values of 7 and -7 are common.")
+ (cueClefOctavationFormatter ,procedure? "A procedure that takes the
+Octavation number as a string and the style as a symbol and returns a markup.")
+ (cueClefOctavationStyle ,symbol? "Determines the way the octavateEight
+grob is displayed. Possible values are @samp{default}, @samp{parenthesized}
+and @samp{bracketed}.")
(cueClefPosition ,number? "Where should the center of the clef
symbol go, measured in half staff spaces from the center of the
staff.")
frets for tablatures and fretboards if no strings are provided in
the notes for the current moment.")
(doubleRepeatSegnoType ,string? "Set the default bar line for
-the combinations double repeat with segno. Default is @samp{:|S|:}.")
+the combinations double repeat with segno. Default is @samp{:|.S.|:}.")
(doubleRepeatType ,string? "Set the default bar line for double
repeats.")
(doubleSlurs ,boolean? "If set, two slurs are created for every
values.")
(endRepeatSegnoType ,string? "Set the default bar line for the
-combinations ending of repeat with segno. Default is @samp{:|S}.")
+combinations ending of repeat with segno. Default is @samp{:|.S}.")
(endRepeatType ,string? "Set the default bar line for the ending
of repeats.")
(explicitClefVisibility ,vector? "@samp{break-visibility}
(stanza ,markup? "Stanza @q{number} to print before the start of a
verse. Use in @code{Lyrics} context.")
(startRepeatSegnoType ,string? "Set the default bar line for the
-combinations beginning of repeat with segno. Default is @samp{.S|:}.")
+combinations beginning of repeat with segno. Default is @samp{S.|:}.")
(startRepeatType ,string? "Set the default bar line for the beginning
of repeats.")
(stemLeftBeamCount ,integer? "Specify the number of beams to draw
Example:
@example
-\\set Staff.whichBar = \"|:\"
+\\set Staff.whichBar = \".|:\"
@end example
@noindent
This will create a start-repeat bar in this staff only. Valid values
-are described in @rinternals{bar-line-interface}.")
+are described in @file{scm/bar-line.scm}.")
)))
(break-event . (line-break-event page-break-event page-turn-event))
(dynamic-event . (absolute-dynamic-event))
(span-event . (span-dynamic-event beam-event episema-event ligature-event
- pedal-event phrasing-slur-event slur-event staff-span-event
- text-span-event trill-span-event tremolo-span-event
- tuplet-span-event))
+ measure-counter-event pedal-event
+ phrasing-slur-event slur-event
+ staff-span-event text-span-event
+ trill-span-event tremolo-span-event
+ tuplet-span-event))
(span-dynamic-event . (decrescendo-event crescendo-event))
(break-span-event . (break-dynamic-span-event))
(pedal-event . (sostenuto-event sustain-event una-corda-event))
"Print a special bar symbol. It replaces the regular bar
symbol with a special symbol. The argument @var{bartype}
is a string which specifies the kind of bar line to print.
-Options are @code{|}, @code{:|}, @code{|:}, @code{:|:}, @code{:|.|:},
-@code{:|.:}, @code{.}, @code{||}, @code{|.}, @code{.|}, @code{.|.},
-@code{|.|}, @code{:}, @code{dashed}, @code{'} and @code{S}.
-
-These produce, respectively, a normal bar line, a right repeat, a left repeat,
-a thick double repeat, a thin-thick-thin double repeat,
-a thin-thick double repeat, a thick bar, a double bar, a start bar,
-an end bar, a thick double bar, a thin-thick-thin bar,
-a dotted bar, a dashed bar, a tick as bar line and a segno bar.
-
-In addition, there is an option
-@code{||:} which is equivalent to @code{|:} except at line
-breaks, where it produces a double bar (@code{||}) at the
-end of the line and a repeat sign (@code{|:}) at the
-beginning of the new line.
-
-For segno, @code{S} produces a segno sign except at line breaks,
-where it produces a double bar (@code{||}) at the
-end of the line and a segno sign at the beginning of the new line.
-@code{|S} is equivalent to @code{S} but produces a simple bar line
-(@code{|}) instead of a double bar line (@code{||}) at line breaks.
-@code{S|} produces the segno sign at line breaks and starts the following
-line without special bar lines.
-
-@code{S|:} and @code{:|S} are used for repeat/segno combinations that are
-separated at line breaks. Alternatively, @code{.S|:} and @code{:|S.}
-may be used which combine repeat signs and segno at the same line in
-case of a line break. @code{:|S|:} is a combination of a left repeat
-(@code{:|}), a segno (@code{S}) and a right repeat @code{|:} which
-splits before the segno at line breaks; @code{:|S.|:} splits after
-the segno sign.
-
-If @var{bartype} is set to @code{empty} then nothing is
-printed, but a line break is allowed at that spot.
+
+The list of allowed glyphs and predefined bar lines can be
+found in @file{scm/bar-line.scm}.
@code{gap} is used for the gaps in dashed bar lines."
'(allow-span-bar bar-extent gap glyph glyph-name has-span-bar
- hair-thickness kern thin-kern thick-thickness))
+ hair-thickness kern rounded thin-kern thick-thickness))
(ly:add-interface
'bass-figure-interface
"A rehearsal mark."
'())
+(ly:add-interface
+ 'measure-counter-interface
+ "A counter for numbering measures."
+ '(columns count-from))
+
(ly:add-interface
'metronome-mark-interface
"A metronome mark."
"Note names."
'())
+(ly:add-interface
+ 'octavate-eight-interface
+ "Interface that permits the nominal identification of the octavian
+annotation that multiplies by two the freqency of the pitches present
+in a given staff were they played on a clef that lacked said octavian
+annotation."
+ '())
+
(ly:add-interface
'only-prebreak-interface
"Kill this grob after the line breaking process."
beamlet is determined by taking either the default length or the
length specified by @code{beamlet-max-length-proportion}, whichever is
smaller.")
+ (beam-gap ,number-pair? "Size of a gap in a @code{Beam}.")
(beamlet-max-length-proportion ,pair? "The maximum length of a
beamlet, as a proportion of the distance between two adjacent stems.")
(before-line-breaking ,boolean? "Dummy property, used to trigger
(control-points ,list? "List of offsets (number pairs) that form
control points for the tie, slur, or bracket shape. For B@'eziers,
this should list the control points of a third-order B@'ezier curve.")
+ (count-from ,integer? "The first measure in a measure count
+receives this number. The following measures are numbered in
+increments from this initial value.")
;;
;; d
left side of the item and adding the @q{cdr} on the right side of the
item). In order to make a grob take up no horizontal space at all,
set this to @code{(+inf.0 . -inf.0)}.")
- (extra-X-extent ,number-pair? "A grob is enlarged in
-X@tie{}dimension by this much.")
- (extra-Y-extent ,number-pair? "A grob is enlarged in
-Y@tie{}dimension by this much.")
;;
;; f
;;
(flag-count ,number? "The number of tremolo beams.")
+ (flat-positions ,list? "Flats in key signatures are placed
+within the specified ranges of staff-positions. The general form
+is a list of pairs, with one pair for each type of clef, in order
+of the staff-position at which each clef places C:
+@code{(alto treble tenor soprano baritone mezzosoprano bass)}.
+If the list contains a single element it applies for all clefs.
+A single number in place of a pair sets accidentals within the octave
+ending at that staff-position.")
(font-encoding ,symbol? "The font encoding is the broadest
category for selecting a font. Currently, only lilypond's system
fonts (Emmentaler) are using this property. Available
by glissandi?")
(glyph ,string? "A string determining what @q{style} of glyph is
typeset. Valid choices depend on the function that is reading this
-property.")
- (glyph-name ,string? "The glyph name within the font.")
+property.
+
+In combination with (span) bar lines, it is a string resembling the
+bar line appearance in ASCII form.")
+ (glyph-name ,string? "The glyph name within the font.
+
+In the context of (span) bar lines, @var{glyph-name} represents
+a processed form of @code{glyph}, where decisions about line breaking
+etc. are already taken.")
(glyph-name-alist ,list? "An alist of key-string pairs.")
(graphical ,boolean? "Display in graphical (vs. text) form.")
(grow-direction ,ly:dir? "Crescendo or decrescendo?")
(outside-staff-padding ,number? "The padding to place between
this grob and the staff when spacing according to
@code{outside-staff-priority}.")
+ (outside-staff-placement-directive ,symbol? "One of four directives
+telling how outside staff objects should be placed.
+@itemize @bullet
+@item
+@code{left-to-right-greedy} -- Place each successive grob from left to
+right.
+@item
+@code{left-to-right-polite} -- Place a grob from left to right only if
+it does not potentially overlap with another grob that has been placed
+on a pass through a grob array. If there is overlap, do another pass to
+determine placement.
+@item
+@code{right-to-left-greedy} -- Same as @code{left-to-right-greedy}, but
+from right to left.
+@item
+@code{right-to-left-polite} -- Same as @code{left-to-right-polite}, but
+from right to left.
+@end itemize")
(outside-staff-priority ,number? "If set, the grob is positioned
outside the staff in such a way as to avoid all collisions. In case
of a potential collision, the grob with the smaller
(rotation ,list? "Number of degrees to rotate this object, and
what point to rotate around. For example, @code{'(45 0 0)} rotates
by 45 degrees around the center of this object.")
+ (rounded ,boolean? "Decide whether lines should be drawn rounded or not.")
(round-up-to-longer-rest ,boolean? "Displays the longer multi-measure
rest when the length of a measure is between two values of
@code{usable-duration-logs}. For example, displays a breve instead of a whole
for stems that are placed in tight configurations. This amount is
used for stems with the same direction to compensate for note head to
stem distance.")
- (script-priority ,number? "A sorting key that determines in what
-order a script is within a stack of scripts.")
+ (script-priority ,number? "A key for determining the order of
+scripts in a stack, by being added to the position of the script in
+the user input, the sum being the overall priority. Smaller means
+closer to the head.")
(self-alignment-X ,number? "Specify alignment of an object. The
value @w{@code{-1}} means left aligned, @code{0}@tie{}centered, and
@code{1}@tie{}right-aligned in X@tie{}direction. Other numerical
values may also be specified.")
(self-alignment-Y ,number? "Like @code{self-alignment-X} but for
the Y@tie{}axis.")
+ (sharp-positions ,list? "Sharps in key signatures are placed
+within the specified ranges of staff-positions. The general form
+is a list of pairs, with one pair for each type of clef, in order
+of the staff-position at which each clef places C:
+@code{(alto treble tenor soprano baritone mezzosoprano bass)}.
+If the list contains a single element it applies for all clefs.
+A single number in place of a pair sets accidentals within the octave
+ending at that staff-position.")
(shorten-pair ,number-pair? "The lengths to shorten a
text-spanner on both sides, for example a pedal bracket. Positive
values shorten the text-spanner, while negative values lengthen it.")
(vertical-skylines ,ly:skyline-pair? "Two skylines, one above and
one below this grob.")
-
;;
;; w
;;
a whole system.")
(footnotes-after-line-breaking ,ly:grob-array? "Footnote grobs of
a broken system.")
- (full-score-pure-minimum-translations ,list? "A list of translations
-for a full score's worth of grobs.")
(glissando-index ,integer? "The index of a glissando in its note
column.")
for this column.")
(melody-spanner ,ly:grob? "The @code{MelodyItem} object for a stem.")
+ (minimum-translations-alist ,list? "An list of translations for a given
+start and end point.")
(neighbors ,ly:grob-array? "The X-axis neighbors of a grob. Used by the
pure-from-neighbor-interface to determine various grob heights.")
(side-support-elements ,ly:grob-array? "The side support, an array of
grobs.")
- (skyline-quantizing ,index? "The number of boxes to break a
-slur into when calculating its skyline.")
(slur ,ly:grob? "A pointer to a @code{Slur} object.")
(spacing ,ly:grob? "The spacing spanner governing this section.")
(spacing-wishes ,ly:grob-array? "An array of note spacing or staff spacing
(tuplet-number ,ly:grob? "The number for a bracket.")
(tuplet-start ,boolean? "Is stem at the start of a tuplet?")
(tuplets ,ly:grob-array? "An array of smaller tuplet brackets.")
+
+ (vertical-alignment ,ly:grob? "The VerticalAlignment in a System.")
+ (vertical-skyline-elements ,ly:grob-array? "An array of grobs
+used to create vertical skylines.")
+
(X-colliding-grobs ,ly:grob-array? "Grobs that can collide
with a self-aligned grob on the X-axis.")
(Y-colliding-grobs ,ly:grob-array? "Grobs that can collide
. (
(alteration . ,accidental-interface::calc-alteration)
(avoid-slur . inside)
+ (glyph-name . ,accidental-interface::glyph-name)
(glyph-name-alist . ,standard-alteration-glyph-name-alist)
(stencil . ,ly:accidental-interface::print)
+ (horizontal-skylines . ,ly:accidental-interface::horizontal-skylines)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(X-extent . ,ly:accidental-interface::width)
(Y-extent . ,ly:accidental-interface::height)
(meta . ((class . Item)
(layer . 0)
(non-musical . #t)
+ (rounded . #f)
(space-alist . (
(time-signature . (extra-space . 0.75))
(custos . (minimum-space . 2.0))
(stacking-dir . ,DOWN)
(Y-extent . ,ly:axis-group-interface::height)
(meta . ((class . Spanner)
- (object-callbacks . ((full-score-pure-minimum-translations . ,ly:align-interface::full-score-pure-minimum-translations)
- (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+ (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
(pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
(interfaces . (align-interface
axis-group-interface
inline-accidental-interface
key-signature-interface
note-head-interface
+ octavate-eight-interface
stem-interface
time-signature-interface))
(cross-staff . ,ly:beam::calc-cross-staff)
;; only for debugging.
(font-family . roman)
- (gap . 0.8)
+ (beam-gap . ,ly:beam::calc-beam-gap)
+ (minimum-length . ,ly:beam::calc-minimum-length)
(neutral-direction . ,DOWN)
(positions . ,beam::place-broken-parts-individually)
+ (springs-and-rods . ,ly:beam::calc-springs-and-rods)
(X-positions . ,ly:beam::calc-x-positions)
;; this is a hack to set stem lengths, if positions is set.
(quantized-positions . ,ly:beam::set-stem-lengths)
(shorten . ,ly:beam::calc-stem-shorten)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(stencil . ,ly:beam::print)
(meta . ((class . Spanner)
(next-note . (extra-space . 1.0))
(right-edge . (extra-space . 0.5))))
(stencil . ,ly:clef::print)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(Y-offset . ,ly:staff-symbol-referencer::callback)
(meta . ((class . Item)
(object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
(side-axis . ,Y)
(slur-padding . 0.3)
(staff-padding . 0.1)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-element-stencils)
+ (use-skylines . #t)
(X-extent . ,ly:axis-group-interface::width)
(Y-extent . ,ly:axis-group-interface::height)
(Y-offset . ,ly:side-position-interface::y-aligned-side)
(font-encoding . fetaText)
(font-series . bold)
(font-shape . italic)
- (outside-staff-priority . 250)
(positioning-done . ,ly:script-interface::calc-positioning-done)
(right-padding . 0.5)
(self-alignment-X . ,CENTER)
(self-alignment-Y . ,CENTER)
(stencil . ,ly:text-interface::print)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
(Y-offset . ,ly:self-alignment-interface::y-aligned-on-self)
(meta . ((class . Item)
(springs-and-rods . ,ly:spanner::set-spacing-rods)
(stencil . ,ly:line-spanner::print)
(style . dashed-line)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(meta . ((class . Spanner)
(interfaces . (dynamic-interface
dynamic-text-spanner-interface
text-interface
text-script-interface))))))
+ (FingeringColumn
+ . (
+ (padding . 0.2)
+ (positioning-done . ,ly:fingering-column::calc-positioning-done)
+ (meta . ((class . Item)
+ (interfaces . (fingering-column-interface))))))
+
(Flag
. (
+ (glyph-name . ,ly:flag::glyph-name)
(stencil . ,ly:flag::print)
(X-extent . ,ly:flag::width)
(X-offset . ,ly:flag::calc-x-offset)
(Y-offset . ,ly:flag::calc-y-offset)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(meta . ((class . Item)
(interfaces . (flag-interface
font-interface))))))
(simple-Y . #t)
(stencil . ,ly:line-spanner::print)
(style . line)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(X-extent . #f)
(Y-extent . #f)
(zigzag-width . 0.75)
(stencil . ,ly:hairpin::print)
(thickness . 1.0)
(to-barline . #t)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(Y-offset . ,ly:self-alignment-interface::y-aligned-on-self)
(meta . ((class . Spanner)
(interfaces . (dynamic-interface
(break-visibility . ,begin-of-line-invisible)
(glyph-name-alist . ,cancellation-glyph-name-alist)
(non-musical . #t)
+ (flat-positions . (2 3 4 2 1 2 1))
+ (sharp-positions . (4 5 4 2 3 2 3))
(space-alist . (
(time-signature . (extra-space . 1.25))
(staff-bar . (extra-space . 0.6))
(right-edge . (extra-space . 0.5))
(first-note . (fixed-space . 2.5))))
(stencil . ,ly:key-signature-interface::print)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(extra-spacing-width . (0.0 . 1.0))
(extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
(Y-offset . ,ly:staff-symbol-referencer::callback)
(break-visibility . ,begin-of-line-visible)
(glyph-name-alist . ,standard-alteration-glyph-name-alist)
(non-musical . #t)
+ (flat-positions . (2 3 4 2 1 2 1))
+ (sharp-positions . (4 5 4 2 3 2 3))
(space-alist . (
(time-signature . (extra-space . 1.15))
(staff-bar . (extra-space . 1.1))
(stencil . ,ly:key-signature-interface::print)
(extra-spacing-width . (0.0 . 1.0))
(extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(Y-offset . ,ly:staff-symbol-referencer::callback)
(meta . ((class . Item)
(object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
(stencil . ,laissez-vibrer::print)
(thickness . 1.0)
(extra-spacing-height . (-0.5 . 0.5))
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(meta . ((class . Item)
(interfaces . (semi-tie-interface))))))
(minimum-length-fraction . 0.25)
(springs-and-rods . ,ly:ledger-line-spanner::set-spacing-rods)
(stencil . ,ly:ledger-line-spanner::print)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(X-extent . #f)
(Y-extent . #f)
(meta . ((class . Spanner)
(padding . 0.07)
(springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods)
(stencil . ,ly:lyric-hyphen::print)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(thickness . 1.3)
(Y-extent . (0 . 0))
(meta . ((class . Spanner)
(stencil . ,lyric-text::print)
(text . ,(grob::calc-property-by-copy 'text))
(word-space . 0.6)
+ (skyline-horizontal-padding . 0.1)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
(meta . ((class . Item)
(interfaces . (font-interface
self-alignment-interface
text-interface))))))
+ (MeasureCounter
+ . (
+ (count-from . 1)
+ (direction . ,UP)
+ (font-encoding . fetaText)
+ (font-size . -2)
+ (outside-staff-horizontal-padding . 0.5)
+ (outside-staff-padding . 0.5)
+ (outside-staff-priority . 750)
+ (self-alignment-X . ,CENTER)
+ (staff-padding . 0.5)
+ (stencil . ,measure-counter-stencil)
+ (meta . ((class . Spanner)
+ (interfaces . (font-interface
+ measure-counter-interface
+ self-alignment-interface
+ text-interface))))))
(MeasureGrouping
. (
(MensuralLigature
. (
+ (springs-and-rods . ,ly:spanner::set-spacing-rods)
(stencil . ,ly:mensural-ligature::print)
(thickness . 1.3)
(meta . ((class . Spanner)
(break-visibility . ,end-of-line-invisible)
(direction . ,UP)
(extra-spacing-width . (+inf.0 . -inf.0))
+ (outside-staff-horizontal-padding . 0.12)
(outside-staff-priority . 1000)
(padding . 0.8)
(side-axis . ,Y)
(stencil . ,ly:text-interface::print)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(Y-offset . ,ly:side-position-interface::y-aligned-side)
(X-offset . ,(ly:make-simple-closure
`(,+
(Y-offset . ,ly:side-position-interface::y-aligned-side)
(meta . ((class . Item)
(interfaces . (font-interface
+ octavate-eight-interface
self-alignment-interface
side-position-interface
text-interface))))))
(staff-padding . 1.0)
(stencil . ,ly:ottava-bracket::print)
(style . dashed-line)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(Y-offset . ,ly:side-position-interface::y-aligned-side)
(meta . ((class . Spanner)
(interfaces . (font-interface
(bound-alignment-interfaces . (note-column-interface))
(horizontal-skylines . ,ly:separation-item::calc-skylines)
(keep-inside-line . #t)
+ ; 0.08 comes from spacing-horizontal-skyline.ly
+ ; allows double flat of F to be nestled over dots of C
+ (skyline-vertical-padding . 0.08)
;; (stencil . ,ly:paper-column::print)
(X-extent . ,ly:axis-group-interface::width)
(stencil . ,ly:piano-pedal-bracket::print)
(style . line)
(thickness . 1.0)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(meta . ((class . Spanner)
(interfaces . (line-interface
piano-pedal-bracket-interface
(extra-spacing-width . (+inf.0 . -inf.0))
(font-size . 2)
(non-musical . #t)
+ (outside-staff-horizontal-padding . 0.12)
(outside-staff-priority . 1500)
(padding . 0.8)
(self-alignment-X . ,CENTER)
(stencil . ,ly:text-interface::print)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(X-offset . ,(ly:make-simple-closure
`(,+
,(ly:make-simple-closure
(stencil . ,ly:tie::print)
(thickness . 1.0)
(extra-spacing-height . (-0.5 . 0.5))
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(meta . ((class . Item)
(interfaces . (semi-tie-interface))))))
(stencil . ,ly:script-interface::print)
(use-skylines . #t)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(X-offset . ,script-interface::calc-x-offset)
(Y-offset . ,ly:side-position-interface::y-aligned-side)
(meta . ((class . Item)
(padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner
(self-alignment-X . ,CENTER)
(stencil . ,ly:text-interface::print)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
(meta . ((class . Item)
(interfaces . (font-interface
(padding . 1.2)
(side-axis . ,Y)
(staff-padding . 1.0)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-element-stencils)
(X-extent . ,ly:axis-group-interface::width)
(Y-extent . ,ly:axis-group-interface::height)
(Y-offset . ,ly:side-position-interface::y-aligned-side)
(break-align-symbol . staff-bar)
(cross-staff . #t)
(glyph-name . ,ly:span-bar::calc-glyph-name)
-
- ;; ugh duplication! (these 4 properties were copied from Barline)
- ;;
- ;; Ross. page 151 lists other values, we opt for a leaner look
- ;;
- (kern . 3.0)
- (thin-kern . 3.0)
- (hair-thickness . 1.6)
- (thick-thickness . 6.0)
-
(layer . 0)
(non-musical . #t)
(stencil . ,ly:span-bar::print)
(direction . ,ly:stem::calc-direction)
(duration-log . ,stem::calc-duration-log)
- (length . ,stem::length)
+ (length . ,ly:stem::calc-length)
(neutral-direction . ,DOWN)
(positioning-done . ,ly:stem::calc-positioning-done)
(stem-info . ,ly:stem::calc-stem-info)
. (
(beam-thickness . 0.48) ; staff-space
(beam-width . ,ly:stem-tremolo::calc-width) ; staff-space
+ (direction . ,ly:stem-tremolo::calc-direction)
(slope . ,ly:stem-tremolo::calc-slope)
(stencil . ,ly:stem-tremolo::print)
(style . ,ly:stem-tremolo::calc-style)
(padding . 0.0) ;; padding relative to SustainPedalLineSpanner
(self-alignment-X . ,CENTER)
(stencil . ,ly:sustain-pedal::print)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
(meta . ((class . Item)
(interfaces . (font-interface
(padding . 1.2)
(side-axis . ,Y)
(staff-padding . 1.2)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-element-stencils)
(X-extent . ,ly:axis-group-interface::width)
(Y-extent . ,ly:axis-group-interface::height)
(Y-offset . ,ly:side-position-interface::y-aligned-side)
. (
(adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
(axes . (,X ,Y))
- (skyline-horizontal-padding . 0.5)
+ (outside-staff-placement-directive . left-to-right-polite)
+ (skyline-horizontal-padding . 1.0)
(vertical-skylines . ,ly:axis-group-interface::calc-skylines)
(X-extent . ,ly:axis-group-interface::width)
(Y-extent . ,ly:system::height)
(object-callbacks . ((footnotes-before-line-breaking . ,ly:system::footnotes-before-line-breaking)
(footnotes-after-line-breaking . ,ly:system::footnotes-after-line-breaking)
(pure-relevant-grobs . ,ly:system::calc-pure-relevant-grobs)
- (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)))
+ (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+ (vertical-skyline-elements . ,ly:system::vertical-skyline-elements)
+ (vertical-alignment . ,ly:system::get-vertical-alignment)))
(interfaces . (axis-group-interface
system-interface))))))
(cross-staff . ,script-or-side-position-cross-staff)
(direction . ,DOWN)
(extra-spacing-width . (+inf.0 . -inf.0))
+ (outside-staff-horizontal-padding . 0.12)
(outside-staff-priority . 450)
;; sync with Fingering ?
(slur-padding . 0.5)
(staff-padding . 0.5)
(stencil . ,ly:text-interface::print)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
;; todo: add X self alignment?
(X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
(Y-offset . ,ly:side-position-interface::y-aligned-side)
(neutral-direction . ,UP)
(springs-and-rods . ,ly:spanner::set-spacing-rods)
(stencil . ,ly:tie::print)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(thickness . 1.2)
(meta . ((class . Spanner)
(interfaces . (tie-interface))))))
(staff-padding . 0.25)
(stencil . ,ly:tuplet-bracket::print)
(thickness . 1.6)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(X-positions . ,ly:tuplet-bracket::calc-x-positions)
(meta . ((class . Spanner)
(padding . 0.0) ;; padding relative to UnaCordaPedalLineSpanner
(self-alignment-X . ,CENTER)
(stencil . ,ly:text-interface::print)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
(meta . ((class . Item)
(interfaces . (font-interface
(padding . 1.2)
(side-axis . ,Y)
(staff-padding . 1.2)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-element-stencils)
(X-extent . ,ly:axis-group-interface::width)
(Y-extent . ,ly:axis-group-interface::height)
(Y-offset . ,ly:side-position-interface::y-aligned-side)
(X-extent . ,ly:axis-group-interface::width)
(Y-extent . ,ly:axis-group-interface::height)
(meta . ((class . Spanner)
- (object-callbacks . ((full-score-pure-minimum-translations . ,ly:align-interface::full-score-pure-minimum-translations)
- (Y-common . ,ly:axis-group-interface::calc-y-common)
+ (object-callbacks . ((Y-common . ,ly:axis-group-interface::calc-y-common)
(pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)
(pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)))
(interfaces . (align-interface
(minimum-distance . 8)
(padding . 1)))
(nonstaff-unrelatedstaff-spacing . ((padding . 0.5)))
+ (outside-staff-placement-directive . left-to-right-polite)
(staff-staff-spacing . ,ly:axis-group-interface::calc-staff-staff-spacing)
(stencil . ,ly:axis-group-interface::print)
+ (skyline-horizontal-padding . 0.1)
(vertical-skylines . ,ly:hara-kiri-group-spanner::calc-skylines)
(X-extent . ,ly:axis-group-interface::width)
(Y-extent . ,ly:hara-kiri-group-spanner::y-extent)
(padding . 1.5)
))
))
+ (cross-staff . #t)
(gap . 0.5)
(left-bound-info . ,ly:line-spanner::calc-left-bound-info)
(non-musical . #t)
(edge-height . (2.0 . 2.0)) ;; staff-space;
(font-encoding . fetaText)
(font-size . -4)
+ (shorten-pair . ,ly:volta-bracket::calc-shorten-pair)
(stencil . ,ly:volta-bracket-interface::print)
(thickness . 1.6) ;; line-thickness
(word-space . 0.6)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-stencil)
(meta . ((class . Spanner)
(interfaces . (font-interface
horizontal-bracket-interface
(outside-staff-priority . 600)
(padding . 1)
(side-axis . ,Y)
+ (vertical-skylines . ,ly:grob::vertical-skylines-from-element-stencils)
(X-extent . ,ly:axis-group-interface::width)
(Y-extent . ,ly:axis-group-interface::height)
- (Y-offset . ,ly:side-position-interface::y-aligned-side)
+ (Y-offset . ,ly:side-position-interface::y-aligned-side)
(meta . ((class . Spanner)
(object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
(pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
(,ly:slur::outside-slur-callback . ,ly:slur::pure-outside-slur-callback)
(,ly:stem::calc-stem-begin-position . ,ly:stem::pure-calc-stem-begin-position)
(,ly:stem::calc-stem-end-position . ,ly:stem::pure-calc-stem-end-position)
- (,stem::length . ,stem::pure-length)
+ (,ly:stem::calc-length . ,ly:stem::pure-calc-length)
(,ly:stem::height . ,ly:stem::pure-height)
(,ly:stem-tremolo::calc-y-offset . ,ly:stem-tremolo::pure-calc-y-offset)
(,ly:system::height . ,ly:system::calc-pure-height)))
(value (ly:music-property expr 'grob-value))
(once (ly:music-property expr 'once)))
- (format #f "~a\\override ~a~a #'~a = ~a~a"
+ (format #f "~a\\override ~{~a~^.~} = ~a~a"
(if (or (null? once)
(not once))
""
"\\once ")
- (if (eqv? (*current-context*) 'Bottom)
- ""
- (format #f "~a . " (*current-context*)))
- symbol
- (if (null? (cdr properties))
- (car properties)
- properties)
- (property-value->lily-string value parser)
+ (if (eqv? (*current-context*) 'Bottom)
+ (cons symbol properties)
+ (cons* (*current-context*) symbol properties))
+ (property-value->lily-string value parser)
(new-line->lily-string))))
(define-display-method RevertProperty (expr parser)
(let* ((symbol (ly:music-property expr 'symbol))
(properties (ly:music-property expr 'grob-property-path
(list (ly:music-property expr 'grob-property)))))
- (format #f "\\revert ~a~a #'~a~a"
- (if (eqv? (*current-context*) 'Bottom)
- ""
- (format #f "~a . " (*current-context*)))
- symbol
- (if (null? (cdr properties))
- (car properties)
- properties)
+ (format #f "\\revert ~{~a~^.~}~a"
+ (if (eqv? (*current-context*) 'Bottom)
+ (cons symbol properties)
+ (cons* (*current-context*) symbol properties))
(new-line->lily-string))))
(define-display-method TimeSignatureMusic (expr parser)
(types . (general-music mark-event event))
))
+ (MeasureCounterEvent
+ . ((description . "Used to signal the start and end of a measure count.")
+ (types . (general-music measure-counter-event span-event event))
+ ))
+
(MultiMeasureRestEvent
. ((description . "Used internally by @code{MultiMeasureRestMusic}
to signal rests.")
))
))
+;; add two native utf-8 aliases. Pairs obey cp-like order: '(old new)
+(map (lambda (pair)
+ (set! language-pitch-names
+ (append language-pitch-names
+ (list (cons (cadr pair)
+ (cdr (assoc (car pair) language-pitch-names)))))))
+ '((espanol español)
+ (italiano français)))
+
(define-public (note-names-language parser str)
(_ "Select note names language.")
(let ((alist (assoc-get (string->symbol str)
(format #f "~a\\tweak ~a #~a"
(if post-event? "-" "")
(if (pair? (car tweak))
- (format #f "~a #'~a"
+ (format #f "~a.~a"
(caar tweak) (cdar tweak))
- (format #f "#'~a" (car tweak)))
+ (format #f "~a" (car tweak)))
(scheme-expr->lily-string (cdr tweak))))
(ly:music-property expr 'tweaks))))
(stencil-coordinates
end-fret-coordinate end-string-coordinate)))
(ly:round-filled-box
- (cons (car lower-left) (car upper-right))
- (cons (cdr lower-left) (cdr upper-right))
+ ;; Put limits in order, or else the intervals are considered empty
+ (ordered-cons (car lower-left) (car upper-right))
+ (ordered-cons (cdr lower-left) (cdr upper-right))
sth)))
(define (draw-xo xo-list)
(final-x (car result))
(stencils (cdr result)))
; Add the horizontal line and combine all stencils:
- (apply ly:stencil-add
- (cons
- (make-line-stencil line-width 0 0 final-x 0)
- stencils))))
+ (box-stencil
+ (apply ly:stencil-add
+ (cons
+ (make-line-stencil line-width 0 0 final-x 0)
+ stencils))
+ 0.0
+ 0.0)))
;; Parse the harp pedal definition string into list of directions (-1/0/1), #\o and #\|
(define (harp-pedals-parse-string definition-string)
(define-public (context-mod-from-music parser music)
(let ((warn #t) (mods (ly:make-context-mod)))
- (let loop ((m music) (context #f))
+ (let loop ((m music))
(if (music-is-of-type? m 'layout-instruction-event)
- (let ((symbol (cons context (ly:music-property m 'symbol))))
+ (let ((symbol (ly:music-property m 'symbol)))
(ly:add-context-mod
mods
(case (ly:music-property m 'name)
(list 'apply
(ly:music-property m 'procedure))))
((ContextSpeccedMusic)
- (loop (ly:music-property m 'element)
- (ly:music-property m 'context-type)))
+ (loop (ly:music-property m 'element)))
(else
(let ((callback (ly:music-property m 'elements-callback)))
(if (procedure? callback)
- (fold loop context (callback m))
+ (for-each loop (callback m))
(if (and warn (ly:duration? (ly:music-property m 'duration)))
(begin
(ly:music-warning
music
(_ "Music unsuitable for context-mod"))
- (set! warn #f))))))))
- context)
+ (set! warn #f)))))))))
mods))
(define-public (context-defs-from-music parser output-def music)
(string-downcase
(car (string-tokenize (utsname:sysname (uname)))))))
+(define lilypond-declarations '())
+
+(defmacro-public define-session (name value)
+ "This defines a variable @var{name} with the starting value
+@var{value} that is reinitialized at the start of each session.
+A@tie{}session basically corresponds to one LilyPond file on the
+command line. The value is recorded at the start of the first session
+after loading all initialization files and before loading the user
+file and is reinstated for all of the following sessions. This
+happens just by replacing the value, not by copying structures, so you
+should not destructively modify them. For example, lists defined in
+this manner should be changed within a session only be adding material
+to their front or replacing them altogether, not by modifying parts of
+them. It is an error to call @code{define-session} after the first
+session has started."
+ (define (add-session-variable name value)
+ (if (ly:undead? lilypond-declarations)
+ (ly:error (_ "define-session used after session start")))
+ (let ((var (make-variable value)))
+ (module-add! (current-module) name var)
+ (set! lilypond-declarations (cons var lilypond-declarations))))
+ `(,add-session-variable ',name ,value))
+
+(defmacro-public define-session-public (name value)
+ "Like @code{define-session}, but also exports @var{name}."
+ `(begin
+ (define-session ,name ,value)
+ (export ,name)))
+
+(define (session-terminate)
+ (if (ly:undead? lilypond-declarations)
+ (for-each
+ (lambda (p) (variable-set! (cadr p) (cddr p)))
+ (ly:get-undead lilypond-declarations))))
+
+(define-public (session-initialize thunk)
+ "Initialize this session. The first session in a LilyPond run is
+initialized by calling @var{thunk}, then recording the values of all
+variables in the current module as well as those defined with
+@code{define-session}. Subsequent calls of @code{session-initialize}
+ignore @var{thunk} and instead just reinitialize all recorded
+variables to their value after the initial call of @var{thunk}."
+
+;; We need to save the variables of the current module along with
+;; their values: functions defined in the module might refer to the
+;; variables.
+
+;; The entries in lilypond-declarations consist of a cons* consisting
+;; of symbol, variable, and value. Variables defined with
+;; define-session have the symbol set to #f.
+
+ (if (ly:undead? lilypond-declarations)
+ (begin
+ (for-each
+ (lambda (p)
+ (let ((var (cadr p))
+ (val (cddr p)))
+ (variable-set! var val)
+ (if (car p)
+ (module-add! (current-module) (car p) var))))
+ (ly:get-undead lilypond-declarations)))
+ (begin
+ (thunk)
+ (let ((decl (map! (lambda (v)
+ (cons* #f v (variable-ref v)))
+ lilypond-declarations)))
+ (module-for-each
+ (lambda (s v)
+ (let ((val (variable-ref v)))
+ (if (not (ly:lily-parser? val))
+ (set! decl
+ (cons
+ (cons* s v val)
+ decl)))))
+ (current-module))
+ (set! lilypond-declarations (ly:make-undead decl))))))
+
(define scheme-options-definitions
`(
;; NAMING: either
(if (memq (ly:get-option 'backend) music-string-to-path-backends)
(ly:set-option 'music-strings-to-paths #t))
-
(define-public (ly:load x)
(let* ((file-name (%search-load-path x)))
(ly:debug "[~A" file-name)
"define-grobs.scm"
"define-grob-interfaces.scm"
"define-stencil-commands.scm"
+ "scheme-engravers.scm"
"titling.scm"
"text.scm"
(,fraction? . "fraction, as pair")
(,grob-list? . "list of grobs")
(,index? . "non-negative integer")
- ;; this is built on cheap-list
- (,list-or-symbol? . "list or symbol")
(,markup? . "markup")
(,markup-command-list? . "markup command list")
(,markup-list? . "markup list")
(,rhythmic-location? . "rhythmic location")
(,scheme? . "any type")
(,string-or-pair? . "string or pair")
+ (,string-or-music? . "string or music")
(,string-or-symbol? . "string or symbol")
+ (,symbol-list? . "symbol list")
+ (,symbol-list-or-music? . "symbol list or music")
+ (,symbol-list-or-symbol? . "symbol list or symbol")
(,void? . "void")
))
(define gc-protect-stat-count
0)
+;; Undead objects that should be ignored after the first time round
+(define gc-zombies
+ (make-weak-key-hash-table 0))
+
(define-public (dump-live-object-stats outfile)
(for-each (lambda (x)
(format outfile "~a: ~a\n" (car x) (cdr x)))
(ly:set-option 'debug-gc-assert-parsed-dead #f)
(for-each
(lambda (x)
- (ly:programming-error "Parsed object should be dead: ~a" x))
+ (if (not (hashq-ref gc-zombies x))
+ (begin
+ (ly:programming-error "Parsed object should be dead: ~a" x)
+ (hashq-set! gc-zombies x #t))))
(ly:parsed-undead-list!))
(set! stats (gc-live-object-stats))
(ly:progress "Dumping live object statistics.\n")
(mtrace:start-trace (ly:get-option 'trace-memory-frequency)))
(lilypond-file handler x)
(ly:check-expected-warnings)
+ (session-terminate)
(if start-measurements
(dump-profile x start-measurements (profile-measurements)))
(if (ly:get-option 'trace-memory-frequency)
(ly:set-option 'debug-gc-assert-parsed-dead #t)
(gc)
(ly:set-option 'debug-gc-assert-parsed-dead #f)
- (for-each
- (lambda (x)
- (ly:programming-error "Parsed object should be dead: ~a" x))
- (ly:parsed-undead-list!))
+ (for-each
+ (lambda (x)
+ (if (not (hashq-ref gc-zombies x))
+ (begin
+ (ly:programming-error "Parsed object should be dead: ~a" x)
+ (hashq-set! gc-zombies x #t))))
+ (ly:parsed-undead-list!))
(if (ly:get-option 'debug-gc)
(dump-gc-protects)
(ly:reset-all-fonts))
(dump-profile "lily-run-total" '(0 0) (profile-measurements)))
failed))
-(define-public lilypond-declarations '())
-
(define (lilypond-file handler file-name)
(catch 'ly-file-failed
(lambda () (ly:parse-file file-name))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; property setting music objs.
+(define-safe-public (check-grob-path path #:optional parser location
+ #:key
+ (start 0)
+ default
+ (min 1)
+ max)
+ "Check a grob path specification @var{path}, a symbol list (or a
+single symbol), for validity and possibly complete it. Returns the
+completed specification, or @code{#f} if invalid. If optional
+@var{parser} is given, a syntax error is raised in that case,
+optionally using @var{location}. If an optional keyword argument
+@code{#:start @var{start}} is given, the parsing starts at the given
+index in the sequence @samp{Context.Grob.property.sub-property...},
+with the default of @samp{0} implying the full path.
+
+If there is no valid first element of @var{path} fitting at the given
+path location, an optionally given @code{#:default @var{default}} is
+used as the respective element instead without checking it for
+validity at this position.
+
+The resulting path after possibly prepending @var{default} can be
+constrained in length by optional arguments @code{#:min @var{min}} and
+@code{#:max @var{max}}, defaulting to @samp{1} and unlimited,
+respectively."
+ (let ((path (if (symbol? path) (list path) path)))
+ ;; A Guile 1.x bug specific to optargs precludes moving the
+ ;; defines out of the let
+ (define (unspecial? s)
+ (not (or (object-property s 'is-grob?)
+ (object-property s 'backend-type?))))
+ (define (grob? s)
+ (object-property s 'is-grob?))
+ (define (property? s)
+ (object-property s 'backend-type?))
+ (define (check c p) (c p))
+
+ (let* ((checkers
+ (and (< start 3)
+ (drop (list unspecial? grob? property?) start)))
+ (res
+ (cond
+ ((null? path)
+ ;; tricky. Should we make use of the default when the
+ ;; list is empty? In most cases, this question should be
+ ;; academical as an empty list can only be generated by
+ ;; Scheme and is likely an error. We consider this a case
+ ;; of "no valid first element, and default given".
+ ;; Usually, invalid use cases should be caught later using
+ ;; the #:min argument, and if the user explicitly does not
+ ;; catch this, we just follow through.
+ (if default (list default) '()))
+ ((not checkers)
+ ;; no checkers, so we have a valid first element and just
+ ;; take the path as-is.
+ path)
+ (default
+ (if ((car checkers) (car path))
+ (and (every check (cdr checkers) (cdr path))
+ path)
+ (and (every check (cdr checkers) path)
+ (cons default path))))
+ (else
+ (and (every check checkers path)
+ path)))))
+ (if (and res
+ (if max (<= min (length res) max)
+ (<= min (length res))))
+ res
+ (begin
+ (if parser
+ (ly:parser-error parser
+ (format #f (_ "bad grob property path ~a")
+ path)
+ location))
+ #f)))))
+
(define-public (make-grob-property-set grob gprop val)
"Make a @code{Music} expression that sets @var{gprop} to @var{val} in
@var{grob}. Does a pop first, i.e., this is not an override."
(check-pitch-against-signature context pitch barnum laziness octaveness))
(define (key-entry-notename entry)
- "Return the pitch of an entry in localKeySignature. The entry is either of the form
- '(notename . alter) or '((octave . notename) . (alter barnum . measurepos))."
- (if (number? (car entry))
- (car entry)
- (cdar entry)))
+ "Return the pitch of an @var{entry} in @code{localKeySignature}.
+The @samp{car} of the entry is either of the form @code{notename} or
+of the form @code{(octave . notename)}. The latter form is used for special
+key signatures or to indicate an explicit accidental.
+
+The @samp{cdr} of the entry is either a rational @code{alter} indicating
+a key signature alteration, or of the form
+@code{(alter . (barnum . measurepos))} indicating an alteration caused by
+an accidental in music."
+ (if (pair? (car entry))
+ (cdar entry)
+ (car entry)))
(define (key-entry-octave entry)
- "Return the octave of an entry in localKeySignature (or #f if the entry does not have
- an octave)."
+ "Return the octave of an entry in @code{localKeySignature}
+or @code{#f} if the entry does not have an octave.
+See @code{key-entry-notename} for details."
(and (pair? (car entry)) (caar entry)))
(define (key-entry-bar-number entry)
- "Return the bar number of an entry in localKeySignature (or #f if the entry does not
- have a bar number)."
- (and (pair? (car entry)) (caddr entry)))
+ "Return the bar number of an entry in @code{localKeySignature}
+or @code {#f} if the entry does not have a bar number.
+See @code{key-entry-notename} for details."
+ (and (pair? (cdr entry)) (caddr entry)))
(define (key-entry-measure-position entry)
- "Return the measure position of an entry in localKeySignature (or #f if the entry does
- not have a measure position)."
- (and (pair? (car entry)) (cdddr entry)))
+ "Return the measure position of an entry in @code{localKeySignature}
+or @code {#f} if the entry does not have a measure position.
+See @code{key-entry-notename} for details."
+ (and (pair? (cdr entry)) (cdddr entry)))
(define (key-entry-alteration entry)
"Return the alteration of an entry in localKeySignature.
For convenience, returns @code{0} if entry is @code{#f}."
(if entry
- (if (number? (car entry))
+ (if (number? (cdr entry))
(cdr entry)
(cadr entry))
0))
(set! (ly:context-property context 'localKeySignature)
(map-in-order
(lambda (entry)
- (let* ((localalt (key-entry-alteration entry))
- (localoct (key-entry-octave entry)))
+ (let* ((localalt (key-entry-alteration entry)))
(if (or (accidental-invalid? localalt)
- (not localoct)
+ (not (key-entry-bar-number entry))
(= localalt
(key-entry-alteration
(find-pitch-entry
keysig
- (ly:make-pitch localoct
+ (ly:make-pitch (key-entry-octave entry)
(key-entry-notename entry)
0)
#t #t))))
(if (>= (length siblings) 2)
(helper siblings arg)
(car arg))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; measure counter
+
+(define (measure-counter-stencil grob)
+ "Print a number for a measure count. The number is centered using
+the extents of @code{BreakAlignment} grobs associated with
+@code{NonMusicalPaperColumn} grobs. In the case of an unbroken measure, these
+columns are the left and right bounds of a @code{MeasureCounter} spanner.
+Broken measures are numbered in parentheses."
+ (let* ((orig (ly:grob-original grob))
+ (siblings (ly:spanner-broken-into orig)) ; have we been split?
+ (bounds (ly:grob-array->list (ly:grob-object grob 'columns)))
+ (refp (ly:grob-system grob))
+ ; we use the first and/or last NonMusicalPaperColumn grob(s) of
+ ; a system in the event that a MeasureCounter spanner is broken
+ (all-cols (ly:grob-array->list (ly:grob-object refp 'columns)))
+ (all-cols
+ (filter
+ (lambda (col) (eq? #t (ly:grob-property col 'non-musical)))
+ all-cols))
+ (left-bound
+ (if (or (null? siblings) ; spanner is unbroken
+ (eq? grob (car siblings))) ; or the first piece
+ (car bounds)
+ (car all-cols)))
+ (right-bound
+ (if (or (null? siblings)
+ (eq? grob (car (reverse siblings))))
+ (car (reverse bounds))
+ (car (reverse all-cols))))
+ (elts-L (ly:grob-array->list (ly:grob-object left-bound 'elements)))
+ (elts-R (ly:grob-array->list (ly:grob-object right-bound 'elements)))
+ (break-alignment-L
+ (filter
+ (lambda (elt) (grob::has-interface elt 'break-alignment-interface))
+ elts-L))
+ (break-alignment-R
+ (filter
+ (lambda (elt) (grob::has-interface elt 'break-alignment-interface))
+ elts-R))
+ (break-alignment-L-ext (ly:grob-extent (car break-alignment-L) refp X))
+ (break-alignment-R-ext (ly:grob-extent (car break-alignment-R) refp X))
+ (num (markup (number->string (ly:grob-property grob 'count-from))))
+ (num
+ (if (or (null? siblings)
+ (eq? grob (car siblings)))
+ num
+ (make-parenthesize-markup num)))
+ (num (grob-interpret-markup grob num))
+ (num (ly:stencil-aligned-to num X (ly:grob-property grob 'self-alignment-X)))
+ (num
+ (ly:stencil-translate-axis
+ num
+ (+ (interval-length break-alignment-L-ext)
+ (* 0.5
+ (- (car break-alignment-R-ext)
+ (cdr break-alignment-L-ext))))
+ X)))
+ num))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; beam slope
+;; even though kievan noteheads do not have stems, their
+;; invisible stems help with beam placement
+;; this assures that invisible stems for kievan notes are aligned
+;; to the center of kievan noteheads. that is thus where the beams'
+;; x extrema will fall
+(define-public (stem::kievan-offset-callback grob)
+ (let* ((note-heads (ly:grob-object grob 'note-heads))
+ (note-heads-grobs (if (not (null? note-heads))
+ (ly:grob-array->list note-heads)
+ '()))
+ (first-note-head (if (not (null? note-heads-grobs))
+ (car note-heads-grobs)
+ '()))
+ (note-head-w (if (not (null? first-note-head))
+ (ly:grob-extent first-note-head first-note-head X)
+ '(0 . 0))))
+ (interval-center note-head-w)))
+
+
+;; sets position of beams for Kievan notation
+(define-public (beam::get-kievan-positions grob)
+ (let* ((stems (ly:grob-object grob 'stems))
+ (stems-grobs (if (not (null? stems))
+ (ly:grob-array->list stems)
+ '()))
+ (first-stem (if (not (null? stems-grobs))
+ (car stems-grobs)
+ '()))
+ (note-heads (if (not (null? first-stem))
+ (ly:grob-object first-stem 'note-heads)
+ '()))
+ (note-heads-grobs (if (not (null? note-heads))
+ (ly:grob-array->list note-heads)
+ '()))
+ (first-note-head (if (not (null? note-heads-grobs))
+ (car note-heads-grobs)
+ '()))
+ (next-stem (if (not (null? stems))
+ (cadr stems-grobs)
+ '()))
+ (next-note-heads (if (not (null? next-stem))
+ (ly:grob-object next-stem 'note-heads)
+ '()))
+ (next-note-heads-grobs (if (not (null? next-note-heads))
+ (ly:grob-array->list next-note-heads)
+ '()))
+ (next-note-head (if (not (null? next-note-heads-grobs))
+ (car next-note-heads-grobs)
+ '()))
+ (left-pos (ly:grob-property first-note-head 'Y-offset))
+ (right-pos (ly:grob-property next-note-head 'Y-offset))
+ (direction (ly:grob-property grob 'direction))
+ (first-nh-height (ly:grob::stencil-height first-note-head))
+ (next-nh-height (ly:grob::stencil-height next-note-head))
+ (left-height (if (= direction DOWN)
+ (+ (car first-nh-height) 0.75)
+ (- (cdr first-nh-height) 0.75)))
+ (right-height (if (= direction DOWN)
+ (+ (car next-nh-height) 0.75)
+ (- (cdr next-nh-height) 0.75))))
+ (cons (+ left-pos left-height) (+ right-pos right-height))))
+
+(define-public (beam::get-kievan-quantized-positions grob)
+ (let* ((pos (ly:grob-property grob 'positions))
+ (stems (ly:grob-object grob 'stems))
+ (stems-grobs (if (not (null? stems))
+ (ly:grob-array->list stems)
+ '())))
+ (for-each
+ (lambda (g)
+ (ly:grob-set-property! g 'stem-begin-position 0)
+ (ly:grob-set-property! g 'length 0))
+ stems-grobs)
+ pos))
+
;; calculates each slope of a broken beam individually
(define-public (beam::place-broken-parts-individually grob)
(ly:beam::quanting grob '(+inf.0 . -inf.0) #f))
(ly:duration-log
(ly:event-property (event-cause grob) 'duration)))
-(define-public (stem::length grob)
- (let* ((ss (ly:staff-symbol-staff-space grob))
- (beg (ly:grob-property grob 'stem-begin-position))
- (beam (ly:grob-object grob 'beam)))
- (if (null? beam)
- (abs (- (ly:stem::calc-stem-end-position grob) beg))
- (begin
- (ly:programming-error
- "stem::length called but will not be used for beamed stem.")
- 0.0))))
-
-(define-public (stem::pure-length grob beg end)
- (let* ((ss (ly:staff-symbol-staff-space grob))
- (beg (ly:grob-pure-property grob 'stem-begin-position 0 1000)))
- (abs (- (ly:stem::pure-calc-stem-end-position grob 0 2147483646) beg))))
-
(define (stem-stub::do-calculations grob)
(and (ly:grob-property (ly:grob-parent grob X) 'cross-staff)
(not (ly:grob-property (ly:grob-parent grob X) 'transparent))))
(if (interval-empty? (interval-intersection stem_ph my_ph)) #f (coord-translate stem_ph dist)))
#f))
-;; FIXME: NEED TO FIND A BETTER WAY TO HANDLE KIEVAN NOTATION
+(define-public (note-head::calc-kievan-duration-log grob)
+ (min 3
+ (ly:duration-log
+ (ly:event-property (event-cause grob) 'duration))))
+
(define-public (note-head::calc-duration-log grob)
- (let ((style (ly:grob-property grob 'style)))
- (if (and (symbol? style) (string-match "kievan*" (symbol->string style)))
- (min 3
- (ly:duration-log
- (ly:event-property (event-cause grob) 'duration)))
- (min 2
- (ly:duration-log
- (ly:event-property (event-cause grob) 'duration))))))
+ (min 2
+ (ly:duration-log
+ (ly:event-property (event-cause grob) 'duration))))
(define-public (dots::calc-dot-count grob)
(ly:duration-dot-count
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; key signature
-(define-public (key-signature-interface::alteration-position step alter
- c0-position)
- ;; TODO: memoize - this is mostly constant.
-
- ;; fes, ges, as and bes typeset in lower octave
- (define FLAT_TOP_PITCH 2)
-
- ;; ais and bis typeset in lower octave
- (define SHARP_TOP_PITCH 4)
-
- (if (pair? step)
- (+ (cdr step) (* (car step) 7) c0-position)
- (let* ((from-bottom-pos (modulo (+ 4 49 c0-position) 7))
- (p step)
- (c0 (- from-bottom-pos 4)))
-
- (if
- (or (and (< alter 0)
- (or (> p FLAT_TOP_PITCH) (> (+ p c0) 4)) (> (+ p c0) 1))
- (and (> alter 0)
- (or (> p SHARP_TOP_PITCH) (> (+ p c0) 5)) (> (+ p c0) 2)))
-
- ;; Typeset below c_position
- (set! p (- p 7)))
-
- ;; Provide for the four cases in which there's a glitch
- ;; it's a hack, but probably not worth
- ;; the effort of finding a nicer solution.
- ;; --dl.
- (cond
- ((and (= c0 2) (= p 3) (> alter 0))
- (set! p (- p 7)))
- ((and (= c0 -3) (= p -1) (> alter 0))
- (set! p (+ p 7)))
- ((and (= c0 -4) (= p -1) (< alter 0))
- (set! p (+ p 7)))
- ((and (= c0 -2) (= p -3) (< alter 0))
- (set! p (+ p 7))))
-
- (+ c0 p))))
-
+(define-public (key-signature-interface::alteration-positions
+ entry c0-position grob)
+ (let ((step (car entry))
+ (alter (cdr entry)))
+ (if (pair? step)
+ (list (+ (cdr step) (* (car step) 7) c0-position))
+ (let* ((c-position (modulo c0-position 7))
+ (positions
+ (if (< alter 0)
+ ;; See (flat|sharp)-positions in define-grob-properties.scm
+ (ly:grob-property grob 'flat-positions '(3))
+ (ly:grob-property grob 'sharp-positions '(3))))
+ (p (list-ref positions
+ (if (< c-position (length positions))
+ c-position 0)))
+ (max-position (if (pair? p) (cdr p) p))
+ (min-position (if (pair? p) (car p) (- max-position 6)))
+ (first-position (+ (modulo (- (+ c-position step)
+ min-position)
+ 7)
+ min-position)))
+ (define (prepend x l) (if (> x max-position)
+ l
+ (prepend (+ x 7) (cons x l))))
+ (prepend first-position '())))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; annotations
(define-public (accidental-interface::calc-alteration grob)
(ly:pitch-alteration (ly:event-property (event-cause grob) 'pitch)))
+(define-public (accidental-interface::glyph-name grob)
+ (assoc-get (ly:grob-property grob 'alteration)
+ standard-alteration-glyph-name-alist))
+
(define-public cancellation-glyph-name-alist
'((0 . "accidentals.natural")))
(define (embedded-ps string)
string)
-(define (glyph-string postscript-font-name
+(define (glyph-string pango-font
+ postscript-font-name
size
cid?
w-x-y-named-glyphs)
- (define (glyph-spec w x y g)
+ (define (glyph-spec w h x y g) ; h not used
(let ((prefix (if (string? g) "/" "")))
(ly:format "~4f ~4f ~4f ~a~a"
w x y
(begin
(set! path (apply dump-path d-attr-value
font-scale
- (list (cadr rest) (caddr rest))))
+ (list (caddr rest) (cadddr rest))))
(set! next-horiz-adv (+ next-horiz-adv
(car rest)))
path))
""))))
(define (extract-glyph-info all-glyphs glyph size)
- (let* ((offsets (list-head glyph 3))
+ (let* ((offsets (list-head glyph 4))
(glyph-name (car (reverse glyph))))
(apply extract-glyph all-glyphs glyph-name size offsets)))
(define (embedded-svg string)
string)
-(define (embedded-glyph-string font size cid glyphs)
+(define (embedded-glyph-string pango-font font size cid glyphs)
(define path "")
(if (= 1 (length glyphs))
(set! path (music-string-to-path font size (car glyphs)))
(set! next-horiz-adv 0.0)
path)
-(define (woff-glyph-string font-name size cid? w-x-y-named-glyphs)
+(define (woff-glyph-string pango-font font-name size cid? w-h-x-y-named-glyphs)
(let* ((name-style (font-name-style font-name))
(family-designsize (regexp-exec (make-regexp "(.*)-([0-9]*)")
font-name))
(font (ly:paper-get-font paper `(((font-family . ,family)
,(if design-size
`(design-size . design-size)))))))
- (define (glyph-spec w x y g)
+ (define (glyph-spec w h x y g) ; h not used
(let* ((charcode (ly:font-glyph-name-to-charcode font g))
(char-lookup (format #f "&#~S;" charcode))
(glyph-by-name (eoc 'altglyph `(glyphname . ,g)))
(string-append glyph-by-name apparently-broken char-lookup)))))
(string-join (map (lambda (x) (apply glyph-spec x))
- (reverse w-x-y-named-glyphs)) "\n")))
+ (reverse w-h-x-y-named-glyphs)) "\n")))
(define glyph-string
(if (not (ly:get-option 'svg-woff)) embedded-glyph-string woff-glyph-string))
("hufnagel-fa1" . ("clefs.hufnagel.fa" -1 0))
("hufnagel-fa2" . ("clefs.hufnagel.fa" 1 0))
("hufnagel-do-fa" . ("clefs.hufnagel.do.fa" 4 0))
- ("mensural-c1" . ("clefs.mensural.c" -2 0))
- ("mensural-c2" . ("clefs.mensural.c" 0 0))
- ("mensural-c3" . ("clefs.mensural.c" 2 0))
- ("mensural-c4" . ("clefs.mensural.c" 4 0))
+ ("mensural-c1" . ("clefs.mensural.c" -4 0))
+ ("mensural-c2" . ("clefs.mensural.c" -2 0))
+ ("mensural-c3" . ("clefs.mensural.c" 0 0))
+ ("mensural-c4" . ("clefs.mensural.c" 2 0))
+ ("mensural-c5" . ("clefs.mensural.c" 4 0))
+ ("blackmensural-c1" . ("clefs.blackmensural.c" -4 0))
+ ("blackmensural-c2" . ("clefs.blackmensural.c" -2 0))
+ ("blackmensural-c3" . ("clefs.blackmensural.c" 0 0))
+ ("blackmensural-c4" . ("clefs.blackmensural.c" 2 0))
+ ("blackmensural-c5" . ("clefs.blackmensural.c" 4 0))
("mensural-f" . ("clefs.mensural.f" 2 0))
("mensural-g" . ("clefs.mensural.g" -2 0))
("neomensural-c1" . ("clefs.neomensural.c" -4 0))
("neomensural-c2" . ("clefs.neomensural.c" -2 0))
("neomensural-c3" . ("clefs.neomensural.c" 0 0))
("neomensural-c4" . ("clefs.neomensural.c" 2 0))
+ ("neomensural-c5" . ("clefs.neomensural.c" 4 0))
("petrucci-c1" . ("clefs.petrucci.c1" -4 0))
("petrucci-c2" . ("clefs.petrucci.c2" -2 0))
("petrucci-c3" . ("clefs.petrucci.c3" 0 0))
("clefs.mensural.c" . 0)
("clefs.mensural.f" . 4)
("clefs.mensural.g" . -4)
+ ("clefs.blackmensural.c" . 0)
("clefs.neomensural.c" . 0)
("clefs.petrucci.c1" . 0)
("clefs.petrucci.c2" . 0)
(let ((e '())
(c0 0)
(oct 0)
- (match (string-match "^(.*)([_^])([1-9][0-9]*)$" clef-name)))
+ (style 'default)
+ (match (string-match "^(.*)([_^])([^0-9a-zA-Z]*)([1-9][0-9]*)([^0-9a-zA-Z]*)$" clef-name)))
(if match
(begin
(set! clef-name (match:substring match 1))
(set! oct
(* (if (equal? (match:substring match 2) "^") -1 1)
- (- (string->number (match:substring match 3)) 1)))))
+ (- (string->number (match:substring match 4)) 1)))
+ (set! style
+ (cond ((equal? (match:substring match 3) "(") 'parenthesized)
+ ((equal? (match:substring match 3) "[") 'bracketed)
+ (else style)))))
(set! e (assoc-get clef-name supported-clefs))
(if e
- (let* ((musics (map make-prop-set
- `(((symbol . clefGlyph) (value . ,(car e)))
- ((symbol . middleCClefPosition)
- (value . ,(+ oct
- (cadr e)
- (assoc-get (car e) c0-pitch-alist))))
- ((symbol . clefPosition) (value . ,(cadr e)))
- ((symbol . clefOctavation) (value . ,(- oct))))))
+ (let* ((prop-list `(((symbol . clefGlyph) (value . ,(car e)))
+ ((symbol . middleCClefPosition)
+ (value . ,(+ oct
+ (cadr e)
+ (assoc-get (car e) c0-pitch-alist))))
+ ((symbol . clefPosition) (value . ,(cadr e)))
+ ((symbol . clefOctavation) (value . ,(- oct)))))
+ ;; the clefOctavationStyle property is set only when
+ ;; not 'default to calm display-lily-tests.scm
+ (prop-list (if (eq? style 'default)
+ prop-list
+ (append
+ prop-list
+ `(((symbol . clefOctavationStyle)
+ (value . ,style))))))
+ (musics (map make-prop-set prop-list))
(recalc-mid-C (make-music 'ApplyContext))
(seq (make-music 'SequentialMusic
'elements (append musics (list recalc-mid-C))))
(let ((e '())
(c0 0)
(oct 0)
- (match (string-match "^(.*)([_^])([1-9][0-9]*)$" clef-name)))
+ (style 'default)
+ (match (string-match "^(.*)([_^])([^0-9a-zA-Z]*)([1-9][0-9]*)([^0-9a-zA-Z]*)$" clef-name)))
(if match
(begin
(set! clef-name (match:substring match 1))
(set! oct
(* (if (equal? (match:substring match 2) "^") -1 1)
- (- (string->number (match:substring match 3)) 1)))))
+ (- (string->number (match:substring match 4)) 1)))
+ (set! style
+ (cond ((equal? (match:substring match 3) "(") 'parenthesized)
+ ((equal? (match:substring match 3) "[") 'bracketed)
+ (else style)))))
(set! e (assoc-get clef-name supported-clefs))
(if e
- (let* ((musics (map make-prop-set
- `(((symbol . cueClefGlyph) (value . ,(car e)))
- ((symbol . middleCCuePosition)
- (value . ,(+ oct
- (cadr e)
- (assoc-get (car e) c0-pitch-alist))))
- ((symbol . cueClefPosition) (value . ,(cadr e)))
- ((symbol . cueClefOctavation) (value . ,(- oct))))))
+ (let* ((prop-list `(((symbol . cueClefGlyph) (value . ,(car e)))
+ ((symbol . middleCCuePosition)
+ (value . ,(+ oct
+ (cadr e)
+ (assoc-get (car e) c0-pitch-alist))))
+ ((symbol . cueClefPosition) (value . ,(cadr e)))
+ ((symbol . cueClefOctavation) (value . ,(- oct)))))
+ (prop-list (if (eq? style 'default)
+ prop-list
+ (append
+ prop-list
+ `(((symbol . cueClefOctavationStyle)
+ (value . ,style))))))
+ (musics (map make-prop-set prop-list))
(recalc-mid-C (make-music 'ApplyContext))
(seq (make-music 'SequentialMusic
'elements (append musics (list recalc-mid-C))))
`((symbol . cueClefGlyph)
(symbol . middleCCuePosition)
(symbol . cueClefPosition)
- (symbol . cueClefOctavation))))
+ (symbol . cueClefOctavation)
+ (symbol . cueClefOctavationStyle))))
(recalc-mid-C (make-music 'ApplyContext))
(seq (make-music 'SequentialMusic
'elements (append musics (list recalc-mid-C))))
(define-class <Voice-state> ()
(event-list #:init-value '() #:accessor events #:init-keyword #:events)
- (when-moment #:accessor when #:init-keyword #:when)
+ (when-moment #:accessor moment #:init-keyword #:moment)
(tuning #:accessor tuning #:init-keyword #:tuning)
(split-index #:accessor split-index)
(vector-index)
(spanner-state #:init-value '() #:accessor span-state))
(define-method (write (x <Voice-state> ) file)
- (display (when x) file)
+ (display (moment x) file)
(display " evs = " file)
(display (events x) file)
(display " active = " file)
(configuration #:init-value '() #:accessor configuration)
;; Allow overriding split configuration, takes precedence over configuration
(forced-configuration #:init-value #f #:accessor forced-configuration)
- (when-moment #:accessor when #:init-keyword #:when)
+ (when-moment #:accessor moment #:init-keyword #:moment)
;; voice-states are states starting with the Split-state or later
;;
(is #:init-keyword #:voice-states #:accessor voice-states)
(define-method (write (x <Split-state> ) f)
- (display (when x) f)
+ (display (moment x) f)
(display " = " f)
(display (configuration x) f)
(if (synced? x)
(define (make-voice-states evl)
(let ((vec (list->vector (map (lambda (v)
(make <Voice-state>
- #:when (caar v)
+ #:moment (caar v)
#:tuning (cdar v)
#:events (map car (cdr v))))
evl))))
(define (helper ss-idx ss-list idx1 idx2)
(let* ((state1 (if (< idx1 (vector-length vs1)) (vector-ref vs1 idx1) #f))
(state2 (if (< idx2 (vector-length vs2)) (vector-ref vs2 idx2) #f))
- (min (cond ((and state1 state2) (moment-min (when state1) (when state2)))
- (state1 (when state1))
- (state2 (when state2))
+ (min (cond ((and state1 state2) (moment-min (moment state1) (moment state2)))
+ (state1 (moment state1))
+ (state2 (moment state2))
(else #f)))
- (inc1 (if (and state1 (equal? min (when state1))) 1 0))
- (inc2 (if (and state2 (equal? min (when state2))) 1 0))
+ (inc1 (if (and state1 (equal? min (moment state1))) 1 0))
+ (inc2 (if (and state2 (equal? min (moment state2))) 1 0))
(ss-object (if min
(make <Split-state>
- #:when min
+ #:moment min
#:voice-states (cons state1 state2)
#:synced (= inc1 inc2))
#f)))
(new-active1 (span-state vs1))
(new-active2 (span-state vs2)))
(if #f ; debug
- (display (list (when now-state) result-idx
+ (display (list (moment now-state) result-idx
active1 "->" new-active1
active2 "->" new-active2
"\n")))
(define (current-voice-state now-state voice-num)
(define vs ((if (= 1 voice-num) car cdr)
(voice-states now-state)))
- (if (or (not vs) (equal? (when now-state) (when vs)))
+ (if (or (not vs) (equal? (moment now-state) (moment vs)))
vs
(previous-voice-state vs)))
(silent-state (current-voice-state now-state (if (equal? type 'solo1) 2 1)))
(silent-notes (if silent-state (note-events silent-state) '()))
(solo-notes (if solo-state (note-events solo-state) '())))
- ;; (display (list "trying " type " at " (when now-state) solo-state silent-state "\n"))
+ ;; (display (list "trying " type " at " (moment now-state) solo-state silent-state "\n"))
(cond ((not (equal? (configuration now-state) 'apart))
current-idx)
((> (length silent-notes) 0) start-idx)
(notes2 (if vs2 (note-events vs2) '()))
(n1 (length notes1))
(n2 (length notes2)))
- ;; (display (list "analyzing step " result-idx " moment " (when now-state) vs1 vs2 "\n"))
+ ;; (display (list "analyzing step " result-idx " moment " (moment now-state) vs1 vs2 "\n"))
(max
;; we should always increase.
(cond ((and (= n1 0) (= n2 0))
(put 'apart-silence)
(1+ result-idx))
((and (= n2 0)
- (equal? (when vs1) (when now-state))
+ (equal? (moment vs1) (moment now-state))
(null? (previous-span-state vs1)))
(try-solo 'solo1 result-idx result-idx))
((and (= n1 0)
- (equal? (when vs2) (when now-state))
+ (equal? (moment vs2) (moment now-state))
(null? (previous-span-state vs2)))
(try-solo 'solo2 result-idx result-idx))
;; (display result)
(set! result (map
;; forced-configuration overrides, if it is set
- (lambda (x) (cons (when x) (or (forced-configuration x) (configuration x))))
+ (lambda (x) (cons (moment x) (or (forced-configuration x) (configuration x))))
(vector->list result)))
(if #f ;; pc-debug
(display result))
--- /dev/null
+;;;; This file is part of LilyPond, the GNU music typesetter.
+;;;;
+;;;; Copyright (C) 2012 David Nalesnik <david.nalesnik@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/>.
+
+
+(define-public (Measure_counter_engraver context)
+ "This engraver numbers ranges of measures, which is useful in parts as an
+aid for counting repeated measures. There is no requirement that the
+affected measures be repeated, however. The user delimits the area to
+receive a count with @code{\\startMeasureCount} and
+@code{\\stopMeasureCount}.
+
+Each element of a count is a spanner, and a count is thus a series of
+spanners. Each spanner is bounded by the first @code{CommandColumn} of
+successive measures, and boundaries are shared by adjoining spanners."
+ (let ((count-spanner '()) ; a single element of the count
+ (go? #f) ; is the count in progress?
+ (stop? #f) ; do we end the count?
+ (last-measure-seen 0)
+ (new-measure? #f)
+ (elapsed 0))
+
+ (make-engraver
+ (listeners ((measure-counter-event engraver event)
+ (set! last-measure-seen (ly:context-property context 'currentBarNumber))
+ (set! new-measure? #t)
+ (cond
+ ((and (= START (ly:event-property event 'span-direction))
+ go?)
+ (begin
+ (set! stop? #t)
+ (ly:input-warning
+ (ly:event-property event 'origin)
+ "count not ended before another begun")))
+ ((= START (ly:event-property event 'span-direction))
+ (set! go? #t))
+ ((= STOP (ly:event-property event 'span-direction))
+ (begin
+ (set! stop? #t)
+ (set! go? #f))))))
+
+ ((process-music trans)
+ (let ((col (ly:context-property context 'currentCommandColumn))
+ (now (ly:context-property context 'measurePosition))
+ (current-bar (ly:context-property context 'currentBarNumber)))
+ ; If the counter has been started, make sure we're in a new bar
+ ; before finishing a count-spanner and starting a new one.
+ ; Since we consider all CommandColumns encountered, we need this
+ ; check so that a count-spanner is not created for each pair.
+ (if (and (ly:grob? count-spanner)
+ (> current-bar last-measure-seen))
+ (set! new-measure? #t))
+ (if new-measure?
+ (begin
+ ; Check if we have the first column of the measure.
+ ; The possibility of initial grace notes is considered.
+ (if (moment<=? now ZERO-MOMENT)
+ (begin
+ ; If we have the first column, finish the previous
+ ; counter-spanner (if there is one).
+ (if (ly:grob? count-spanner)
+ (begin
+ (ly:spanner-set-bound! count-spanner RIGHT col)
+ (ly:pointer-group-interface::add-grob count-spanner 'columns col)
+ (ly:engraver-announce-end-grob trans count-spanner col)
+ (set! count-spanner '())))
+ ; if count is over, reset variables
+ (if stop?
+ (begin
+ (set! elapsed 0)
+ (set! stop? #f)))
+ ; if count is in progress, begin a counter object
+ (if go?
+ (let* ((c (ly:engraver-make-grob trans 'MeasureCounter col))
+ (counter (ly:grob-property c 'count-from)))
+ (ly:spanner-set-bound! c LEFT col)
+ (ly:pointer-group-interface::add-grob c 'columns col)
+ (set! (ly:grob-property c 'count-from) (+ counter elapsed))
+ (set! count-spanner c)
+ (set! elapsed (1+ elapsed))))
+ (set! new-measure? #f)))))
+ (set! last-measure-seen current-bar)))
+
+ ((finalize trans)
+ (if go?
+ (begin
+ (set! go? #f)
+ (ly:grob-suicide! count-spanner)
+ (set! count-spanner '())
+ (ly:warning "measure count left unfinished")))))))
(cons (min-max-crawler min cddr possible-extrema)
(min-max-crawler max cddr possible-extrema)))))
-(define (path-min-max origin pointlist)
-
- (define (line-part-min-max x1 x2)
- (list (min x1 x2) (max x1 x2)))
-
- (define (bezier-part-min-max x1 x2 x3 x4)
- ((lambda (x) (list (reduce min 10000 x) (reduce max -10000 x)))
- (map
- (lambda (x)
- (+ (* x1 (expt (- 1 x) 3))
- (+ (* 3 (* x2 (* (expt (- 1 x) 2) x)))
- (+ (* 3 (* x3 (* (- 1 x) (expt x 2))))
- (* x4 (expt x 3))))))
- (if (< (+ (expt x2 2) (+ (expt x3 2) (* x1 x4)))
- (+ (* x1 x3) (+ (* x2 x4) (* x2 x3))))
- (list 0.0 1.0)
- (filter
- (lambda (x) (and (>= x 0) (<= x 1)))
- (append
- (list 0.0 1.0)
- (map (lambda (op)
- (if (not (eqv? 0.0
- (- (+ x1 (* 3 x3)) (+ x4 (* 3 x2)))))
- ;; Zeros of the bezier curve
- (/ (+ (- x1 (* 2 x2))
- (op x3
- (sqrt (- (+ (expt x2 2)
- (+ (expt x3 2) (* x1 x4)))
- (+ (* x1 x3)
- (+ (* x2 x4) (* x2 x3)))))))
- (- (+ x1 (* 3 x3)) (+ x4 (* 3 x2))))
- ;; Apply L'hopital's rule to get the zeros if 0/0
- (* (op 0 1)
- (/ (/ (- x4 x3) 2)
- (sqrt (- (+ (* x2 x2)
- (+ (* x3 x3) (* x1 x4)))
- (+ (* x1 x3)
- (+ (* x2 x4) (* x2 x3)))))))))
- (list + -))))))))
-
- (define (bezier-min-max x1 y1 x2 y2 x3 y3 x4 y4)
- (map (lambda (x)
- (apply bezier-part-min-max x))
- `((,x1 ,x2 ,x3 ,x4) (,y1 ,y2 ,y3 ,y4))))
+(define (line-part-min-max x1 x2)
+ (list (min x1 x2) (max x1 x2)))
+
+(define (bezier-part-min-max x1 x2 x3 x4)
+ ((lambda (x) (list (reduce min 10000 x) (reduce max -10000 x)))
+ (map
+ (lambda (x)
+ (+ (* x1 (expt (- 1 x) 3))
+ (+ (* 3 (* x2 (* (expt (- 1 x) 2) x)))
+ (+ (* 3 (* x3 (* (- 1 x) (expt x 2))))
+ (* x4 (expt x 3))))))
+ (if (< (+ (expt x2 2) (+ (expt x3 2) (* x1 x4)))
+ (+ (* x1 x3) (+ (* x2 x4) (* x2 x3))))
+ (list 0.0 1.0)
+ (filter
+ (lambda (x) (and (>= x 0) (<= x 1)))
+ (append
+ (list 0.0 1.0)
+ (map (lambda (op)
+ (if (not (eqv? 0.0
+ (exact->inexact (- (+ x1 (* 3 x3)) (+ x4 (* 3 x2))))))
+ ;; Zeros of the bezier curve
+ (/ (+ (- x1 (* 2 x2))
+ (op x3
+ (sqrt (- (+ (expt x2 2)
+ (+ (expt x3 2) (* x1 x4)))
+ (+ (* x1 x3)
+ (+ (* x2 x4) (* x2 x3)))))))
+ (- (+ x1 (* 3 x3)) (+ x4 (* 3 x2))))
+ ;; Apply L'hopital's rule to get the zeros if 0/0
+ (* (op 0 1)
+ (/ (/ (- x4 x3) 2)
+ (sqrt (- (+ (* x2 x2)
+ (+ (* x3 x3) (* x1 x4)))
+ (+ (* x1 x3)
+ (+ (* x2 x4) (* x2 x3)))))))))
+ (list + -))))))))
+
+(define (bezier-min-max x1 y1 x2 y2 x3 y3 x4 y4)
+ (map (lambda (x)
+ (apply bezier-part-min-max x))
+ `((,x1 ,x2 ,x3 ,x4) (,y1 ,y2 ,y3 ,y4))))
+
+(define (line-min-max x1 y1 x2 y2)
+ (map (lambda (x)
+ (apply line-part-min-max x))
+ `((,x1 ,x2) (,y1 ,y2))))
- (define (line-min-max x1 y1 x2 y2)
- (map (lambda (x)
- (apply line-part-min-max x))
- `((,x1 ,x2) (,y1 ,y2))))
+(define (path-min-max origin pointlist)
((lambda (x)
(list
;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; clefs
+
+(define-public (clef-octavation-markup oct style)
+ "The octavation sign formatting function. @var{oct} is supposed to be
+a string holding the octavation number, @var{style} determines the
+way the octavation number is displayed."
+ (let* ((delim (if (symbol? style)
+ (case style
+ ((parenthesized) (cons "(" ")"))
+ ((bracketed) (cons "[" "]"))
+ (else (cons "" "")))
+ (cons "" "")))
+ (text (string-concatenate (list (car delim) oct (cdr delim)))))
+
+ (make-vcenter-markup text)))
+
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; metronome marks
(length (filter (lambda (x) (not (null? x)))
art-list)))
+ (define (string-number event)
+ "Get the string-number from @var{event}. Return @var{#f}
+if no string-number is present."
+ (let ((num (ly:event-property event 'string-number)))
+ (and (integer? num) (positive? num) num)))
+
(define (determine-frets-and-strings
notes
defined-strings
articulations)
finger-found))
- (define (string-number event)
- "Get the string-number from @var{event}. Return @var{#f}
-if no string-number is present."
- (let ((num (ly:event-property event 'string-number)))
- (if (number? num)
- num
- #f)))
-
(define (delete-free-string string)
(if (number? string)
(set! free-strings
defined-strings defined-fingers))
;;; body of determine-frets-and-strings
- (let* ((pitch-alist (apply (lambda (mylist)
- (let ((index -1))
- (map (lambda (note)
- (begin
- (set! index (1+ index))
- (cons (note-pitch note)
- index)))
- mylist)))
- notes '()))
- (pitches (map note-pitch notes)))
+ (let* ((pitches (map note-pitch notes))
+ (pitch-alist (map cons pitches (iota (length pitches)))))
;; handle notes with strings assigned and fingering of 0
(for-each
(defined-strings (map (lambda (x)
(if (null? x)
x
- (ly:event-property x 'string-number)))
+ (or (string-number x) '())))
(car specified-info)))
(defined-fingers (map (lambda (x)
(if (null? x)
depth = ..
-SUBDIRS=auxiliar build
+SUBDIRS=build
SEXECUTABLES=convert-ly lilypond-book abc2ly etf2ly midi2ly lilypond-invoke-editor musicxml2ly lilysong lilymidi
Nowadays abc2ly outputs explicits barlines (?)
"""
## < 2.2
- outf.write ("\n\\set Score.defaultBarType = \"empty\"\n")
+ outf.write ("\n\\set Score.defaultBarType = \"\"\n")
def dump_slyrics (outf):
'|]' : '|.',
'||' : '||',
'[|' : '||',
-':|' : ':|',
+':|' : ':|.',
'|:' : '|:',
-'::' : ':|:',
+'::' : ':|.|:',
'|1' : '|',
'|2' : '|',
-':|2' : ':|',
+':|2' : ':|.',
'|' : '|'
}
bar_dict = {
+++ /dev/null
-depth=../..
-
-EXTRA_DIST_FILES = $(call src-wildcard,*.sh) $(call src-wildcard,*.py)
-EXTRA_DIST_FILES += pfx2ttf.fontforge
-EXTRA_DIST_FILES += lily-git.tcl
-EXTRA_DIST_FILES += ref_check.tely
-
-include $(depth)/make/stepmake.make
-
-default:
--- /dev/null
+#!/bin/sh
+#
+# Indent and untabify source files (given by their
+# filenames in the command line), according to
+# LilyPond source style standards.
+
+elisp_expression='(progn
+ (delete-trailing-whitespace)
+ (indent-region (point-min) (point-max) nil)
+ (untabify (point-min) (point-max))
+ (save-buffer))'
+for f in "$@"; do
+ emacs -batch "$f" --eval "${elisp_expression}"
+done
--- /dev/null
+# This file is part of LilyPond, the GNU music typesetter.
+#
+# Copyright (C) 2012 Joe Neeman <joeneeman@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/>.
+
+# A gdb plugin debugging skylines. To use the plugin, make sure that
+# skyline_viewer.py is in your PATH, then add
+# source /path/to/show_skyline_command.py
+# to your .gdbinit file. The 'vsky' and 'hsky' commands for
+# drawing skylines will then be available in gdb.
+
+import gdb
+from subprocess import Popen, PIPE
+from math import isinf
+
+SKYLINE_VIEWER = 'skyline_viewer.py'
+
+# Function taken from GCC
+def find_type(orig, name):
+ typ = orig.strip_typedefs()
+ while True:
+ search = str(typ) + '::' + name
+ try:
+ return gdb.lookup_type(search)
+ except RuntimeError:
+ pass
+ # The type was not found, so try the superclass. We only need
+ # to check the first superclass, so we don't bother with
+ # anything fancier here.
+ field = typ.fields()[0]
+ if not field.is_base_class:
+ raise ValueError, "Cannot find type %s::%s" % (str(orig), name)
+ typ = field.type
+
+# Class adapted from GCC
+class ListIterator:
+ def __init__ (self, val):
+ self.val = val
+ self.nodetype = find_type (val.type, '_Node')
+ self.nodetype = self.nodetype.strip_typedefs ().pointer ()
+
+ head = val['_M_impl']['_M_node']
+ self.base = head['_M_next']
+ self.head = head.address
+
+ def __iter__ (self):
+ return self
+
+ def next (self):
+ if self.base == self.head:
+ raise StopIteration
+ elt = self.base.cast (self.nodetype).dereference ()
+ self.base = elt['_M_next']
+ return elt['_M_data']
+
+def to_list (list_val):
+ return list (ListIterator (list_val))
+
+def skyline_to_lines (sky_value):
+ """Turns a gdb.Value into a list of line segments."""
+ sky_d = int (sky_value['sky_'])
+ buildings = to_list (sky_value['buildings_'])
+
+ def bld_to_line (bld):
+ y_intercept = float (bld['y_intercept_']) * sky_d
+ slope = float (bld['slope_']) * sky_d
+ x1 = float (bld['start_'])
+ x2 = float (bld['end_'])
+
+ if isinf (y_intercept) or isinf (x1) or isinf (x2):
+ return None
+ return (x1, y_intercept + slope * x1, x2, y_intercept + slope * x2)
+
+ ret = map (bld_to_line, buildings)
+ return [r for r in ret if r is not None]
+
+viewer = Popen(SKYLINE_VIEWER, stdin=PIPE)
+def add_skyline(lines):
+ global viewer
+ try:
+ for line in lines:
+ x1, y1, x2, y2 = line
+ viewer.stdin.write('(%f,%f) (%f,%f)\n' % (x1, y1, x2, y2))
+ viewer.stdin.write('\n')
+ except IOError:
+ # If the pipe is broken, it probably means that someone closed
+ # the viewer window. Open another one.
+ viewer = Popen(SKYLINE_VIEWER, stdin=PIPE)
+ add_skyline(lines)
+
+class ShowSkylineCommand (gdb.Command):
+ "Show a skyline graphically."
+
+ def __init__ (self, command_name):
+ super (ShowSkylineCommand, self).__init__ (command_name,
+ gdb.COMMAND_DATA,
+ gdb.COMPLETE_SYMBOL, False)
+
+ def to_lines (self, skyline):
+ pass
+
+ def invoke (self, arg, from_tty):
+ global plot
+
+ val = gdb.parse_and_eval (arg)
+ typ = val.type
+
+ # If they passed in a reference or pointer to a skyline,
+ # dereference it.
+ if typ.code == gdb.TYPE_CODE_PTR or typ.code == gdb.TYPE_CODE_REF:
+ val = val.referenced_value ()
+ typ = val.type
+
+ if typ.tag == 'Skyline_pair':
+ sky = val['skylines_']
+ arr = sky['array_']
+ add_skyline (self.to_lines (arr[0]))
+ add_skyline (self.to_lines (arr[1]))
+
+ elif typ.tag == 'Skyline':
+ add_skyline (self.to_lines (val))
+
+class ShowVSkylineCommand (ShowSkylineCommand):
+ "Show a vertical skyline."
+
+ def __init__ (self):
+ super (ShowVSkylineCommand, self).__init__ ("vsky")
+
+ def to_lines (self, skyline):
+ return skyline_to_lines (skyline)
+
+class ShowHSkylineCommand (ShowSkylineCommand):
+ "Show a horizontal skyline."
+
+ def __init__ (self):
+ super (ShowHSkylineCommand, self).__init__ ("hsky")
+
+ def to_lines (self, skyline):
+ lines = skyline_to_lines (skyline)
+ # Because it is a horizontal skyline, reflect around the line y=x.
+ return [(y1, x1, y2, x2) for (x1, y1, x2, y2) in lines]
+
+ShowHSkylineCommand()
+ShowVSkylineCommand()
--- /dev/null
+#!/usr/bin/env python
+
+# This file is part of LilyPond, the GNU music typesetter.
+#
+# Copyright (C) 2012 Joe Neeman <joeneeman@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/>.
+
+# A GTK+ program for debugging skylines. The program reads a sequence
+# of line segments from stdin (one line segment per line of stdin, in the format
+# '(x1, y1) (x2, y2)'). A skyline is terminated by an empty line, which
+# causes the skyline to be displayed on the screen.
+
+from threading import Thread
+from math import isinf
+import gtk
+import gobject
+import goocanvas
+import sys
+import re
+
+class GtkSkylineCanvas (goocanvas.Canvas):
+ """A Canvas for displaying skylines."""
+ def __init__ (self):
+ super (GtkSkylineCanvas, self).__init__ ()
+ self.connect ('size-allocate', GtkSkylineCanvas.rescale)
+ self.x_min = float ('inf')
+ self.x_max = float ('-inf')
+ self.y_min = float ('inf')
+ self.y_max = float ('-inf')
+
+ self.colors = ('black', 'red', 'green', 'blue', 'maroon', 'olive', 'teal')
+ self.cur_color_index = 0
+
+ def rescale (self, allocation):
+ width = (self.x_max - self.x_min + 1) * 1.1
+ height = (self.y_max - self.y_min + 1) * 1.1
+ if width <= 0 or height <= 0:
+ return
+
+ scale_x = allocation.width / width
+ scale_y = allocation.height / height
+ scale = min (scale_x, scale_y)
+ self.set_scale (scale)
+
+ center_x = (self.x_max + self.x_min) / 2
+ center_y = (self.y_max + self.y_min) / 2
+ actual_width = allocation.width / scale
+ actual_height = allocation.height / scale
+ actual_min_x = center_x - actual_width / 2
+ actual_max_x = center_x + actual_width / 2
+ actual_min_y = center_y - actual_height / 2
+ actual_max_y = center_y + actual_height / 2
+
+ self.set_bounds (actual_min_x, actual_min_y, actual_max_x, actual_max_y)
+ self.scroll_to (actual_min_x, actual_min_y)
+
+ def add_skyline (self, lines):
+ """Adds a skyline to the current canvas, in a new color.
+
+ The canvas will be rescaled, if necessary, to make room for the
+ new skyline."""
+ # Flip vertically, because goocanvas thinks higher numbers are
+ # further down, while lilypond thinks they're further up.
+ lines = [(x1, -y1, x2, -y2) for (x1, y1, x2, y2) in lines]
+
+ color = self.colors[self.cur_color_index]
+ self.cur_color_index = (self.cur_color_index + 1) % len (self.colors)
+
+ # Update the bounding box of the skylines.
+ x_vals = [s[0] for s in lines] + [s[2] for s in lines]
+ y_vals = [s[1] for s in lines] + [s[3] for s in lines]
+ self.x_min = min ([self.x_min] + x_vals)
+ self.x_max = max ([self.x_max] + x_vals)
+ self.y_min = min ([self.y_min] + y_vals)
+ self.y_max = max ([self.y_max] + y_vals)
+
+ # Add the lines to the canvas.
+ root = self.get_root_item ()
+ for (x1, y1, x2, y2) in lines:
+ goocanvas.polyline_new_line (root, x1, y1, x2, y2,
+ stroke_color=color,
+ line_width=0.05)
+ self.rescale (self.get_allocation ())
+
+# We want to run the gtk main loop in a separate thread so that
+# the main thread can be responsible for reading stdin.
+class SkylineWindowThread (Thread):
+ """A thread that runs a Gtk.Window displaying a skyline."""
+
+ def run (self):
+ gtk.gdk.threads_init ()
+ self.window = None
+ self.canvas = None
+ gtk.main ()
+
+ # This should only be called from the Gtk main loop.
+ def _destroy_window (self, window):
+ sys.exit (0)
+
+ # This should only be called from the Gtk main loop.
+ def _setup_window (self):
+ if self.window is None:
+ self.window = gtk.Window ()
+ self.canvas = GtkSkylineCanvas ()
+ self.window.add (self.canvas)
+ self.window.connect ("destroy", self._destroy_window)
+ self.window.show_all ()
+
+ # This should only be called from the Gtk main loop.
+ def _add_skyline (self, lines):
+ self._setup_window ()
+ self.canvas.add_skyline (lines)
+
+ def add_skyline (self, lines):
+ # Copy the lines, just in case someone modifies them.
+ gobject.idle_add (self._add_skyline, list (lines))
+
+thread = SkylineWindowThread ()
+thread.setDaemon (True)
+thread.start ()
+
+def lines(infile):
+ line = infile.readline()
+ while len(line) > 0:
+ yield line[:-1]
+ line = infile.readline()
+
+point_re_str = r'\(([a-z.0-9-]*) *,([a-z0-9.-]*)\)'
+line_re_str = point_re_str + r' +' + point_re_str
+line_re = re.compile (line_re_str)
+
+# The main loop just reads lines from stdin and feeds them to the
+# display.
+current_skyline = []
+for line in lines(sys.stdin):
+ if not line:
+ thread.add_skyline(current_skyline)
+ current_skyline = []
+ continue
+
+ m = re.search (line_re, line)
+ if m is None:
+ print('line did not match')
+ else:
+ pts = map(float, m.groups())
+ if not any(map(isinf, pts)):
+ current_skyline.append(pts)
STEPMAKE_TEMPLATES=script install po
-EXTRA_DIST_FILES = website-known-missing-files.txt
-
include $(depth)/make/stepmake.make
# Should we install these? This should be handled by sysadmin or
# usage:
def usage ():
- print 'usage: %s [-s style] [-o <outfile>] [-q] BIBFILES...'
+ print 'usage: bib2texi.py [-s style] [-o <outfile>] [-q] BIBFILES...'
print '-q suppresses most output'
(options, files) = getopt.getopt (sys.argv[1:], 's:o:hq', [])
usage ()
sys.exit (2)
+marker = """@c This file was autogenerated
+@c from: %s
+@c by: %s
+
+""" % (", ".join(files), sys.argv[0])
def strip_extension (f, ext):
(p, e) = os.path.splitext (f)
sys.stderr.write ("Bibtex generated an empty file!")
sys.exit (1)
-open (output, 'w').write (bbl)
+fout = open (output, 'w')
+fout.write (marker)
+fout.write (bbl)
+fout.close ()
def cleanup (tmpfile):
for a in ['aux','bbl', 'blg']:
print "@end macro"
print ""
+print "@c This file was autogenerated"
+print "@c from: VERSION"
+print "@c by: %s" % sys.argv[0]
+print ""
print "@c ************************ Version numbers ************"
+print ""
+
make_macro("version", VERSION)
make_macro("versionStable", VERSION_STABLE)
make_macro("versionDevel", VERSION_DEVEL)
-
+print "@c *****************************************************"
#!@PYTHON@
# -*- coding: utf-8 -*-
-# create-version-itexi.py
+# create-weblinks-itexi.py
""" when being called on lilypond.org, pass it the location of the
top source dir on the command-line. """
'Regression tests for ': 'Regressionstests für ',
'PDF of regtests for ': 'PDF der Regressionstests für ',
+ 'abc2ly Regression tests for ': 'abc2ly Regressionstests für ',
+ 'PDF of abc2ly regtests for ': 'PDF der abc2ly Regressionstests für ',
+ 'lilypond-book Regression tests for ': 'lilypond-book Regressionstests für ',
+ 'PDF of lilypond-book regtests for ': 'PDF der lilypond-book Regressionstests für ',
'MusicXML Regression tests for ': 'MusicXML Regressionstests für ',
'PDF of MusicXML regtests for ': 'PDF der MusicXML Regressionstests für ',
'Regression tests for ': 'Pruebas de regresión para ',
'PDF of regtests for ': 'Pruebas en PDF para ',
+ 'abc2ly Regression tests for ': 'Pruebas de regresión de abc2ly para ',
+ 'PDF of abc2ly regtests for ': 'Pruebas de abc2ly en PDF para ',
+ 'lilypond-book Regression tests for ': 'Pruebas de regresión de lilypond-book para ',
+ 'PDF of lilypond-book regtests for ': 'Pruebas de lilypond-book en PDF para ',
'MusicXML Regression tests for ': 'Pruebas de regresión de MusicXML para ',
'PDF of MusicXML regtests for ': 'Pruebas de MusicXML en PDF para ',
'Regression tests for ': 'Tests de régression pour ',
'PDF of regtests for ': 'PDF des tests de régression pour ',
+ 'abc2ly Regression tests for ': 'Tests de régression de abc2ly pour ',
+ 'PDF of abc2ly regtests for ': 'PDF des tests de régression de abc2ly pour ',
+ 'lilypond-book Regression tests for ': 'Tests de régression de lilypond-book pour ',
+ 'PDF of lilypond-book regtests for ': 'PDF des tests de régression de lilypond-book pour ',
'MusicXML Regression tests for ': 'Tests de régression de MusicXML pour ',
'PDF of MusicXML regtests for ': 'PDF des tests de régression de MusicXML pour ',
'Regression tests for ': 'Regressziós tesztek - verzió: ',
'PDF of regtests for ': 'PDF formátumban - verzió: ',
+ 'abc2ly Regression tests for ': 'abc2ly regressziós tesztek - verzió: ',
+ 'PDF of abc2ly regtests for ': 'PDF formátumban - verzió: ',
+ 'lilypond-book Regression tests for ': 'lilypond-book regressziós tesztek - verzió: ',
+ 'PDF of lilypond-book regtests for ': 'PDF formátumban - verzió: ',
'MusicXML Regression tests for ': 'MusicXML regressziós tesztek - verzió: ',
'PDF of MusicXML regtests for ': 'PDF formátumban - verzió: ',
'Regression tests for ': '回帰テスト バージョン ',
'PDF of regtests for ': '回帰テスト (PDF 版) バージョン ',
+ 'abc2ly Regression tests for ': 'abc2ly 回帰テスト バージョン ',
+ 'PDF of abc2ly regtests for ': 'abc2ly 回帰テスト (PDF 版) バージョン ',
+ 'lilypond-book Regression tests for ': 'lilypond-book 回帰テスト バージョン ',
+ 'PDF of lilypond-book regtests for ': 'lilypond-book 回帰テスト (PDF 版) バージョン ',
'MusicXML Regression tests for ': 'MusicXML 回帰テスト バージョン ',
'PDF of MusicXML regtests for ': 'MusicXML 回帰テスト (PDF 版) バージョン ',
'Regression tests for ': 'Regressietesten voor ',
'PDF of regtests for ': 'PDF van regressietesten voor ',
+ 'abc2ly Regression tests for ': 'abc2ly regressietesten voor ',
+ 'PDF of abc2ly regtests for ': 'abc2ly regressietesten voor ',
+ 'lilypond-book Regression tests for ': 'lilypond-book regressietesten voor ',
+ 'PDF of lilypond-book regtests for ': 'lilypond-book regressietesten voor ',
'MusicXML Regression tests for ': 'MusicXML regressietesten voor ',
'PDF of MusicXML regtests for ': 'MusicXML regressietesten voor ',
'Regression tests for ': '回归测试 ',
'PDF of regtests for ': '回归测试的 PDF ',
+ 'abc2ly Regression tests for ': 'abc2ly 回归测试 ',
+ 'PDF of abc2ly regtests for ': 'abc2ly 的 PDF 回归测试 ',
+ 'lilypond-book Regression tests for ': 'lilypond-book 回归测试 ',
+ 'PDF of lilypond-book regtests for ': 'lilypond-book 的 PDF 回归测试 ',
'MusicXML Regression tests for ': 'MusicXML 回归测试 ',
'PDF of MusicXML regtests for ': 'MusicXML 的 PDF 回归测试 ',
VERSION = str(major)+'.'+str(minor)+'.'+str(patch)
def _ (string, lang):
- return translations.get (lang.split ('_')[0], {}).get (string, string)
+ return translations.get (lang.split ('_')[0], {}).get (string, None)
getTrans = _
# let's not barf, but print a warning when something's missing
def getTrans(text, lang):
+ if not lang:
+ return text
trans = _ (text, lang)
if not trans:
trans = text
return trans
def macroLang(name, lang):
- if (lang != ''):
+ if lang:
return name + '-' + lang
return name
string += "}"
make_macro(name, string)
-def make_download_source(name, vstring, version, lang):
+def make_download_source(name, version, lang):
+ assert "." in version
+ vstring = "v%s.%s" % tuple(version.split(".", 2)[0:2])
string = "@uref{http://download.linuxaudio.org/lilypond/sources/"
string += vstring + "/"
string += "lilypond-" + version + ".tar.gz"
make_ver_link(macroLang("doctarball"+name, lang),
url, getTrans("Doc tarball for ", lang)+version)
+print "@c This file was autogenerated"
+print "@c from: VERSION"
+print "@c by: %s" % sys.argv[0]
+print ""
print "@c ************************ Download binaries ************"
+print ""
+
make_all_downloads("Stable", VERSION_STABLE)
make_all_downloads("Devel", VERSION_DEVEL)
print "@c ************************ Download source ************"
-# FIXME: icky hard-coding! -gp
+print ""
+
for lang in langs:
- print "@c *********", lang, "***"
- make_download_source("downloadStableSource","v2.14",VERSION_STABLE,lang)
- make_download_source("downloadDevelSource","v2.15",VERSION_DEVEL,lang)
+ print "@c *********", lang or "en", "***"
+ make_download_source("downloadStableSource", VERSION_STABLE, lang)
+ make_download_source("downloadDevelSource", VERSION_DEVEL, lang)
print "@c ************************ Manual links ************"
+print ""
+
for lang in langs:
- print "@c *********", lang, "***"
- make_manual_links("Stable", VERSION_STABLE,lang)
- make_manual_links("Devel", VERSION_DEVEL,lang)
+ print "@c *********", lang or "en", "***"
+ make_manual_links("Stable", VERSION_STABLE, lang)
+ make_manual_links("Devel", VERSION_DEVEL, lang)
- make_doctarball_links("Stable", VERSION_STABLE,lang)
- make_doctarball_links("Devel", VERSION_DEVEL,lang)
+ make_doctarball_links("Stable", VERSION_STABLE, lang)
+ make_doctarball_links("Devel", VERSION_DEVEL, lang)
print "@c ************************ Regtest links ************"
-for lang in langs:
- print "@c *********", lang, "***"
- make_regtest_links("Stable", VERSION_STABLE,lang)
- make_regtest_links("Devel", VERSION_DEVEL,lang)
-
+print ""
+for lang in langs:
+ print "@c *********", lang or "en", "***"
+ make_regtest_links("Stable", VERSION_STABLE, lang)
+ make_regtest_links("Devel", VERSION_DEVEL, lang)
+print "@c ***************************************************"
--- /dev/null
+#!@PYTHON@
+import string
+import getopt
+import sys
+import os
+import shutil
+(opts, args) = getopt.getopt (sys.argv[1:], 'b:cdg:m:o:st:', [])
+transform_base = None
+group = None
+owner = None
+transform = None
+mode = None
+copy = False
+create_dir = False
+
+for (o,a) in opts:
+ if o == '-b':
+ transform_base = a
+ elif o == '-c':
+ copy = True
+ elif o == '-d':
+ create_dir = True
+ elif o == '-g':
+ group = a
+ elif o == '-m':
+ mode = string.atoi (a, 8)
+ elif o == '-o':
+ owner = a
+ elif o == '-s':
+ strip = True
+ elif o == '-t':
+ transform = a
+ elif o == '-h':
+ print ''' Usage: $0 [OPTION]... SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 -d DIRECTORIES...
+
+In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
+In the second, create the directory path DIR.
+
+Options:
+-b=TRANSFORMBASENAME
+-c copy source (using $cpprog) instead of moving (using $mvprog).
+-d create directories instead of installing files.
+-g GROUP $chgrp installed files to GROUP.
+-m MODE $chmod installed files to MODE.
+-o USER $chown installed files to USER.
+-s strip installed files (using $stripprog).
+-t=TRANSFORM
+--help display this help and exit.
+--version display version info and exit.'''
+ sys.exit (0)
+
+if not mode:
+ if create_dir:
+ mode = 0755
+ else:
+ mode = 0644
+
+
+chown_me = []
+
+dest = None
+if not create_dir:
+ dest = args.pop()
+
+for f in args:
+ if create_dir:
+ if os.path.isdir (f):
+ continue
+
+ os.makedirs (f, mode=mode)
+ chown_me.append (f)
+ else:
+ if copy:
+ if os.path.exists (dest) and not os.path.isdir (dest):
+ os.remove (dest)
+ shutil.copy2 (f, dest)
+ else:
+ shutil.move (f, dest)
+
+ if os.path.isdir (dest):
+ chown_me.append (os.path.join (dest, os.path.basename (f)))
+ else:
+ chown_me.append (dest)
+
+for f in chown_me:
+ os.chmod (f, mode)
+ if group <> None or owner <> None:
+ os.chown (f, group, owner)
+
+
+
+
+
input_filename = ""
glob_input = ""
template = '''\input texinfo
+
+@c This file was autogenerated
+@c from: %s
+@c by: %s
+
@setfilename %%(name)s.info
@settitle %%(title)s
%s
@bye
-''' % include_snippets
+''' % (", ".join(files), sys.argv[0], include_snippets)
for opt in options:
o = opt[0]
else:
# not Unix philosophy, but hey, at least we notice when
# we don't distribute any .ly files.
- sys.stderr.write ("No files specified. Doing nothing")
+ sys.stderr.write ("No files specified. Doing nothing. Use -h to display usage.")
--- /dev/null
+#!@PYTHON@
+import re
+import sys
+
+PROGRAM = sys.argv[0]
+VERSION = sys.argv[1]
+defs = []
+for i in open (VERSION).readlines ():
+ i = re.sub ('#.*','', i)
+ m = re.search ('([^ =]*)[\t ]*=[ \t]*([^ \t]*)[ \t]*\n', i)
+ if m:
+ defs.append ((m.group (1), m.group (2)))
+
+sys.stdout.write (r'''
+/*
+ Automatically generated from %(VERSION)s
+ by %(PROGRAM)s.
+*/
+#ifndef VERSION_HH
+#define VERSION_HH
+''' % vars ())
+
+for name, expansion in defs:
+ # GUILE leaks autoconf data into userspace.
+ sys.stdout.write (r'''
+#ifdef %(name)s
+#undef %(name)s
+#endif /* %(name)s */
+#define %(name)s "%(expansion)s"
+''' % vars ())
+
+if ('MY_PATCH_LEVEL', '') in defs:
+ sys.stdout.write (r'''
+#define NO_MY_PATCHLEVEL
+#define TOPLEVEL_VERSION MAJOR_VERSION "." MINOR_VERSION "." PATCH_LEVEL
+''')
+else:
+ sys.stdout.write (r'''
+#define TOPLEVEL_VERSION MAJOR_VERSION "." MINOR_VERSION "." PATCH_LEVEL "." MY_PATCH_LEVEL
+''')
+
+sys.stdout.write(r'''
+#endif /* VERSION_HH */
+''')
+
#
# create hard or symbolic links to SOURCEDIR/FILES in DESTDIR
#
-# If --prepend-suffix is specified, link to foo.bar will be called fooSUFFIX.bar.
-# Shell wildcards expansion is performed on FILES.
+# If symbolic or hard links are not provided by the operating system,
+# copies will be made instead. However, if the operating system
+# support symbolic or hard links, then this program expects to
+# operate on a filesystem which supports them too.
+#
+# If --prepend-suffix is specified, link to foo.bar will be called
+# fooSUFFIX.bar. Shell wildcards expansion is performed on FILES.
+#
+# No check is performed on FILES type; in particular, if FILES
+# expansions contain a directory and hard links are requested,
+# this program may fail non-gracefully.
+#
+# Attempts to make hard links across different filesystems are
+# caught and replaced by copies.
import sys
import os
import glob
import getopt
+import shutil
optlist, args = getopt.getopt (sys.argv[1:], '', ['prepend-suffix='])
link_type, source_dir, dest_dir = args[0:3]
insert_suffix = lambda p: p
if link_type == 'symbolic':
- link = os.symlink
+ if hasattr (os, 'symlink'):
+ link = os.symlink
+ else:
+ link = shutil.copy
elif link_type == 'hard':
- link = os.link
+ if hasattr (os, 'link'):
+ link = os.link
+ else:
+ link = shutil.copy
else:
sys.stderr.write(sys.argv[0] + ': ' + link_type + ": wrong argument, expected 'symbolic' or 'hard'\n")
sys.exit (1)
def force_link (src,dest):
if os.path.exists (dest):
- os.system ('rm -f ' + dest)
- link (src, dest)
+ os.remove (dest)
+ try:
+ link (src, dest)
+ except OSError, e: # can't use "as" because GUB has python 2.4.5.
+ if e.errno == 18:
+ shutil.copy (src, dest)
+ else:
+ raise
os.utime (dest, None)
map (force_link, sourcefiles, destfiles)
summary += '<p>%d unchanged</p>' % len (unchanged)
+ me = sys.argv[0]
+
html = '''<html>
<head>
<title>LilyPond regression test results</title>
+<meta name="author" content="This file was autogenerated by %(me)s">
<script language="javascript" type="text/javascript">
// <![CDATA[
var rows = document.getElementsByTagName("tr");
--- /dev/null
+#!@PYTHON@
+import os
+import re
+import string
+import sys
+
+
+entities = {
+ "&" : 'amp',
+ "`" : 'apos',
+ '>' : 'gt',
+ '<' : 'lt',
+ '"' : 'quot',
+ }
+
+def txt2html (s):
+ for i in entities.keys ():
+ s = re.sub (i, '\001' + entities[i] + ';', s);
+ s = re.sub ('\001', '&', s);
+ return s
+
+for a in sys.argv[1:]:
+ # hmm, we need: text2html out/foe.txt -> out/foe.html,
+ # -o is a bit overkill?
+ # outfile = os.path.basename (os.path.splitext(a)[0]) + '.html'
+ outfile = os.path.splitext(a)[0] + '.html'
+
+ try:
+ os.unlink(outfile)
+ except:
+ pass
+
+ s = r"""
+
+<html>
+<head>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
+</head>
+
+<body><pre>
+%s
+</pre></body></html>
+""" % txt2html (open (a).read ())
+ open (outfile, 'w').write (s)
+
+
#!@PYTHON@
#-*- coding: utf-8 -*-
-##### This is web_post.py. This script deals with translations
+##### This is website_post.py. This script deals with translations
##### in the "make website" target.
import sys
###### Actual program
+me = sys.argv[0]
dir = sys.argv[1]
os.chdir(dir)
def makeFooter (filename, currentLang):
footer = '''<p id="languages">
+<!-- These links were autogenerated by %(me)s -->
%(other)s: %(lst)s.
<br>
%(browser_language)s
#### add google tracker goals
if (line.find("href=\"http://download.linuxaudio.org") >= 0):
# TODO: more ugly hardcoding to make releases hard. :(
- if (line.find('2.14') >= 0):
- line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.14\');\" href=')
- elif (line.find('2.15') >= 0):
- line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.15\');\" href=')
+ if (line.find('2.16') >= 0):
+ line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.16\');\" href=')
+ elif (line.find('2.17') >= 0):
+ line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.17\');\" href=')
### add language selection footer
if (line.find("<div id=\"verifier_texinfo\">") >= 0):
outfile.write("<div id=\"footer\">\n")
static_files = {
os.path.join (outdir, 'index.html'):
'''<META HTTP-EQUIV="refresh" content="0;URL=Documentation/web/index.html">
-<html><body>Redirecting to the documentation index...</body></html>\n''',
+<html>
+<head>
+<title>Redirecting...</title>
+<meta name="author" content="This file was autogenerated by %s">
+</head>
+<body>Redirecting to the documentation index...</body>
+</html>
+''' % sys.argv[0],
os.path.join (outdir, 'VERSION'):
package_version + '\n',
}
in_name = sys.argv[1]
out_name = sys.argv[2]
- print "input file name",in_name
- print "output file name",out_name
in_file = open(in_name,'r')
out_file= open(out_name, 'w')
help_summary = (
_ ('''Update LilyPond input to newer version. By default, update from the
version taken from the \\version command, to the current LilyPond version.''')
++ "\n"
++ _ ("If FILE is `-', read from standard input.")
++ "\n\n"
+ _ ("Examples:")
+ '''
$ convert-ly -e old.ly
ly.progress (_ ("Applying conversion: "), newline = False)
- last_conversion = ()
+ last_conversion = None
+ errors = 0
try:
- if not conv_list:
- last_conversion = to_version
for x in conv_list:
if x != conv_list[-1]:
ly.progress (tup_to_str (x[0]), newline = False)
ly.error (_ ("Error while converting")
+ '\n'
+ _ ("Stopping at last successful rule"))
+ errors += 1
- return (last_conversion, str)
+ return (last_conversion, str, errors)
self.version = version
def do_one_file (infile_name):
- ly.progress (_ ("Processing `%s\'... ") % infile_name, True)
+ ly.progress (_ (u"Processing `%s\'... ") % infile_name, True)
if infile_name:
infile = open (infile_name, 'r')
raise InvalidVersion (".".join ([str(n) for n in from_version]))
- (last, result) = do_conversion (input, from_version, to_version)
+ (last, result, errors) = do_conversion (input, from_version, to_version)
+ if global_options.force_current_version and \
+ (last is None or last == to_version):
+ last = str_to_tuple (program_version)
if last:
- if global_options.force_current_version and last == to_version:
- last = str_to_tuple (program_version)
-
if global_options.diff_version_update:
if result == input:
# check the y in x.y.z (minor version number)
elif not global_options.skip_version_add:
result = newversion + '\n' + result
- ly.progress ('\n')
-
- if global_options.edit:
- try:
- os.remove(infile_name + '~')
- except:
- pass
- os.rename (infile_name, infile_name + '~')
- outfile = open (infile_name, 'w')
- else:
- outfile = sys.stdout
-
+ ly.progress ('\n')
- outfile.write (result)
+ if global_options.edit:
+ try:
+ os.remove (infile_name + '~')
+ except:
+ pass
+ os.rename (infile_name, infile_name + '~')
+ outfile = open (infile_name, 'w')
+ else:
+ outfile = sys.stdout
+ outfile.write (result)
+
sys.stderr.flush ()
+ return errors
+
def do_options ():
opt_parser = get_option_parser()
(options, args) = opt_parser.parse_args ()
identify ()
+ errors = 0
for f in files:
+ f = f.decode (sys.stdin.encoding or "utf-8")
if f == '-':
f = ''
elif not os.path.isfile (f):
- ly.error (_ ("%s: Unable to open file") % f)
- if len (files) == 1:
- sys.exit (1)
+ ly.error (_ (u"%s: Unable to open file") % f)
+ errors += 1
continue
try:
- do_one_file (f)
+ errors += do_one_file (f)
except UnknownVersion:
- ly.error (_ ("%s: Unable to determine version. Skipping") % f)
+ ly.error (_ (u"%s: Unable to determine version. Skipping") % f)
+ errors += 1
except InvalidVersion:
# Compat code for 2.x and 3.0 syntax ("except .. as v" doesn't
# work in python 2.4!):
t, v, b = sys.exc_info ()
- ly.error (_ ("%s: Invalid version string `%s' \n"
+ ly.error (_ (u"%s: Invalid version string `%s' \n"
"Valid version strings consist of three numbers, "
"separated by dots, e.g. `2.8.12'") % (f, v.version) )
+ errors += 1
+
+ if errors:
+ ly.warning (ly.ungettext ("There was %d error.",
+ "There were %d errors.", errors) % errors)
+ sys.exit (1)
main ()
last_time = g.timesig
if 'start' in g.repeats:
- e = e + ' \\bar "|:" '
+ e = e + ' \\bar ".|:" '
# we don't attempt voltas since they fail easily.
if g:
gap = rat_add (gap, g.length ())
if 'stop' in g.repeats:
- k = k + ' \\bar ":|" '
+ k = k + ' \\bar ":|." '
k = '%sglobal = { %s }\n\n ' % (self.staffid (), k)
return k
nr = 0
for i in global_options.custom_packages:
nr += 1
- print imp.load_source ("book_custom_package%s" % nr, i)
+ progress (str(imp.load_source ("book_custom_package%s" % nr, i)))
if global_options.warranty:
srcdir=${srcdir:-.}
set -ux
-AUTOGEN_INPUT_CHECKSUM=`cat $srcdir/configure.in $srcdir/stepmake/aclocal.m4 | md5sum | cut -b 1-32`
+AUTOGEN_INPUT_CHECKSUM=`cat $srcdir/configure.in $srcdir/aclocal.m4 | md5sum | cut -b 1-32`
CHECKSUM_FILE=autogen.checksum
+++ /dev/null
-# -*-Makefile-*-
-# title specific top level makefile for StepMake
-
-# subdir level:
-#
-depth = ..
-
-# descent order into subdirectories:
-#
-SUBDIRS = bin stepmake
-
-# list of distribution files:
-#
-SCRIPTS = aclocal.m4 autogen.sh
-README_FILES = README
-README_TXT_FILES =
-EXTRA_DIST_FILES = $(README_FILES) $(SCRIPTS)
-NON_ESSENTIAL_DIST_FILES = $(README_TXT_FILES)
-#
-
-# bootstrap stepmake:
-#
-STEPMAKE_TEMPLATES= texinfo
-include $(depth)/make/stepmake.make
-
-# don't install stepmake
-install: local-install
- @echo Not installing stepmake
-
-localclean:
- rm -f bin/*.pyc
+++ /dev/null
-\input texinfo @c -*-texinfo-*-
-@setfilename INSTALL.info
-@settitle INSTALL
-
-@node Top, , , (dir)
-@top
-
-
-@unnumberedsec Name
-
-
-INSTALL - installing StepMake
-
-@unnumberedsec Description
-
-
-This page documents installation and usage of StepMake
-
-@unnumberedsec Abstract
-
-
-StepMake is a drop-in package that takes care of generic Makefile and
-packaging/distribution issues. It enables you to write only the simplest of
-Makefile snippets, while providing a series powerful make targets. Features
-include speed, wildcarding, out/ dir build, stateless Makefiles and package
-clustering. It includes some handy scripts for making (package-)diffs and
-patches, making binary distributions etc.
-
-To use StepMake with your package, you do something remotely like:
-@example
-
- tar xzf releases/stepmake-0.1.23
- cd package-x.x.x/ # package to be StepMake-ised
- ./../stepmake-0.1.23/bin/stepmakeise.sh
-
-@end example
-
-You'll have to customize at least the files:
-@example
-
- ./VERSION .
- ./configure.in
-
-@end example
-
-to your package's needs. You might want to take a look at:
-@example
-
- ./make/Toplevel.make.in
- ./config.hh.in
- ./config.make.in
-
-@end example
-
-Also, you should put a Makefile in every subdirectory of your
-package. These makefiles generally are quite simple, e.g. this
-is a the makefile for an include directory of LilyPond:
-@example
-
- # lily/include/Makefile
-
- depth = ../..
- include $(depth)/make/Stepmake.make
-
-@end example
-
-it will identify all @code{.h, .hh, ...} files and take care of distributing
-them.
-
-There's a @file{make/Template.make} that you can use as an example.
-See also the Makefiles in the LilyPond or Yodl package.
-
-Once included in your package, StepMake (or in fact, any
-StepMake-ised package) behaves as a normal subdirectory;
-make commands such as 'make dist' recurse into the stepmake tree
-(For a list of available targets, type @code{make help} after
-configuring).
-Stepmake (and any changes made) will be distributed with the main
-pacakage. However, StepMake doesn't lose its independency, change
-to the stepmake directory, and it'll behave as a main package.
-You shouldn't version directory names of subpackages, otherwise
-you'll see that package twice in each patch when you upgrade.
-
-@unnumberedsec Prerequisites
-
-
-To use StepMake with a package you need:
-
-@itemize @bullet
-@item A GNU system: StepMake is known to work on these GNU systems: Linux
- (PPC, intel), FreeBSD, AIX, NeXTStep, IRIX, Digital Unix and Solaris.
- If you have the Cygnus WINDOWS32 port of the GNU utils, it will even
- work in Windows NT/95, but we don't promise to support it.
-@item GNU make
-@item GNU autoconf
-@end itemize
-
-@unnumberedsec Recommended
-
-
-Although not strictly necessary, these are recommended to have.
-
-@itemize @bullet
-@item Python
-@item Yodl. All documentation will be in Yodl. (1.22.jcn3)
-@item GNU find
-@end itemize
-
-@unnumberedsec Internals
-
-
-Over time, we put a lot of effort in the configure, make, distribute
-system (CMDS) for LilyPond. Some months ago, we realised it was not
-standard GNU --- we require GNU make for building, and Python for extra
-scripting. In an effort to be more GNU, we tried automake, but after two
-weeks we realised the costs were too high for us and we reverted to our
-own system (see @file{automake.urgh}). Not long after that i was confronted
-with two other packages that lacked a decent CMDS. I realised that Lily's
-would be perfect, it's modular and easy. The only problem was to make a
-clean cut between generic and Lily specific stuff. The result was
-StepMake: a bunch of generic makefiles, found in:
-@example
-
- stepmake/stepmake/*.make
-
-@end example
-
-eneric helper scripts:
-@example
-
- stepmake/bin/*.sh
- stepmake/bin/*.py
-
-@end example
-
-and modular configure functions:
-@example
-
- stepmake/configure.in
- stepmake/aclocal.m4
- stepmake/config.hh.in
- stepmake/config.make.in
-
-@end example
-
-Of course, every package has its own configure- and make peculiarities.
-The best way to create the configure scripts is to copy them from
-stepmake@footnote{Actually, stepmake/bin/stepmakeise.sh will do
-that for you.} into you package's toplevel directory. For most
-packages, you'll only have to comment in/out some functions in
-@file{configure.in}.
-
-Package specific makefiles go in:
-@example
-
- make/Targets.make
- make/Rulese.make
- make/Substitute.make
-
-@end example
-
-and are included by the generic StepMake makefiles.
-
-@unnumberedsec Maintaining
-
-
-If you want to make and manage (binary) distributions, create and apply
-patches, you'll need some framework that's outside of the package's
-sourcetree.
-For a number of simple maintenance tasks, StepMake will therefore assume
-the following directory structure:
-
-Check and update the layout with the command:
-@example
-
- ./stepmake/bin/stepdirs.sh
-
-@end example
-
-@unnumberedsec See also
-
-
-@code{../PATCHES.txt}
-
-@unnumberedsec Configuring
-
-
-Stepmake comes with a number of precooked configure functions for
-general needs, such as AC_STEPMAKE_COMPILE for simple C development
-and AC_STEPMAKE_CXX for C++.
-
-See configure.in and comment in/out the functions that your package
-needs. For specific needs, you can write your own autoconf code,
-see @code{info autoconf}.
-
-@example
-
- doos/ # gnu/windows32 build and binary releases
- harmonia -> harmonia-x.y.z
- harmonia-x.y.z/
- lilypond -> lilypond-x.y.z # symlink to development directory
- lilypond-x.y.z/ # current development
- patches/ # patches between different releases
- RedHat/BUILD # RedHat build and binary releases
- RedHat/RPMS
- RedHat/SPECS
- releases/ # .tar.gz releases
- test/ # tarballs and diffs from current version
- yodl -> yodl-1.30.17
- yodl-1.30.17
-
-@end example
-
-with prefix @file{$HOME/usr/src}
-and (for building rpms only) in @file{$HOME/.rpmrc}:
-@example
-
- topdir: /home/fred/usr/src/RedHat
-
-@end example
-
-
-@unnumberedsec Authors
-
-@itemize @bullet
-@item @email{hanwen@@cs.uu.nl, Han-Wen Nienhuys},
- @uref{http://www.cs.uu.nl/people/hanwen}
- @*
- Main author.
-
-@item @email{janneke@@gnu.org, Jan Nieuwenhuizen},
- @uref{http://www.xs4all.nl/~jantien}
- @*
- Main author.
-@item @email{daboys@@austin.rr.com, Jeffrey B. Reed},
- Windows-nt fixes.
-@end itemize
-
-
-@bye
+++ /dev/null
-StepMake
-
-This is a simple generic make package.
-It is being used by LilyPond and Harmonia
-(and StepMake itself, of course)
-
-You're looking at her embryonal state -- things are *supposed*
-to be broken.
-
-Fixes/patches/suggestions appreciated.
-
-StepMake 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.
-
-Jan Nieuwenhuizen <janneke@gnu.org>
-ftp://pcnov095.win.tue.nl/pub/lilypond/development
-
+++ /dev/null
-dnl aclocal.m4 -*-shell-script-*-
-dnl StepMake subroutines for configure.in
-
-
-### mostly interal macros
-
-# Get full path of executable ($1)
-AC_DEFUN(STEPMAKE_GET_EXECUTABLE, [
- ## which doesn't work in ash, if /usr/bin/which isn't installed
- ## type -p doesn't work in ash
- ## command -v doesn't work in zsh
- ## command -v "$1" 2>&1
- ## this test should work in ash, bash, pdksh (ksh), zsh
- type -p $1 2>/dev/null | tail -n 1 | awk '{print $NF}'
-])
-
-
-# Get version string from executable ($1)
-AC_DEFUN(STEPMAKE_GET_VERSION, [
- ## "$1" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
- ##
- ## ARG.
- ## Workaround for broken Debian gcc version string:
- ## gcc (GCC) 3.1.1 20020606 (Debian prerelease)
- ##
- ## -V: Workaround for python
-
- changequote(<<, >>)#dnl
-
- ## Assume and hunt for dotted version multiplet.
- ## use eval trickery, because we cannot use multi-level $() instead of ``
- ## for compatibility reasons.
-
- ## grab the first version number in --version output.
- eval _ver=\"\`("$1" --version || "$1" -V) 2>&1 |
- grep -E '(^| )[0-9][0-9]*\.[0-9]' |
- head -n 1 |
- tr ' ' '\n' |
- sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' |
- grep -E '(^| )[0-9][0-9]*\.[0-9]' |
- head -n 1\`\"
-
- if test -z "$_ver"; then
- ## If empty, try date [fontforge]
- eval _ver=\"\`("$1" --version || "$1" -V) 2>&1 | grep '[0-9]\{6,8\}' \
- | head -n 1 \
- | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\"
- fi
- echo "$_ver"
- changequote([, ])#dnl
-])
-
-# Calculate simplistic numeric version from version string ($1)
-# As yet, we have no need for something more elaborate.
-AC_DEFUN(STEPMAKE_NUMERIC_VERSION, [
- echo "$1" | awk -F. '
- {
- if ([$]3) {three = [$]3}
- else {three = 0}
- }
- {printf "%.0f\n", [$]1*1000000 + [$]2*1000 + three}'
-])
-
-
-# Add item ($2) to list ($1, one of 'OPTIONAL', 'REQUIRED')
-AC_DEFUN(STEPMAKE_ADD_ENTRY, [
- eval "$1"=\"`eval echo \"'$'$1\" \"$2\"`\"
-])
-
-# Check if tested program ($2) was found ($1).
-# If not, add entry to missing-list ($3, one of 'OPTIONAL', 'REQUIRED').
-# We could abort here if a 'REQUIRED' program is not found
-AC_DEFUN(STEPMAKE_OPTIONAL_REQUIRED, [
- STEPMAKE_CHECK_SEARCH_RESULT($1)
- if test $? -ne 0; then
- STEPMAKE_ADD_ENTRY($3, $2)
- if test "$3" = "REQUIRED"; then
- command="echo ERROR: $2 not found"
- # abort configure process here?
- else
- command="- echo $2 not found"
- fi
- eval "$1"='$command'
- false
- else
- true
- fi
-])
-
-
-# Return if tested proram ($1) was found (true) or not (false).
-AC_DEFUN(STEPMAKE_CHECK_SEARCH_RESULT, [
- r="`eval echo '$'"$1"`"
- if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"$1"`' : '.*\(echo\)' > /dev/null; then
- true
- else
- ##STEPMAKE_WARN(cannot find $2. $3)
- false
- fi
-])
-
-
-# Check version of program ($1)
-# If version ($4: optional argument, supply if version cannot be
-# parsed using --version or -V ) is smaller than requested ($3), add
-# entry to missing-list ($2, one of 'OPTIONAL', 'REQUIRED').
-AC_DEFUN(STEPMAKE_CHECK_VERSION, [
- r="`eval echo '$'"$1"`"
- AC_MSG_CHECKING([$r version])
- exe=`STEPMAKE_GET_EXECUTABLE($r)`
- if test -n "$4"; then
- ver="$4"
- else
- ver=`STEPMAKE_GET_VERSION($exe)`
- fi
- num=`STEPMAKE_NUMERIC_VERSION($ver)`
- req=`STEPMAKE_NUMERIC_VERSION($3)`
- AC_MSG_RESULT([$ver])
- if test "$num" -lt "$req"; then
- STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
- fi
- vervar="`echo $1 | tr '[a-z]' '[A-Z]'`_VERSION"
- eval `echo $vervar=$num`
-## AC_SUBST(`eval echo $vervar`)
-])
-
-# Check version of program ($1)
-# If version is greater than or equals unsupported ($3),
-# add entry to unsupported list ($2, 'UNSUPPORTED')
-AC_DEFUN(STEPMAKE_CHECK_VERSION_UNSUPPORTED, [
- r="`eval echo '$'"$1"`"
- AC_MSG_CHECKING([$r version])
- exe=`STEPMAKE_GET_EXECUTABLE($r)`
- ver=`STEPMAKE_GET_VERSION($exe)`
- num=`STEPMAKE_NUMERIC_VERSION($ver)`
- sup=`STEPMAKE_NUMERIC_VERSION($3)`
- AC_MSG_RESULT([$ver])
- if test "$num" -ge "$sup"; then
- STEPMAKE_ADD_ENTRY($2, ["$r < $3 (installed: $ver)"])
- fi
-])
-
-### Macros to build configure.in
-
-
-AC_DEFUN(STEPMAKE_BIBTEX2HTML, [
- STEPMAKE_PROGS(BIBTEX2HTML, bibtex2html bib2html, $1)
- if test "$BIBTEX2HTML" = "bib2html"; then
- BIBTEX2HTML_FLAGS='$< $(@)'
- else
- BIBTEX2HTML_FLAGS='-o $(@D)/$(*F) $<'
- fi
- AC_SUBST(BIBTEX2HTML)
- AC_SUBST(BIBTEX2HTML_FLAGS)
-])
-
-
-AC_DEFUN(STEPMAKE_BISON, [
- # ugh, automake: we want (and check for) bison
- AC_PROG_YACC
-
- STEPMAKE_PROGS(BISON, bison, $1)
-
- # urg. should test functionality rather than version.
- if test "$BISON" = "bison" -a -n "$2"; then
- STEPMAKE_CHECK_VERSION(BISON, $1, $2)
- fi
-])
-
-AC_DEFUN(STEPMAKE_COMPILE_BEFORE, [
- # -O is necessary to get inlining
- CFLAGS=${CFLAGS-""}
- CXXFLAGS=${CXXFLAGS-$CFLAGS}
- LDFLAGS=${LDFLAGS-""}
- optimise_b=yes
- profile_b=no
- debug_b=yes
- pipe_b=yes
-
- AC_ARG_ENABLE(debugging,
- [AS_HELP_STRING([--enable-debugging],
- [compile with debugging info. Default: on])],
- [debug_b=$enableval])
-
- AC_ARG_ENABLE(optimising,
- [AS_HELP_STRING([--enable-optimising],
- [compile with optimising. Default: on])],
- [optimise_b=$enableval])
-
- AC_ARG_ENABLE(profiling,
- [AS_HELP_STRING([--enable-profiling],
- [compile with gprof support. Default: off])],
- [profile_b=$enableval])
-
- AC_ARG_ENABLE(pipe,
- [AS_HELP_STRING([--enable-pipe],
- [compile with -pipe. Default: on])],
- [pipe_b=$enableval])
-
- if test "$optimise_b" = yes; then
- AC_DEFINE(NDEBUG)
- DEFINES="$DEFINES -DNDEBUG"
- OPTIMIZE=" -O2 -finline-functions"
- fi
-
- if test $profile_b = yes; then
- EXTRA_LIBS="-pg"
- OPTIMIZE="$OPTIMIZE -pg"
- fi
-
- if test $debug_b = yes; then
- OPTIMIZE="$OPTIMIZE -g"
- fi
-])
-
-AC_DEFUN(STEPMAKE_COMPILE, [
-
- AC_REQUIRE([STEPMAKE_COMPILE_BEFORE])
- AC_REQUIRE([AC_PROG_CC])
-
- STEPMAKE_OPTIONAL_REQUIRED(CC, cc, $1)
- LD='$(CC)'
- AC_SUBST(LD)
-
- # If -pipe requested, test if it works and add to CFLAGS.
- if test "$pipe_b" = yes; then
- save_cflags="$CFLAGS"
- CFLAGS=" -pipe $CFLAGS";
- AC_CACHE_CHECK([whether compiler understands -pipe],
- [stepmake_cv_cflags_pipe],
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[/* -pipe test */]])],
- [stepmake_cv_cflags_pipe=yes],
- [stepmake_cv_cflags_pipe=no]))
- CFLAGS=$save_cflags
- if test $stepmake_cv_cflags_pipe = yes; then
- OPTIMIZE="$OPTIMIZE -pipe"
- fi
- fi
-
- CFLAGS="$CFLAGS $OPTIMIZE"
- CPPFLAGS=${CPPFLAGS-""}
-
- AC_MSG_CHECKING([for IEEE-conformance compiler flags])
- save_cflags="$CFLAGS"
- case "$host" in
- alpha*-*-*)
- dnl should do compile test?
- AC_MSG_RESULT(-mieee)
- CFLAGS=" -mieee $CFLAGS"
- ;;
- *)
- AC_MSG_RESULT([none])
- ;;
- esac
-
- AC_SUBST(cross_compiling)
- AC_SUBST(CFLAGS)
- AC_SUBST(CPPFLAGS)
- AC_SUBST(LDFLAGS)
- AC_SUBST(DEFINES)
- AC_SUBST(EXTRA_LIBS)
-])
-
-AC_DEFUN(STEPMAKE_CXX, [
- AC_PROG_CXX
- STEPMAKE_OPTIONAL_REQUIRED(CXX, c++, $1)
-
- CXXFLAGS="$CXXFLAGS $OPTIMIZE"
- LD='$(CXX)'
-
- AC_SUBST(CXX)
- AC_SUBST(CXXFLAGS)
- AC_SUBST(LD)
-])
-
-
-AC_DEFUN(STEPMAKE_CXXTEMPLATE, [
- AC_CACHE_CHECK([whether explicit instantiation is needed],
- stepmake_cv_need_explicit_instantiation,
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- template <class T> struct foo { static int baz; };
- template <class T> int foo<T>::baz = 1;
- ]], [[ return foo<int>::baz; ]])],[stepmake_cv_need_explicit_instantiation=no],[stepmake_cv_need_explicit_instantiation=yes]))
- if test x"$stepmake_cv_need_explicit_instantiation"x = x"yes"x; then
- AC_DEFINE(NEED_EXPLICIT_INSTANTIATION)
- fi
-])
-
-AC_DEFUN(STEPMAKE_GXXCODEGENBUG, [
- AC_MSG_CHECKING([options for known g++ bugs])
- case "$GXX:$CXX_VERSION" in
- yes:400600[[0-2]])
- AC_MSG_RESULT([-fno-optimize-sibling-calls (tail call bug)])
- CXXFLAGS="$CXXFLAGS -fno-optimize-sibling-calls"
- ;;
- yes:400700?)
- AC_MSG_RESULT([-fno-tree-vrp (comparison bug)])
- CXXFLAGS="$CXXFLAGS -fno-tree-vrp"
- ;;
- *) AC_MSG_RESULT([none])
- esac
- AC_SUBST(CXXFLAGS)
-])
-
-
-AC_DEFUN(STEPMAKE_DATADIR, [
- if test "$datadir" = "\${prefix}/share"; then
- datadir='${prefix}/share'
- fi
- presome=${prefix}
- if test "$prefix" = "NONE"; then
- presome=${ac_default_prefix}
- fi
-
- build_package_datadir=$ugh_ugh_autoconf250_builddir/out$CONFIGSUFFIX/share/$package
-
- DATADIR=`echo ${datadir} | sed "s!\\\${datarootdir}!${prefix}/share!"`
- DATADIR=`echo ${DATADIR} | sed "s!\\\${prefix}!$presome!"`
- BUILD_PACKAGE_DATADIR=`echo ${build_package_datadir} | sed "s!\\\${prefix}!$presome!"`
-
- AC_SUBST(datadir)
- AC_SUBST(datarootdir)
- AC_SUBST(build_package_datadir)
- AC_DEFINE_UNQUOTED(DATADIR, ["${DATADIR}"])
- AC_DEFINE_UNQUOTED(BUILD_PACKAGE_DATADIR, ["${BUILD_PACKAGE_DATADIR}"])
-])
-
-## ugh: cut & paste programming from datadir.
-AC_DEFUN(STEPMAKE_LIBDIR, [
-
- if test "$libdir" = "\${exec_prefix}/lib"; then
- libdir='${exec_prefix}/lib'
- fi
- presome=$exec_prefix
- build_package_libdir=$ugh_ugh_autoconf250_builddir/out$CONFIGSUFFIX/lib/$package
-
- LIBDIR=`echo ${libdir} | sed "s!\\\${exec_prefix}!$presome!"`
- BUILD_PACKAGE_LIBDIR=`echo ${build_package_libdir} | sed "s!\\\${exec_prefix}!$presome!"`
-
- AC_SUBST(libdir)
- AC_SUBST(build_package_libdir)
- AC_DEFINE_UNQUOTED(LIBDIR, ["${LIBDIR}"])
- AC_DEFINE_UNQUOTED(BUILD_PACKAGE_LIBDIR, ["${BUILD_PACKAGE_LIBDIR}"])
-])
-
-
-AC_DEFUN(STEPMAKE_PREFIX_EXPAND_FIXUP, [
- # undo expanding of explicit --infodir=/usr/share
- # to ease install-time override with prefix=...
- strip=`echo $includedir | eval sed s@^$prefix@@`
- if test "$includedir" = "`eval echo $prefix$strip`"; then
- includedir='${prefix}'$strip''
- fi
- strip=`echo $libdir | eval sed s@^$exec_prefix@@`
- if test "$libdir" = "`eval echo $exec_prefix$strip`"; then
- libdir='${exec_prefix}'$strip''
- fi
- strip=`echo $infodir | eval sed s@^$datarootdir@@`
- if test "$infodir" = "`eval echo $datarootdir$strip`"; then
- infodir='${datarootdir}'$strip''
- fi
- strip=`echo $mandir | eval sed s@^$datarootdir@@`
- if test "$mandir" = "`eval echo $datarootdir$strip`"; then
- mandir='${datarootdir}'$strip''
- fi
-])
-
-
-AC_DEFUN(STEPMAKE_END, [
- STEPMAKE_PREFIX_EXPAND_FIXUP
-
- AC_SUBST(OPTIONAL)
- AC_SUBST(REQUIRED)
-
- AC_CONFIG_FILES([$CONFIGFILE.make:config.make.in])
- AC_OUTPUT
-
- if test -n "$OPTIONAL"; then
- echo
- echo "WARNING: Please consider installing optional programs: $OPTIONAL"
- fi
-
- if test -n "$REQUIRED"; then
- echo
- echo "ERROR: Please install required programs: $REQUIRED"
- fi
-
- if test -n "$UNSUPPORTED"; then
- echo
- echo "ERROR: Please use older version of programs: $UNSUPPORTED"
- fi
-
- if test -n "$OPTIONAL$REQUIRED$UNSUPPORTED"; then
- echo
- echo "See INSTALL.txt for more information on how to build $PACKAGE_NAME"
- if test -f config.cache ; then
- echo "Remove config.cache before rerunning ./configure"
- fi
- fi
-
- if test -n "$REQUIRED$UNSUPPORTED"; then
- rm -f $srcdir/GNUmakefile
- exit 1
- fi
-
- # regular in-place build
- # test for srcdir_build = yes ?
- if test "$srcdir_build" = "yes"; then
- rm -f $srcdir/GNUmakefile
- cp $srcdir/GNUmakefile.in $srcdir/GNUmakefile
- chmod 444 $srcdir/GNUmakefile
- else
- if test -f $srcdir/GNUmakefile; then
- cat <<EOF
-Source directory already configured. Please clean the source directory
-
- make -C $srcdir distclean
-
-and rerun configure.
-EOF
- exit 2
- fi
-
- abssrcdir="`cd $srcdir; pwd`"
- absbuilddir="`pwd`"
- for d in 2 3 4 5 ; do
- for mf in `cd $srcdir ; find . -maxdepth $d -mindepth $d -name GNUmakefile`; do
- case "$abssrcdir" in
- "$absbuilddir"/*)
-# source is below build directory, always copy
- ;;
- *)
- case "$abssrcdir/${mf#./}" in
- "$absbuilddir"/*)
-# find descended into build directory, don't copy
- continue
- esac
- esac
- mkdir -p ${mf%/*}
- cat <<EOF | $PYTHON - > $mf
-print 'depth=' + ('../' * ( $d-1 ) )
-print 'include \$(depth)/config\$(if \$(conf),-\$(conf),).make'
-print 'include \$(configure-srcdir)/$mf'
-print 'MODULE_INCLUDES += \$(src-dir)/\$(outbase)'
-EOF
- done
- for mf in `cd $srcdir ; find . -maxdepth $d -mindepth $d -name '*.make' | grep -v config.make `; do
- case "$abssrcdir" in
- "$absbuilddir"/*)
-# source is below build directory, always copy
- ;;
- *)
- case "$abssrcdir/${mf#./}" in
- "$absbuilddir"/*)
-# find descended into build directory, don't copy
- continue
- esac
- esac
- mkdir -p ${mf%/*}
- cat <<EOF | $PYTHON - > $mf
-print 'include \$(depth)/config\$(if \$(conf),-\$(conf),).make'
-print 'include \$(configure-srcdir)/$mf'
-EOF
- done
- done
-
- rm -f GNUmakefile
- cat <<EOF > GNUmakefile
-depth = .
-include config\$(if \$(conf),-\$(conf),).make
-include \$(configure-srcdir)/GNUmakefile.in
-EOF
- chmod 444 GNUmakefile
- AC_SUBST(VPATH)
- fi
-])
-
-
-AC_DEFUN(STEPMAKE_FLEX, [
- # ugh, automake: we want (and check for) flex
- # AC_PROG_LEX
- # urg: automake 1.3: hope this doesn't break 1.2 ac_cv_pro_lex_root hack...
-
- # AC_PROG_LEX()
- # ugh, ugh
- ac_cv_prog_lex_root=lex.yy
- STEPMAKE_PROGS(FLEX, flex, $1)
-])
-
-
-AC_DEFUN(STEPMAKE_FLEXLEXER, [
- AC_CHECK_HEADERS([FlexLexer.h],[true],[false])
- if test $? -ne 0; then
- warn='FlexLexer.h (flex package)'
- STEPMAKE_ADD_ENTRY($1, $warn)
- fi
- # check for yyFlexLexer.yy_current_buffer,
- # in 2.5.4 <= flex < 2.5.29
- AC_CACHE_CHECK([for yyFlexLexer.yy_current_buffer],
- [stepmake_cv_flexlexer_yy_current_buffer],
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-using namespace std;
-#include <FlexLexer.h>
-class yy_flex_lexer: public yyFlexLexer
-{
- public:
- yy_flex_lexer ()
- {
- yy_current_buffer = 0;
- }
-};
-]])],
- [stepmake_cv_flexlexer_yy_current_buffer=yes],
- [stepmake_cv_flexlexer_yy_current_buffer=no]))
- if test $stepmake_cv_flexlexer_yy_current_buffer = yes; then
- AC_DEFINE(HAVE_FLEXLEXER_YY_CURRENT_BUFFER, 1, [Define to 1 if yyFlexLexer has yy_current_buffer.])
- fi
-])
-
-
-
-AC_DEFUN(STEPMAKE_FLEXLEXER_LOCATION, [
- AC_MSG_CHECKING([FlexLexer.h location])
-
- # ugh.
- cat <<EOF > conftest.cc
-using namespace std;
-#include <FlexLexer.h>
-EOF
- FLEXLEXER_FILE=`eval $ac_cpp conftest.cc | \
- sed 's!# 1 "\(.*FlexLexer.h\)"!@FLEXLEXER@\1@@!g' | grep '@@' | \
- sed 's!.*@FLEXLEXER@\(.*\)@@.*$!\1!g' ` 1> /dev/null 2> /dev/null
- rm conftest.cc
- AC_SUBST(FLEXLEXER_FILE)
- AC_MSG_RESULT($FLEXLEXER_FILE)
-])
-
-AC_DEFUN(STEPMAKE_GCC_OR_CLANG, [
- STEPMAKE_HAS_CLANG()
- if test "$HAS_CLANG" = "no"; then
- if test "$GCC" = "yes"; then
- STEPMAKE_CHECK_VERSION(CC, $1, $2)
- else
- warn="$CC (Please install *GNU* cc)"
- STEPMAKE_ADD_ENTRY($1, $warn)
- fi
- fi
- # no else, we're fine with any clang
-])
-
-AC_DEFUN(STEPMAKE_GETTEXT, [
- presome=${prefix}
- if test "$prefix" = "NONE"; then
- presome=${ac_default_prefix}
- fi
- LOCALEDIR=`echo ${localedir} | sed "s!\\\${prefix}!$presome!"`
-
- AC_SUBST(localedir)
- AC_DEFINE_UNQUOTED(LOCALEDIR, ["${LOCALEDIR}"])
- AC_CHECK_LIB(intl, gettext)
- AC_CHECK_FUNCS(gettext)
-])
-
-
-AC_DEFUN(STEPMAKE_GUILE, [
- STEPMAKE_PATH_PROG(GUILE, guile guile1, $1)
-])
-
-
-# STEPMAKE_GUILE_FLAGS --- set flags for compiling and linking with Guile
-#
-# This macro runs the guile-config script, installed with Guile,
-# to find out where Guile's header files and libraries are
-# installed. It sets two variables, marked for substitution, as
-# by AC_SUBST.
-#
-# GUILE_CFLAGS --- flags to pass to a C or C++ compiler to build
-# code that uses Guile header files. This is almost
-# always just a -I flag.
-#
-# GUILE_LDFLAGS --- flags to pass to the linker to link a
-# program against Guile. This includes -lguile for
-# the Guile library itself, any libraries that Guile
-# itself requires (like -lqthreads), and so on. It may
-# also include a -L flag to tell the compiler where to
-# find the libraries.
-
-AC_DEFUN([STEPMAKE_GUILE_FLAGS], [
- exe=`STEPMAKE_GET_EXECUTABLE($guile_config)`
- if test -x $exe; then
- AC_MSG_CHECKING([guile compile flags])
- GUILE_CFLAGS="`$guile_config compile`"
- AC_MSG_RESULT($GUILE_CFLAGS)
- AC_MSG_CHECKING([guile link flags])
- GUILE_LDFLAGS="`$guile_config link`"
- AC_MSG_RESULT($GUILE_LDFLAGS)
- fi
- AC_SUBST(GUILE_CFLAGS)
- AC_SUBST(GUILE_LDFLAGS)
-])
-
-
-AC_DEFUN(STEPMAKE_GUILE_DEVEL, [
- ## First, let's just see if we can find Guile at all.
- test -n "$target_alias" && target_guile_config=$target_alias-guile-config
- test -n "$host_alias" && host_guile_config=$host_alias-guile-config
- AC_MSG_CHECKING([for guile-config])
- for guile_config in $GUILE_CONFIG $target_guile_config $host_guile_config $build_guile_config guile-config guile1-config; do
- AC_MSG_RESULT([$guile_config])
- if ! $guile_config --version > /dev/null 2>&1 ; then
- AC_MSG_WARN([cannot execute $guile_config])
- AC_MSG_CHECKING([if we are cross compiling])
- GUILE_CONFIG='echo no guile-config'
- else
- GUILE_CONFIG=$guile_config
- break
- fi
- done
- STEPMAKE_OPTIONAL_REQUIRED(GUILE_CONFIG, $guile_config, $1)
- if test $? -ne 0; then
- STEPMAKE_ADD_ENTRY($1, 'guile-config (guile-devel, guile-dev or libguile-dev package) or guile1-config (guile1-devel package)')
- fi
-
- STEPMAKE_CHECK_SEARCH_RESULT(GUILE_CONFIG)
- # urg. should test functionality rather than version.
- if test $? -eq 0 -a -n "$2"; then
- STEPMAKE_CHECK_VERSION(GUILE_CONFIG, $1, $2)
- fi
-
- AC_SUBST(GUILE_CONFIG)
-
- guile_version="$ver"
- changequote(<<, >>)#dnl
- GUILE_MAJOR_VERSION=`expr $guile_version : '\([0-9]*\)'`
- GUILE_MINOR_VERSION=`expr $guile_version : '[0-9]*\.\([0-9]*\)'`
- GUILE_PATCH_LEVEL=`expr $guile_version : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
- changequote([, ])#dnl
- STEPMAKE_GUILE_FLAGS
- save_CPPFLAGS="$CPPFLAGS"
- save_LIBS="$LIBS"
- CPPFLAGS="$GUILE_CFLAGS $CPPFLAGS"
- LIBS="$GUILE_LDFLAGS $LIBS"
- AC_CHECK_HEADERS([libguile.h])
- AC_CHECK_LIB(guile, scm_boot_guile)
- AC_CHECK_FUNCS(scm_boot_guile,,libguile_b=no)
- if test "$libguile_b" = "no"; then
- warn='libguile (libguile-dev, guile-devel or guile-dev
- package).'
- STEPMAKE_ADD_ENTRY(REQUIRED, $warn)
- fi
- CPPFLAGS="$save_CPPFLAGS"
- LIBS="$save_LIBS"
- AC_DEFINE_UNQUOTED(GUILE_MAJOR_VERSION, $GUILE_MAJOR_VERSION)
- AC_DEFINE_UNQUOTED(GUILE_MINOR_VERSION, $GUILE_MINOR_VERSION)
- AC_DEFINE_UNQUOTED(GUILE_PATCH_LEVEL, $GUILE_PATCH_LEVEL)
-])
-
-
-AC_DEFUN(STEPMAKE_DLOPEN, [
- AC_CHECK_LIB(dl, dlopen)
- AC_CHECK_FUNCS(dlopen)
-])
-
-AC_DEFUN(STEPMAKE_HAS_CLANG, [
- AC_EGREP_CPP(yes,
- [#ifdef __clang__
- yes
- #endif
- ], HAS_CLANG=yes, HAS_CLANG=no)
-])
-
-AC_DEFUN(STEPMAKE_GXX_OR_CLANG, [
- STEPMAKE_HAS_CLANG()
- if test "$HAS_CLANG" = "no"; then
- if test "$GXX" = "yes"; then
- STEPMAKE_CHECK_VERSION(CXX, $1, $2)
- else
- warn="$CXX (Please install *GNU* c++)"
- STEPMAKE_ADD_ENTRY($1, $warn)
- fi
- fi
- # no else, we're fine with any clang
-])
-
-
-AC_DEFUN(STEPMAKE_INIT, [
-
- . $srcdir/VERSION
- FULL_VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL
- MICRO_VERSION=$PATCH_LEVEL
- TOPLEVEL_VERSION=$FULL_VERSION
- if test x$MY_PATCH_LEVEL != x; then
- FULL_VERSION=$FULL_VERSION.$MY_PATCH_LEVEL
- fi
- VERSION=$FULL_VERSION
- export MAJOR_VERSION MINOR_VERSION PATCH_LEVEL
- # urg: don't "fix" this: irix doesn't know about [:lower:] and [:upper:]
- changequote(<<, >>)#dnl
- PACKAGE=`echo $PACKAGE_NAME | tr '[a-z]' '[A-Z]'`
- package=`echo $PACKAGE_NAME | tr '[A-Z]' '[a-z]'`
- changequote([, ])#dnl
-
- # No versioning on directory names of sub-packages
- # urg, urg
- stepmake=${datadir}/stepmake
- presome=${prefix}
- if test "$prefix" = "NONE"; then
- presome=${ac_default_prefix}
- fi
- stepmake=`echo ${stepmake} | sed "s!\\\${prefix}!$presome!"`
-
- # urg, how is this supposed to work?
- if test "$program_prefix" = "NONE"; then
- program_prefix=
- fi
- if test "$program_suffix" = "NONE"; then
- program_suffix=
- fi
-
- AC_MSG_CHECKING(Package)
- if test "$PACKAGE" = "STEPMAKE"; then
- AC_MSG_RESULT(Stepmake package!)
-
- AC_MSG_CHECKING(builddir)
-
- ugh_ugh_autoconf250_builddir="`pwd`"
-
- if test "$srcdir" = "."; then
- srcdir_build=yes
- else
- srcdir_build=no
- package_builddir="`dirname $ugh_ugh_autoconf250_builddir`"
- package_srcdir="`dirname $srcdir`"
- fi
- AC_MSG_RESULT($ugh_ugh_autoconf250_builddir)
-
- (cd stepmake 2>/dev/null || mkdir stepmake)
- (cd stepmake; rm -f bin; ln -s ../$srcdir/bin .)
- stepmake=stepmake
- else
- AC_MSG_RESULT($PACKAGE)
-
- AC_MSG_CHECKING(builddir)
- ugh_ugh_autoconf250_builddir="`pwd`"
-
- here_dir=$(cd . && pwd)
- full_src_dir=$(cd $srcdir && pwd)
-
- if test "$full_src_dir" = "$here_dir"; then
- srcdir_build=yes
- else
- srcdir_build=no
- fi
- AC_MSG_RESULT($ugh_ugh_autoconf250_builddir)
-
- AC_MSG_CHECKING(for stepmake)
- # Check for installed stepmake
- if test -d $stepmake; then
- AC_MSG_RESULT($stepmake)
- else
- stepmake="`cd $srcdir/stepmake; pwd`"
- AC_MSG_RESULT([$srcdir/stepmake ($datadir/stepmake not found)])
- fi
- fi
-
- AC_SUBST(ugh_ugh_autoconf250_builddir)
-
- # Use absolute directory for non-srcdir builds, so that build
- # dir can be moved.
- if test "$srcdir_build" = "no" ; then
- srcdir="`cd $srcdir; pwd`"
- fi
-
- AC_SUBST(srcdir)
- AC_SUBST(stepmake)
- AC_SUBST(package)
- AC_SUBST(PACKAGE)
- AC_SUBST(PACKAGE_NAME)
- AC_SUBST(VERSION)
- AC_SUBST(MAJOR_VERSION)
- AC_SUBST(MINOR_VERSION)
- AC_SUBST(MICRO_VERSION)
-
- # stepmake nonstandard names
- AC_SUBST(PATCH_LEVEL)
- AC_SUBST(TOPLEVEL_VERSION)
-
- # We don't need the upper case variant,
- # so stick to macros are uppercase convention.
- # AC_DEFINE_UNQUOTED(package, ["${package}"])
- # AC_DEFINE_UNQUOTED(PACKAGE, ["${PACKAGE}"])
- AC_DEFINE_UNQUOTED(PACKAGE, ["${package}"])
- AC_DEFINE_UNQUOTED(PACKAGE_NAME, ["${PACKAGE_NAME}"])
- AC_DEFINE_UNQUOTED(TOPLEVEL_VERSION, ["${FULL_VERSION}"])
-
- if test -z "$package_depth"; then
- package_depth="."
- else
- package_depth="../$package_depth"
- fi
- export package_depth
- AC_SUBST(package_depth)
-
- AUTOGENERATE="This file was automatically generated by configure"
- AC_SUBST(AUTOGENERATE)
-
- CONFIGSUFFIX=
- AC_ARG_ENABLE(config,
- [AS_HELP_STRING([--enable-config=CONF],
- [put settings in config-CONF.make and config-CONF.h;
- do `make conf=CONF' to get output in ./out-CONF])],
- [CONFIGURATION=$enableval])
-
- ##'`#
-
- test -n "$CONFIGURATION" && CONFIGSUFFIX="-$CONFIGURATION"
- CONFIGFILE=config$CONFIGSUFFIX
- AC_SUBST(CONFIGSUFFIX)
-
- AC_CANONICAL_HOST
- STEPMAKE_PROGS(MAKE, gmake make, REQUIRED)
- STEPMAKE_PROGS(FIND, find, REQUIRED)
-
- STEPMAKE_PROGS(TAR, tar, REQUIRED)
-
- if test "$(echo 2)" != "2" ||
- test "x`uname`" = "xHP-UX"; then
- AC_PATH_PROG(KSH, ksh, /bin/ksh)
- AC_PATH_PROG(BASH, bash, $KSH)
- STEPMAKE_WARN(avoiding buggy /bin/sh)
- AC_PATH_PROG(SHELL, bash, $KSH)
- else
- SHELL=/bin/sh
- AC_PATH_PROG(BASH, bash, $SHELL)
- fi
- AC_SUBST(SHELL)
-
- STEPMAKE_PYTHON(REQUIRED, 1.5)
-
- if expr "$MAKE" : '.*\(echo\)' >/dev/null; then
- $MAKE -v 2> /dev/null | grep GNU > /dev/null
- if test "$?" = 1; then
- warn='make (Please install *GNU* make)'
- # STEPMAKE_WARN($warn)
- STEPMAKE_ADD_ENTRY(REQUIRED, $warn)
- fi
- fi
-
- ROOTSEP=':'
- DIRSEP='/'
- PATHSEP=':'
- LN=ln
- LN_S='ln -s'
- ZIP="zip -r -9"
-
- AC_SUBST(program_prefix)
- AC_SUBST(program_suffix)
- AC_SUBST(ZIP)
- AC_SUBST(LN)
- AC_SUBST(LN_S)
- AC_DEFINE_UNQUOTED(DIRSEP, ['${DIRSEP}'])
- AC_DEFINE_UNQUOTED(PATHSEP, ['${PATHSEP}'])
- AC_SUBST(DIRSEP)
- AC_SUBST(PATHSEP)
- AC_SUBST(ROOTSEP)
-
- STEPMAKE_DATADIR
- STEPMAKE_LIBDIR
-])
-
-
-AC_DEFUN(STEPMAKE_LIB, [
- STEPMAKE_PROGS(AR, ar, $1)
- AC_PROG_RANLIB
- STEPMAKE_OPTIONAL_REQUIRED(RANLIB, ranlib, $1)
-])
-
-
-AC_DEFUN(STEPMAKE_LIBTOOL, [
- # libtool.info ...
- # **Never** try to set library version numbers so that they correspond
- # to the release number of your package. This is an abuse that only
- # fosters misunderstanding of the purpose of library versions.
-
- REVISION=$PATCH_LEVEL
- # CURRENT=$MINOR_VERSION
- CURRENT=`expr $MINOR_VERSION + 1`
- # AGE=`expr $MAJOR_VERSION + 1`
- AGE=$MAJOR_VERSION
- AC_SUBST(CURRENT)
- AC_SUBST(REVISION)
- AC_SUBST(AGE)
-])
-
-
-AC_DEFUN(STEPMAKE_LOCALE, [
- lang=English
- ALL_LINGUAS="en nl"
-
- # with/enable ??
- AC_ARG_WITH(localedir,
- [AS_HELP_STRING([--with-localedir=DIR],
- [location of locales. Default: PREFIX/share/locale])],
- localedir=$with_localedir,
- localedir='${prefix}/share/locale')
-
- AC_ARG_WITH(lang,
- [AS_HELP_STRING([--with-lang=LANG],
- [use LANG as language to emit messages])],
- language=$with_lang,
- language=English)
-
- AC_MSG_CHECKING(language)
- case "$language" in
- En* | en* | Am* | am* | US* | us*)
- lang=English;;
- NL | nl | Du* | du* | Ned* | ned*)
- lang=Dutch;;
- "")
- lang=English;;
- *)
- lang=unknown;;
- esac
- AC_MSG_RESULT($lang)
-
- if test "$lang" = "unknown" ; then
- STEPMAKE_WARN($language not supported; available are: $ALL_LINGUAS)
- fi
-
-])
-
-
-AC_DEFUN(STEPMAKE_MAKEINFO, [
- STEPMAKE_PROGS(MAKEINFO, makeinfo, $1)
-])
-
-
-AC_DEFUN(STEPMAKE_MAN, [
- STEPMAKE_PROGS(GROFF, groff ditroff, $1)
- AC_SUBST(GROFF)
- STEPMAKE_PROGS(TROFF, troff, $1)
- AC_SUBST(TROFF)
- STEPMAKE_PROGS(TBL, tbl, $1)
- AC_SUBST(TBL)
-])
-
-
-AC_DEFUN(STEPMAKE_MSGFMT, [
- STEPMAKE_PROGS(MSGFMT, msgfmt, $1)
-])
-
-
-# Check for program ($2), set full path result to ($1).
-# If missing, add entry to missing-list ($3, one of 'OPTIONAL', 'REQUIRED')
-AC_DEFUN(STEPMAKE_PATH_PROG, [
- AC_CHECK_PROGS($1, $2, no)
- STEPMAKE_OPTIONAL_REQUIRED($1, $2, $3)
- if test $? -eq 0; then
- AC_PATH_PROGS($1, $2)
- if test -n "$4"; then
- STEPMAKE_CHECK_VERSION($1, $3, $4)
- fi
- fi
-])
-
-
-# Check for program in set of names ($2), set result to ($1) .
-# If missing, add entry to missing-list ($3, one of 'OPTIONAL', 'REQUIRED')
-# If exists, and a minimal version ($4) is required
-AC_DEFUN(STEPMAKE_PROGS, [
- AC_CHECK_PROGS($1, $2, no)
- STEPMAKE_OPTIONAL_REQUIRED($1, $2, $3)
- if test $? -eq 0 -a -n "$4"; then
- STEPMAKE_CHECK_VERSION($1, $3, $4)
- fi
-])
-
-
-AC_DEFUN(STEPMAKE_PERL, [
- STEPMAKE_PATH_PROG(PERL, perl, $1)
-])
-
-
-AC_DEFUN(STEPMAKE_PYTHON, [
- unset pv
- AC_MSG_CHECKING([for python])
- for python in $PYTHON python python2 python2.4 python2.3 python2.2 python2.1 python2.0; do
- AC_MSG_RESULT([$python])
- if ! $python -V > /dev/null 2>&1 ; then
- #AC_MSG_WARN([cannot execute $python])
- PYTHON='echo no python'
- else
- unset pv
- STEPMAKE_CHECK_VERSION(python, pv, $2)
- if test -z "$pv"; then
- PYTHON=$python
- break
- fi
- fi
- done
- if test -n "$pv"; then
- STEPMAKE_ADD_ENTRY($1, $pv)
- fi
- # clear cached value since arg 2 might point us to a new binary
- unset ac_cv_path_PYTHON
-
- AC_PATH_PROG(PYTHON, $PYTHON)
- AC_SUBST(PYTHON)
-])
-
-AC_DEFUN(STEPMAKE_PYTHON_DEVEL, [
- AC_ARG_WITH(python-include,
- [AS_HELP_STRING([--with-python-include=DIR],
- [location of the python include dir])],[
- if test "$withval" = "yes" -o "$withval" = "no"; then
- AC_MSG_WARN(Usage: --with-python-include=includedir)
- else
- PYTHON_CFLAGS="-I${withval}"
- fi
- ])
-
- AC_ARG_WITH(python-lib,
- [AS_HELP_STRING([--with-python-lib=NAME],
- [name of the python lib])],[
- if test "$withval" = "yes" -o "$withval" = "no"; then
- AC_MSG_WARN(Usage: --with-python-lib=name)
- else
- LDFLAGS="$LDFLAGS -l${withval}"
- fi
- ])
-
- AC_CHECK_PROGS(PYTHON_CONFIG, python-config, no)
-
- if test -z "$PYTHON_CFLAGS" -a "$PYTHON_CONFIG" != "no"; then
- # Clean out junk: http://bugs.python.org/issue3290
- # Python headers may need some -f* flags, leave them in.
- # We want the sed commands to look like 's/-[WDOm][[:alnum:][:punct:]][[:alnum:][:punct:]]*//g' and 's/-arch [^[:space:]]*//g', but automake eats brackets.
- #PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags | sed -e 's/-[[WDOm]][[[:alnum:][:punct:]]][[[:alnum:][:punct:]]]*//g' | sed -e 's/-arch @<:@^@<:@:space:@:>@@:>@*//g'`
- # The above sed BRE matches parts of legal options, stipping down part of that option, resulting in invalid gcc arguments. Gentoo Bug #415793
- # For instance, '-floop-stip-mime' becomes '-floop-strip', and '-fvect-cost-model' becomes '-fvect-cost'.
- # Tentative fix to require a non alphanumeric character before the initial hyphen of the BRE or the hyphen being the first character in the string.
- PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags | sed -e 's/\(^\|[[^[:alnum:]]]\)-[[WDOm]][[[:alnum:][:punct:]]][[[:alnum:][:punct:]]]*//g' | sed -e 's/-arch @<:@^@<:@:space:@:>@@:>@*//g'`
- PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags`
- fi
-
- if test -z "$PYTHON_CFLAGS" -a "$cross_compiling" = "no"; then
- changequote(<<, >>)#dnl
- # alternatively, for python >= 2.0
- # 'import sys, distutils.sysconfig; sys.stdout.write (distutils.sysconfig.get_python_inc ())'
- PYTHON_INCLUDE=`$PYTHON -c 'import sys; sys.stdout.write ("%s/include/python%s" % (sys.prefix, sys.version[:3]))'`
- PYTHON_CFLAGS="-I$PYTHON_INCLUDE"
- changequote([, ])#dnl
- fi
-
- if test -z "$PYTHON_HEADER"; then
- CPPFLAGS="$PYTHON_CFLAGS $CPPFLAGS"
- AC_CHECK_HEADERS([Python.h],[PYTHON_HEADER=yes])
- fi
-
- if test -z "$PYTHON_HEADER"; then
- warn="Python.h (python-devel, python-dev or libpython-dev package)"
- STEPMAKE_ADD_ENTRY($1, $warn)
- fi
-])
-
-
-
-AC_DEFUN(STEPMAKE_STL_DATA_METHOD, [
- AC_CACHE_CHECK([for stl.data () method],
- [stepmake_cv_stl_data_method],
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#include <vector>
-using namespace std;
-vector <int> v;
-void *p = v.data ();
-]])],
- [stepmake_cv_stl_data_method=yes],
- [stepmake_cv_stl_data_method=no]))
- if test $stepmake_cv_stl_data_method = yes; then
- AC_DEFINE(HAVE_STL_DATA_METHOD, 1, [define if stl classes have data () method])
- fi
-])
-
-
-AC_DEFUN(STEPMAKE_TEXMF_DIRS, [
- # ugh
- STEPMAKE_PROGS(KPSEWHICH, kpsewhich, OPTIONAL)
-])
-
-AC_DEFUN(STEPMAKE_TEXMF, [
- STEPMAKE_PROGS(METAFONT, mf-nowin mf mfw mfont, $1)
- STEPMAKE_PROGS(METAPOST, mpost, $1)
-
- AC_MSG_CHECKING(for working metafont mode)
- modelist='ljfour lj4 lj3 lj2 ljet laserjet'
- for MFMODE in $modelist; do
- $METAFONT -progname=mf "\mode:=$MFMODE; mode_setup; end." > /dev/null 2>&1
- if test -f mfput.tfm; then
- break;
- fi
- done
- AC_MSG_RESULT($MFMODE)
-
- rm -f mfput.*
-
- AC_SUBST(MFMODE)
-])
-
-
-AC_DEFUN(STEPMAKE_WARN, [
- AC_MSG_WARN($1)
- warn_b=yes
-])
-
-
-dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
-dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
-dnl also defines GSTUFF_PKG_ERRORS on error
-AC_DEFUN(PKG_CHECK_MODULES, [
- succeeded=no
-
- if test -z "$PKG_CONFIG"; then
- AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
- fi
-
- if test "$PKG_CONFIG" = "no" ; then
- echo "*** The pkg-config script could not be found. Make sure it is"
- echo "*** in your path, or set the PKG_CONFIG environment variable"
- echo "*** to the full path to pkg-config."
- echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
- else
- PKG_CONFIG_MIN_VERSION=0.9.0
- if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- AC_MSG_CHECKING(for $2)
-
- if $PKG_CONFIG --exists "$2" ; then
- AC_MSG_RESULT(yes)
- succeeded=yes
-
- AC_MSG_CHECKING($1_CFLAGS)
- $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
- AC_MSG_RESULT($$1_CFLAGS)
-
- AC_MSG_CHECKING($1_LIBS)
- $1_LIBS=`$PKG_CONFIG --libs "$2"`
- AC_MSG_RESULT($$1_LIBS)
- else
- $1_CFLAGS=""
- $1_LIBS=""
- ## If we have a custom action on failure, don't print errors, but
- ## do set a variable so people can do so.
- $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
- ifelse([$4], ,echo $$1_PKG_ERRORS,)
- fi
-
- AC_SUBST($1_CFLAGS)
- AC_SUBST($1_LIBS)
- fi
- fi
-
- if test $succeeded = yes; then
- ifelse([$3], , :, [$3])
- else
- ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
- fi
-])
-
-AC_DEFUN(STEPMAKE_FREETYPE2, [
- PKG_CHECK_MODULES(FREETYPE2, $1 >= $3, have_freetype2=yes, true)
- if test "$have_freetype2" = yes; then
- AC_DEFINE(HAVE_FREETYPE2)
- save_CPPFLAGS="$CPPFLAGS"
- save_LIBS="$LIBS"
- CPPFLAGS="$FREETYPE2_CFLAGS $CPPFLAGS"
- LIBS="$FREETYPE2_LIBS $LIBS"
- AC_SUBST(FREETYPE2_CFLAGS)
- AC_SUBST(FREETYPE2_LIBS)
- CPPFLAGS="$save_CPPFLAGS"
- LIBS="$save_LIBS"
- else
- # UGR
- #r="lib$1-dev or $1-devel"
- r="libfreetype6-dev or freetype?-devel"
- ver="`pkg-config --modversion $1`"
- STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
- fi
-])
-
-AC_DEFUN(STEPMAKE_PANGO, [
- PKG_CHECK_MODULES(PANGO, $1 >= $3, have_pango16=yes, true)
- if test "$have_pango16" = yes ; then
- AC_DEFINE(HAVE_PANGO16)
- # Do not pollute user-CPPFLAGS with configure-CPPFLAGS
- save_CPPFLAGS="$CPPFLAGS"
- save_LIBS="$LIBS"
- CPPFLAGS="$PANGO_CFLAGS $CPPFLAGS"
- LIBS="$PANGO_LIBS $LIBS"
- AC_CHECK_HEADERS([pango/pangofc-fontmap.h])
- AC_CHECK_FUNCS([pango_fc_font_map_add_decoder_find_func])
- AC_SUBST(PANGO_CFLAGS)
- AC_SUBST(PANGO_LIBS)
- CPPFLAGS="$save_CPPFLAGS"
- LIBS="$save_LIBS"
- else
- # UGR
- #r="lib$1-dev or $1-devel"
- r="libpango1.0-dev or pango1.0-devel"
- ver="`pkg-config --modversion $1`"
- STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
- fi
-])
-
-AC_DEFUN(STEPMAKE_PANGO_FT2, [
- PKG_CHECK_MODULES(PANGO_FT2, $1 >= $3, have_pangoft2=yes, true)
- if test "$have_pangoft2" = yes ; then
- AC_DEFINE(HAVE_PANGO16)
- AC_DEFINE(HAVE_PANGO_FT2)
- # Do not pollute user-CPPFLAGS with configure-CPPFLAGS
- save_CPPFLAGS="$CPPFLAGS"
- save_LIBS="$LIBS"
- CPPFLAGS="$CPPFLAGS $PANGO_FT2_CFLAGS"
- LIBS="$PANGO_FT2_LIBS $LIBS"
- AC_CHECK_HEADERS([pango/pangoft2.h])
- AC_CHECK_FUNCS([pango_ft2_font_map_create_context])
- AC_SUBST(PANGO_FT2_CFLAGS)
- AC_SUBST(PANGO_FT2_LIBS)
- CPPFLAGS="$save_CPPFLAGS"
- LIBS="$save_LIBS"
- else
- # UGR
- #r="lib$1-dev or $1-devel"e
- r="libpango1.0-dev or pango?-devel"
- ver="`pkg-config --modversion $1`"
- STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
- fi
-])
-
-AC_DEFUN(STEPMAKE_FONTCONFIG, [
- PKG_CHECK_MODULES(FONTCONFIG, $1 >= $3, have_fontconfig=yes, true)
- if test "$have_fontconfig" = yes ; then
- AC_DEFINE(HAVE_FONTCONFIG)
- # Do not pollute user-CPPFLAGS with configure-CPPFLAGS
- save_CPPFLAGS="$CPPFLAGS"
- save_LIBS="$LIBS"
- CPPFLAGS="$FONTCONFIG_CFLAGS $CPPFLAGS"
- LIBS="$FONTCONFIG_LIBS $LIBS"
- AC_SUBST(FONTCONFIG_CFLAGS)
- AC_SUBST(FONTCONFIG_LIBS)
- CPPFLAGS="$save_CPPFLAGS"
- LIBS="$save_LIBS"
- else
- r="lib$1-dev or $1-devel"
- ver="`pkg-config --modversion $1`"
- STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
- fi
-])
-
-AC_DEFUN(STEPMAKE_WINDOWS, [
- AC_CYGWIN
- AC_MINGW32
-
- if test "$CYGWIN" = "yes"; then
- LN_S='cp -r' # Cygwin symbolic links do not work for native apps.
- program_suffix=.exe
- INSTALL="\$(SHELL) \$(stepdir)/../bin/install-dot-exe.sh -c"
- elif test "$MINGW32" = "yes"; then
- LN='cp -r'
- LN_S='cp -r'
- program_suffix=.exe
- INSTALL="\$(SHELL) \$(stepdir)/../bin/install-dot-exe.sh -c"
- PATHSEP=';'
- fi
-
- AC_SUBST(LN)
- AC_SUBST(LN_S)
- AC_DEFINE_UNQUOTED(DIRSEP, ['${DIRSEP}'])
- AC_DEFINE_UNQUOTED(PATHSEP, ['${PATHSEP}'])
- AC_SUBST(DIRSEP)
- AC_SUBST(PATHSEP)
- AC_SUBST(program_suffix)
-
- AC_MSG_CHECKING([for some flavor of Windows])
- if test "$CYGWIN$MINGW32" = "nono"; then
- PLATFORM_WINDOWS=no
- else
- PLATFORM_WINDOWS=yes
- fi
- AC_MSG_RESULT([$PLATFORM_WINDOWS])
- AC_SUBST(PLATFORM_WINDOWS)
- STEPMAKE_PROGS(WINDRES, $target-windres windres, x)
- AC_SUBST(WINDRES)
-])
+++ /dev/null
-#!/bin/sh
-# Run this to generate configure and initial GNUmakefiles
-
-srcdir=`dirname $0`
-
-case $1 in
- --noconf*) NOCONFIGURE=true;;
-esac
-
-if [ ! -f aclocal.m4 -o stepmake/aclocal.m4 -nt aclocal.m4 ]; then
- echo "stepmake/aclocal.m4 is newer. Copying file."
- cp -f stepmake/aclocal.m4 aclocal.m4
-fi
-
-if [ ! -f autogen.sh -o stepmake/autogen.sh -nt autogen.sh ]; then
- echo "stepmake/autogen.sh is newer. Copying file."
- cp -f stepmake/autogen.sh autogen.sh
- exec ./autogen.sh "$@"
-fi
-
-for i in $srcdir/configure.in #`find $srcdir -name configure.in -print`
-do
- dir=`dirname $i`
- echo processing $dir
- (
- cd $dir
- echo "Running autoconf ..."
- autoconf || exit 1
- )
- # Autoconf automatically checks its own minimum required
- # version, and it aborts when the check fails.
- test "$?" -eq 1 && exit 1
-done
-
-#conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c
-if test -n "$NOCONFIGURE"; then
- echo Skipping configure process.
- exit 0
-fi
-
-if test -z "$*"; then
- cat <<EOF
- Warning: about to run \`configure' without arguments.
- arguments on the \`$0' command line
- will be passed to \`configure'.
-
- Invoke with --noconfigure to skip configure step.
-EOF
-fi
-
-echo Running $srcdir/configure $conf_flags "$@" ...
-$srcdir/configure $conf_flags "$@"
+++ /dev/null
-# bin/Makefile
-
-depth = ../..
-EXTRA_DIST_FILES = install-sh config.sub config.guess
-STEPMAKE_TEMPLATES=script install
-
-include $(depth)/make/stepmake.make
-
-POST_INSTALL=chmod 755 $(datadir)/bin/*
-INSTALLATION_DIR=$(datadir)/bin
-INSTALLATION_FILES=$(DIST_FILES)
+++ /dev/null
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-# Free Software Foundation, Inc.
-
-timestamp='2010-04-03'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner. Please send patches (context
-# diff format) to <config-patches@gnu.org> and include a ChangeLog
-# entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
-Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-trap 'exit 1' HUP INT TERM
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int x;" > $dummy.c ;
- for c in cc gcc c89 c99 ; do
- if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
- case "${UNAME_MACHINE_ARCH}" in
- armeb) machine=armeb-unknown ;;
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- sh5el) machine=sh5le-unknown ;;
- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ELF__
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- # Debian GNU/NetBSD machines have a different userland, and
- # thus, need a distinct triplet. However, they do not need
- # kernel version information, so it can be replaced with a
- # suitable tag, in the style of linux-gnu.
- case "${UNAME_VERSION}" in
- Debian*)
- release='-gnu'
- ;;
- *)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- ;;
- esac
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit ;;
- *:OpenBSD:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
- echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- *:ekkoBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- exit ;;
- *:SolidBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
- exit ;;
- macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- *:MirBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- alpha:OSF1:*:*)
- case $UNAME_RELEASE in
- *4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- ;;
- *5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
- ;;
- esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
- # types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- case "$ALPHA_CPU_TYPE" in
- "EV4 (21064)")
- UNAME_MACHINE="alpha" ;;
- "EV4.5 (21064)")
- UNAME_MACHINE="alpha" ;;
- "LCA4 (21066/21068)")
- UNAME_MACHINE="alpha" ;;
- "EV5 (21164)")
- UNAME_MACHINE="alphaev5" ;;
- "EV5.6 (21164A)")
- UNAME_MACHINE="alphaev56" ;;
- "EV5.6 (21164PC)")
- UNAME_MACHINE="alphapca56" ;;
- "EV5.7 (21164PC)")
- UNAME_MACHINE="alphapca57" ;;
- "EV6 (21264)")
- UNAME_MACHINE="alphaev6" ;;
- "EV6.7 (21264A)")
- UNAME_MACHINE="alphaev67" ;;
- "EV6.8CB (21264C)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8AL (21264B)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8CX (21264D)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.9A (21264/EV69A)")
- UNAME_MACHINE="alphaev69" ;;
- "EV7 (21364)")
- UNAME_MACHINE="alphaev7" ;;
- "EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
- esac
- # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-morphos
- exit ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
- *:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
- *:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit ;;
- arm:riscos:*:*|arm:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
- DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
- DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
- case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
- s390x:SunOS:*:*)
- echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
- echo i386-pc-auroraux${UNAME_RELEASE}
- exit ;;
- i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- eval $set_cc_for_build
- SUN_ARCH="i386"
- # If there is a compiler, see if it is configured for 64-bit objects.
- # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
- # This test works for both compilers.
- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
- if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- SUN_ARCH="x86_64"
- fi
- fi
- echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit ;;
- m68k:machten:*:*)
- echo m68k-apple-machten${UNAME_RELEASE}
- exit ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c &&
- dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
- SYSTEM_NAME=`$dummy $dummyarg` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos${UNAME_RELEASE}
- exit ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
- then
- echo "$SYSTEM_NAME"
- else
- echo rs6000-ibm-aix3.2.5
- fi
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit ;;
- *:AIX:*:[456])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- test -z "$HP_ARCH" && HP_ARCH=hppa
- fi ;;
- esac
- if [ ${HP_ARCH} = "hppa2.0w" ]
- then
- eval $set_cc_for_build
-
- # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
- # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
- # generating 64-bit code. GNU and HP use different nomenclature:
- #
- # $ CC_FOR_BUILD=cc ./config.guess
- # => hppa2.0w-hp-hpux11.23
- # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
- # => hppa64-hp-hpux11.23
-
- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
- grep -q __LP64__
- then
- HP_ARCH="hppa2.0w"
- else
- HP_ARCH="hppa64"
- fi
- fi
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- *:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- 5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:FreeBSD:*:*)
- case ${UNAME_MACHINE} in
- pc98)
- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- amd64)
- echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- *)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- esac
- exit ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit ;;
- *:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit ;;
- i*:windows32*:*)
- # uname -m includes "-pc" on this system.
- echo ${UNAME_MACHINE}-mingw32
- exit ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit ;;
- *:Interix*:*)
- case ${UNAME_MACHINE} in
- x86)
- echo i586-pc-interix${UNAME_RELEASE}
- exit ;;
- authenticamd | genuineintel | EM64T)
- echo x86_64-unknown-interix${UNAME_RELEASE}
- exit ;;
- IA64)
- echo ia64-unknown-interix${UNAME_RELEASE}
- exit ;;
- esac ;;
- [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
- echo i${UNAME_MACHINE}-pc-mks
- exit ;;
- 8664:Windows_NT:*)
- echo x86_64-pc-mks
- exit ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i586-pc-interix
- exit ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit ;;
- amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-unknown-cygwin
- exit ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- *:GNU:*:*)
- # the GNU system
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit ;;
- *:GNU/*:*:*)
- # other systems with GNU libc and userland
- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
- exit ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep -q ld.so.1
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit ;;
- arm*:Linux:*:*)
- eval $set_cc_for_build
- if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_EABI__
- then
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- else
- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
- fi
- exit ;;
- avr32*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- cris:Linux:*:*)
- echo cris-axis-linux-gnu
- exit ;;
- crisv32:Linux:*:*)
- echo crisv32-axis-linux-gnu
- exit ;;
- frv:Linux:*:*)
- echo frv-unknown-linux-gnu
- exit ;;
- i*86:Linux:*:*)
- LIBC=gnu
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
- exit ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- mips:Linux:*:* | mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef ${UNAME_MACHINE}
- #undef ${UNAME_MACHINE}el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=${UNAME_MACHINE}el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=${UNAME_MACHINE}
- #else
- CPU=
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
- ;;
- or32:Linux:*:*)
- echo or32-unknown-linux-gnu
- exit ;;
- padre:Linux:*:*)
- echo sparc-unknown-linux-gnu
- exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit ;;
- sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- vax:Linux:*:*)
- echo ${UNAME_MACHINE}-dec-linux-gnu
- exit ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit ;;
- xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit ;;
- i*86:syllable:*:*)
- echo ${UNAME_MACHINE}-pc-syllable
- exit ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit ;;
- i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i586.
- # Note: whatever this is, it MUST be the same as what config.sub
- # prints for the "djgpp" host, or else GDB configury will decide that
- # this is a cross-build.
- echo i586-pc-msdosdjgpp
- exit ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
- M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
- M68*:*:R3V[5678]*:*)
- test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4; exit; } ;;
- NCR*:*:4.2:* | MPRAS*:*:4.2:*)
- OS_REL='.3'
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
- i*86:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo ${UNAME_MACHINE}-stratus-vos
- exit ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
- BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
- echo i586-pc-haiku
- exit ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux${UNAME_RELEASE}
- exit ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- case $UNAME_PROCESSOR in
- i386)
- eval $set_cc_for_build
- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
- if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- UNAME_PROCESSOR="x86_64"
- fi
- fi ;;
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
- echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- exit ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
- NSE-?:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk${UNAME_RELEASE}
- exit ;;
- NSR-?:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
- SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
- exit ;;
- *:DragonFly:*:*)
- echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit ;;
- *:*VMS:*:*)
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- case "${UNAME_MACHINE}" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
- esac ;;
- *:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
- i*86:skyos:*:*)
- echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
- exit ;;
- i*86:rdos:*:*)
- echo ${UNAME_MACHINE}-pc-rdos
- exit ;;
- i*86:AROS:*:*)
- echo ${UNAME_MACHINE}-pc-aros
- exit ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- c34*)
- echo c34-convex-bsd
- exit ;;
- c38*)
- echo c38-convex-bsd
- exit ;;
- c4*)
- echo c4-convex-bsd
- exit ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
+++ /dev/null
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-# Free Software Foundation, Inc.
-
-timestamp='2010-05-21'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted GNU ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
-Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit ;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
- linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
- kopensolaris*-gnu* | \
- storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray | -microblaze)
- os=
- basic_machine=$1
- ;;
- -bluegene*)
- os=-cnk
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco6)
- os=-sco5v6
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
- | bfin \
- | c4x | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | fido | fr30 | frv \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
- | lm32 \
- | m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | mcore | mep | metag \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64octeon | mips64octeonel \
- | mips64orion | mips64orionel \
- | mips64r5900 | mips64r5900el \
- | mips64vr | mips64vrel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mips64vr5900 | mips64vr5900el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | moxie \
- | mt \
- | msp430 \
- | nios | nios2 \
- | ns16k | ns32k \
- | or32 \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- | pyramid \
- | rx \
- | score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
- | spu | strongarm \
- | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
- | ubicom32 \
- | v850 | v850e \
- | we32k \
- | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
- | z8k | z80)
- basic_machine=$basic_machine-unknown
- ;;
- c54x)
- basic_machine=tic54x-unknown
- ;;
- c55x)
- basic_machine=tic55x-unknown
- ;;
- c6x)
- basic_machine=tic6x-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12 | picochip)
- # Motorola 68HC11/12.
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
- ms1)
- basic_machine=mt-unknown
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* | avr32-* \
- | bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* \
- | clipper-* | craynv-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
- | lm32-* \
- | m32c-* | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64octeon-* | mips64octeonel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64r5900-* | mips64r5900el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mips64vr5900-* | mips64vr5900el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipstx39-* | mipstx39el-* \
- | mmix-* \
- | mt-* \
- | msp430-* \
- | nios-* | nios2-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- | pyramid-* \
- | romp-* | rs6000-* | rx-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
- | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tile-* | tilegx-* \
- | tron-* \
- | ubicom32-* \
- | v850-* | v850e-* | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
- | xstormy16-* | xtensa*-* \
- | ymp-* \
- | z8k-* | z80-*)
- ;;
- # Recognize the basic CPU types without company name, with glob match.
- xtensa*)
- basic_machine=$basic_machine-unknown
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- abacus)
- basic_machine=abacus-unknown
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amd64)
- basic_machine=x86_64-pc
- ;;
- amd64-*)
- basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aros)
- basic_machine=i386-pc
- os=-aros
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- blackfin)
- basic_machine=bfin-unknown
- os=-linux
- ;;
- blackfin-*)
- basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- bluegene*)
- basic_machine=powerpc-ibm
- os=-cnk
- ;;
- c54x-*)
- basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- c55x-*)
- basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- c6x-*)
- basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- cegcc)
- basic_machine=arm-unknown
- os=-cegcc
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- craynv)
- basic_machine=craynv-cray
- os=-unicosmp
- ;;
- cr16)
- basic_machine=cr16-unknown
- os=-elf
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- crisv32 | crisv32-* | etraxfs*)
- basic_machine=crisv32-axis
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- crx)
- basic_machine=crx-unknown
- os=-elf
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
- ;;
- decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dicos)
- basic_machine=i686-pc
- os=-dicos
- ;;
- djgpp)
- basic_machine=i586-pc
- os=-msdosdjgpp
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m68knommu)
- basic_machine=m68k-unknown
- os=-linux
- ;;
- m68knommu-*)
- basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- microblaze)
- basic_machine=microblaze-xilinx
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- mingw32ce)
- basic_machine=arm-unknown
- os=-mingw32ce
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- ms1-*)
- basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- openrisc | openrisc-*)
- basic_machine=or32-unknown
- ;;
- os400)
- basic_machine=powerpc-ibm
- os=-os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- parisc)
- basic_machine=hppa-unknown
- os=-linux
- ;;
- parisc-*)
- basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pc98)
- basic_machine=i386-pc
- ;;
- pc98-*)
- basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2 | pentiumiii | pentium3)
- basic_machine=i686-pc
- ;;
- pentium4)
- basic_machine=i786-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium4-*)
- basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rdos)
- basic_machine=i386-pc
- os=-rdos
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- s390 | s390-*)
- basic_machine=s390-ibm
- ;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
- ;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
- ;;
- sde)
- basic_machine=mipsisa32-sde
- os=-elf
- ;;
- sei)
- basic_machine=mips-sei
- os=-seiux
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sh5el)
- basic_machine=sh5le-unknown
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparclite-wrs | simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
- ;;
- t90)
- basic_machine=t90-cray
- os=-unicos
- ;;
- # This must be matched before tile*.
- tilegx*)
- basic_machine=tilegx-unknown
- os=-linux-gnu
- ;;
- tile*)
- basic_machine=tile-unknown
- os=-linux-gnu
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- tpf)
- basic_machine=s390x-ibm
- os=-tpf
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- xbox)
- basic_machine=i686-pc
- os=-mingw32
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- z80-*-coff)
- basic_machine=z80-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- mmix)
- basic_machine=mmix-knuth
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
- ;;
- sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -auroraux)
- os=-auroraux
- ;;
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
- | -sym* | -kopensolaris* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
- | -openbsd* | -solidbsd* \
- | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* | -cegcc* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-android* \
- | -linux-newlib* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto-qnx*)
- ;;
- -nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux-dietlibc)
- os=-linux-dietlibc
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -os400*)
- os=-os400
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -atheos*)
- os=-atheos
- ;;
- -syllable*)
- os=-syllable
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -nova*)
- os=-rtmk-nova
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -tpf*)
- os=-tpf
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -aros*)
- os=-aros
- ;;
- -kaos*)
- os=-kaos
- ;;
- -zvmoe)
- os=-zvmoe
- ;;
- -dicos*)
- os=-dicos
- ;;
- -nacl*)
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- score-*)
- os=-elf
- ;;
- spu-*)
- os=-elf
- ;;
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
- tic54x-*)
- os=-coff
- ;;
- tic55x-*)
- os=-coff
- ;;
- tic6x-*)
- os=-coff
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mep-*)
- os=-elf
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- or32-*)
- os=-coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
- *-haiku)
- os=-haiku
- ;;
- *-ibm)
- os=-aix
- ;;
- *-knuth)
- os=-mmixware
- ;;
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -cnk*|-aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -os400*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -tpf*)
- vendor=ibm
- ;;
- -vxsim* | -vxworks* | -windiss*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
+++ /dev/null
-#!/bin/sh
-
-IDENTIFICATION=fake-msgfmt.sh
-
-OUTPUT='/dev/null'
-
-while getopts ':d:o:' OPT;
-do
-case $OPT in
-o)
- OUTPUT=$OPTARG
- ;;
-*)
- ;;
- esac
-done
-
-
-
-shift `expr $OPTIND - 1`
-#
-# Input file name
-#
-if [ "$1" = "" ]
-then
- echo "$IDENTIFICATION: No input file name given"
- exit 1
-fi
-
-echo Faking msgfmt: copying $1 to $OUTPUT
-
-
-cp $1 $OUTPUT
+++ /dev/null
-#!@PYTHON@
-import string
-import getopt
-import sys
-import os
-import shutil
-(opts, args) = getopt.getopt (sys.argv[1:], 'b:cdg:m:o:st:', [])
-transform_base = None
-group = None
-owner = None
-transform = None
-mode = None
-copy = False
-create_dir = False
-
-for (o,a) in opts:
- if o == '-b':
- transform_base = a
- elif o == '-c':
- copy = True
- elif o == '-d':
- create_dir = True
- elif o == '-g':
- group = a
- elif o == '-m':
- mode = string.atoi (a, 8)
- elif o == '-o':
- owner = a
- elif o == '-s':
- strip = True
- elif o == '-t':
- transform = a
- elif o == '-h':
- print ''' Usage: $0 [OPTION]... SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 -d DIRECTORIES...
-
-In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
-In the second, create the directory path DIR.
-
-Options:
--b=TRANSFORMBASENAME
--c copy source (using $cpprog) instead of moving (using $mvprog).
--d create directories instead of installing files.
--g GROUP $chgrp installed files to GROUP.
--m MODE $chmod installed files to MODE.
--o USER $chown installed files to USER.
--s strip installed files (using $stripprog).
--t=TRANSFORM
---help display this help and exit.
---version display version info and exit.'''
- sys.exit (0)
-
-if not mode:
- if create_dir:
- mode = 0755
- else:
- mode = 0644
-
-
-chown_me = []
-
-dest = None
-if not create_dir:
- dest = args.pop()
-
-for f in args:
- if create_dir:
- if os.path.isdir (f):
- continue
-
- os.makedirs (f, mode=mode)
- chown_me.append (f)
- else:
- if copy:
- if os.path.exists (dest) and not os.path.isdir (dest):
- os.remove (dest)
- shutil.copy2 (f, dest)
- else:
- shutil.move (f, dest)
-
- if os.path.isdir (dest):
- chown_me.append (os.path.join (dest, os.path.basename (f)))
- else:
- chown_me.append (dest)
-
-for f in chown_me:
- os.chmod (f, mode)
- if group <> None or owner <> None:
- os.chown (f, group, owner)
-
-
-
-
-
+++ /dev/null
-
-import re
-import sys
-
-PROGRAM = sys.argv[0]
-VERSION = sys.argv[1]
-defs = []
-for i in open (VERSION).readlines ():
- i = re.sub ('#.*','', i)
- m = re.search ('([^ =]*)[\t ]*=[ \t]*([^ \t]*)[ \t]*\n', i)
- if m:
- defs.append ((m.group (1), m.group (2)))
-
-sys.stdout.write (r'''
-/*
- Automatically generated from %(VERSION)s
- by %(PROGRAM)s.
-*/
-#ifndef VERSION_HH
-#define VERSION_HH
-''' % vars ())
-
-for name, expansion in defs:
- # GUILE leaks autoconf data into userspace.
- sys.stdout.write (r'''
-#ifdef %(name)s
-#undef %(name)s
-#endif /* %(name)s */
-#define %(name)s "%(expansion)s"
-''' % vars ())
-
-if ('MY_PATCH_LEVEL', '') in defs:
- sys.stdout.write (r'''
-#define NO_MY_PATCHLEVEL
-#define TOPLEVEL_VERSION MAJOR_VERSION "." MINOR_VERSION "." PATCH_LEVEL
-''')
-else:
- sys.stdout.write (r'''
-#define TOPLEVEL_VERSION MAJOR_VERSION "." MINOR_VERSION "." PATCH_LEVEL "." MY_PATCH_LEVEL
-''')
-
-sys.stdout.write(r'''
-#endif /* VERSION_HH */
-''')
-
+++ /dev/null
-"""Winnt access into /etc/passwd via account name"""
-
-import sys
-import string
-
-def getpwname( name, pwfile='/etc/passwd' ):
- "Get password record that matches the specified name"
- try:
- _fd = open( pwfile, 'r' )
- except:
- sys.stderr.write("Error unable to locate" + pwfile + "\n")
- sys.stderr.write("Consult gnu-win32 command mkpasswd\n")
- sys.exit(1)
-
- _data = _fd.read()
- _fd.close()
-
- for _line in string.split(_data, '\n'):
- _record=string.split( _line, ':' );
- if _record[0] == name:
- return _record
- return ()
-
-def _test():
- pw = getpwname( 'jeff' )
- print pw[4]
-
-if __name__ == '__main__':
- _test()
+++ /dev/null
-#!/bin/sh
-# stepmakeise.sh
-
-help () {
- cat <<EOF
-Usage: ../stepmake-x.x.x/bin/stepmakeise.sh
-Include or update package's StepMake.
-EOF
-}
-
-name=`basename $0`
-reldir=../releases
-stepbin=`dirname $0`
-
-if [ $# -ne 0 ]; then
- help
- exit 2
-fi
-
-value ()
-{
- expression=`echo $1 | sed 's/\./ \\\\\* 100 + /g'`
- # urg? $1=`expr $expression`
- urg=/tmp/stepmakeise.$$
- echo expr $expression > $urg
- echo `. $urg`
- rm -f $urg
-}
-
-if [ -r stepmake ]; then
- . ./stepmake/VERSION
- if [ "x$PACKAGE_NAME" != "xStepMake" ]; then
- echo "$name: huh 1?"
- exit 1
- fi
- echo "Stepmake found"
- printf "Checking version..."
- VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL
- # urg
- version=$VERSION
- if [ "$MY_PATCH_LEVEL" != "" ]; then
- VERSION=$VERSION.$MY_PATCH_LEVEL
- fi
- echo " $version"
-else
- VERSION="0.0.0"
- version=$VERSION
-fi
-
-if [ true ]; then
- # urg
- printf "Checking latest..."
- if [ ! -r $reldir ]; then
- echo "$name: huh 2?"
- exit 1
- fi
- LATEST=`cd $reldir; ls -t1 stepmake-*.tar.gz | head -n 1 | sed 's!stepmake-!!' | sed 's!.tar.gz!!'`
- # urg
- latest=`echo $LATEST | sed 's/\.[a-zA-Z][a-zA-Z]*[0-9]*$//'`
- latest_val=`value $latest`
- echo " $latest"
- version_val=`value $version`
- if [ $latest_val -le $version_val ]; then
- echo "relax, StepMake is up to date"
- exit 0
- fi
- printf "Updating StepMake..."
- (set +x; rm -rf stepmake; tar xzf $reldir/stepmake-$LATEST.tar.gz; mv stepmake-$LATEST stepmake)
- echo "ok"
-fi
-
-if [ -r VERSION ]; then
- echo "$name: warning: VERSION found: not stepmakeising"
- echo "You should rerun configure"
- rm -f Makefile
- exit 0
-fi
-
-files="VERSION make aclocal.in configure.in config.hh.in config.make.in"
-for i in $files; do
- if [ -r $i ]; then
- echo "$name: can't stepmakise: $i already present"
- exit 1
- fi
-done
-
-printf "Stepmakeising..."
-for i in $files; do
- cp -prv stepmake/$i .
-done
-
-cat <<EOF
-ok
-Please edit the folowing files to your package's needs:
-
- VERSION
- configure.in
-
-and look at:
-
- make/Toplevel.make.in
- config.hh.in
- config.make.in
-EOF
-
+++ /dev/null
-#@PYTHON@
-import os
-import re
-import string
-import sys
-
-
-entities = {
- "&" : 'amp',
- "`" : 'apos',
- '>' : 'gt',
- '<' : 'lt',
- '"' : 'quot',
- }
-
-def txt2html (s):
- for i in entities.keys ():
- s = re.sub (i, '\001' + entities[i] + ';', s);
- s = re.sub ('\001', '&', s);
- return s
-
-for a in sys.argv[1:]:
- # hmm, we need: text2html out/foe.txt -> out/foe.html,
- # -o is a bit overkill?
- # outfile = os.path.basename (os.path.splitext(a)[0]) + '.html'
- outfile = os.path.splitext(a)[0] + '.html'
-
- try:
- os.unlink(outfile)
- except:
- pass
-
- s = r"""
-
-<html>
-<head>
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
-</head>
-
-<body><pre>
-%s
-</pre></body></html>
-""" % txt2html (open (a).read ())
- open (outfile, 'w').write (s)
-
-
+++ /dev/null
-/* @configure_input@ */
-
-/* Hmm */
-#define PACKAGE "@package@"
-
-/* Toplevel version */
-#define TOPLEVEL_VERSION "@TOPLEVEL_VERSION@"
-
-/* default init and input dir */
-#define DATADIR "@DATADIR@"
-
-/* default locale dir */
-#define LOCALEDIR "@LOCALEDIR@"
-
+++ /dev/null
-dnl configure.in -*-shell-script-*-
-dnl Process this file with autoconf to produce a configure script.
-
-# Bootstrap the init proces.
-AC_INIT
-
-# Bootstrap StepMake configure
-# For user package:
-# AC_CONFIG_AUX_DIR(stepmake/bin)
-# For stepmake package:
-AC_CONFIG_AUX_DIR(bin)
-STEPMAKE_INIT
-
-# List a file that identifies your package.
-AC_CONFIG_SRCDIR([make/stepmake.lsm.in])
-# Move to aclocal.m4?
-AC_CONFIG_HEADER([$CONFIGFILE.h:config.hh.in])
-
-# For all packages except the StepMake package itself
-# AC_CONFIG_SUBDIRS(stepmake)
-
-CC=echo
-AC_SUBST(CC)
-# Uncomment the configuration options your package needs.
-# STEPMAKE_COMPILE
-# AC_CHECK_HEADERS([limits.h malloc.h string.h unistd.h values.h])
-# STEPMAKE_CXX
-# STEPMAKE_GXX
-# STEPMAKE_CXXTEMPLATE
-# STEPMAKE_LEXYACC
-# STEPMAKE_LIB
-# STEPMAKE_LIBTOOL
-STEPMAKE_LOCALE
-# STEPMAKE_GETTEXT
-# STEPMAKE_MAN
-# STEPMAKE_MSGFMT
-# STEPMAKE_TEXMF
-# STEPMAKE_TEXMF_DIRS
-
-# AM_PATH_GTK(1.0.0,,AC_MSG_ERROR([please install proper version of gtk]))
-# AM_PATH_GTK__(0.9.4,,AC_MSG_ERROR([please install proper version of gtk--]))
-
-AC_CHECK_PROGS(MAKEINFO, makeinfo, error)
-
-STEPMAKE_END
+++ /dev/null
-# title makefile for stepmake
-
-# subdir level:
-#
-depth = ../..
-#
-
-# descent order into subdirectories:
-#
-SUBDIRS =
-#
-
-STEPMAKE_TEMPLATES=makedir install
-
-# bootstrap stepmake:
-#
--include $(depth)/make/stepmake.make
-
-ifeq ($(PACKAGE),STEPMAKE)
-INSTALLATION_DIR=$(datadir)/stepmake
-else
-INSTALLATION_DIR=$(dir $(patsubst %/, %, $(dir $(datadir))))$(package)/stepmake/stepmake
-endif
-INSTALLATION_FILES=GNUmakefile $(MAKE_FILES)
-
at-dir = $(doc-dir)
at-ext = .in
-
-EXTRA_DIST_FILES += $(call src-wildcard,*.ihtml)
-.PHONY : all clean bin-clean config default dist exe help html lib TAGS\
+.PHONY : all clean bin-clean default dist exe help html lib TAGS\
po doc doc-stage-1 WWW-1 WWW-2 WWW-post local-WWW-1 local-WWW-2\
log-clean
all: default
$(LOOP)
-bin:
- $(MAKE) PACKAGE=$(PACKAGE) package=$(package) -C lily
-
man:
$(LOOP)
$(MAKE) -C $(depth) dist
endif
-distclean: clean
- $(MAKE) local-distclean
-
-cvs-clean:
- $(MAKE) local-distclean
- rm -rf out
- rm -rf out-www
- rm -f aclocal.m4 configure
-
-maintainerclean:
- $(LOOP)
- $(MAKE) local-maintainerclean
- $(MAKE) local-distclean
-
-
-# This doesn't allow command-line options, is it really useful? -jm
-config:
- ./$(src-depth)/configure
-
-
generic-help:
@echo "Makefile for $(PACKAGE_NAME) $(TOPLEVEL_VERSION)"
@echo "Usage: make ["VARIABLE=value"]... [TARGET]"
@echo " doc-clean clean \`out-www' directory"
@echo " install install programs and data (prefix=$(prefix))"
@echo " uninstall uninstall programs and data"
+ @echo " test build regression tests for the program and scripts"
@echo
@echo " *Note: Prepend \`local-' (eg. \`local-clean') to restrict"
@echo " any of the above commands to the current directory."
@echo
@echo "Other generic targets:"
@echo " default same as the empty target"
- @echo " bin check the lily directory and rebuild lilypond.exe if needed"
@echo " exe update all executables"
@echo " help this help"
@echo " lib update all libraries"
+ @echo " log-clean remove .log files"
@echo " TAGS generate tagfiles"
@echo
- @echo "\`make' may be invoked from any subdirectory."
+ @echo "\`make' may be invoked from any subdirectory that contains a GNUmakefile."
local-help:
-local-dist: $(DIST_FILES) $(OUT_DIST_FILES) $(NON_ESSENTIAL_DIST_FILES)
- mkdir -p $(distdir)/$(localdir)
- $(LN) $(DIST_FILES:%=$(src-dir)/%) $(distdir)/$(localdir)
-
- case "$(NON_ESSENTIAL_DIST_FILES)x" in x) ;; *) \
- $(LN) $(NON_ESSENTIAL_DIST_FILES:%=$(src-dir)/%) $(distdir)/$(localdir);; \
- esac
- case "$(OUT_DIST_FILES)x" in x) ;; *) \
- mkdir -p $(distdir)/$(localdir)/$(outdir); \
- $(LN) $(OUT_DIST_FILES) $(distdir)/$(localdir)/$(outdir);; \
+local-dist: $(OUT_DIST_FILES)
+ case "$(OUT_DIST_FILES)x" in x) ;; \
+ *) mkdir -p $(distdir)/$(localdir)/$(outdir) && \
+ $(LN) $(OUT_DIST_FILES) $(distdir)/$(localdir)/$(outdir);; \
esac
$(foreach i, $(SUBDIRS), $(MAKE) top-src-dir=$(top-src-dir) distdir=$(distdir) localdir=$(localdir)/$(notdir $(i)) -C $(i) local-dist &&) true
$(ERROR_LOG) ; \
fi
-$(outdir)/version.hh: $(depth)/VERSION $(config_make) $(step-bindir)/make-version.py
- $(PYTHON) $(step-bindir)/make-version.py $< > $@
+# Don't use $(buildscript-dir)/make-version, because it is not known whether
+# build process has visited scripts/build
+$(outdir)/version.hh: $(depth)/VERSION $(config_make) $(top-src-dir)/scripts/build/make-version.py
+ $(PYTHON) $(top-src-dir)/scripts/build/make-version.py $< > $@
$(outdir)/config.hh: $(config_h)
cp -p $< $@
local-distclean:
-local-maintainerclean:
-
install-strip:
$(MAKE) INSTALLPY="$(INSTALLPY) -s" install
$(MAKE) out=www WWW-post
doc-stage-1:
+ $(MAKE) -C $(top-build-dir)/Documentation/po out=www messages
$(MAKE) -C $(depth)/scripts/build out=
$(MAKE) out=www WWW-1
doc-dir = $(src-depth)/Documentation
po-srcdir = $(src-depth)/po
po-outdir = $(depth)/po/$(outdir)
-step-bindir = $(stepmake)/bin
# stepmake package support.
DEPTH = $(depth)/$(package-depth)
-INSTALLPY=$(PYTHON) $(step-bindir)/install.py -c
+INSTALLPY=$(buildscript-dir)/install -c
INSTALL=$(INSTALLPY)
group-dir = $(shell cd $(DEPTH);pwd)/..
M4 = m4
-DIST_FILES=$(EXTRA_DIST_FILES) GNUmakefile $(ALL_SOURCES) $(call src-wildcard,SConscript)
DOCDIR=$(depth)/$(outdir)
#?
OUTSPEC_FILES=$(addprefix $(outdir)/,$(basename $(SPEC_FILES)))
OUT_DIST_FILES= $(strip $(OUTLSM_FILES) $(OUTSPEC_FILES))
-EXTRA_DIST_FILES += $(MAKE_FILES)
-
# these two outdir FILES are distributed, since they make sense to have
# without running configure and make.
at-dir = $(doc-dir)
at-ext = .in
-
-
-
MF_FILES := $(call src-wildcard,*.mf)
-EXTRA_DIST_FILES += $(MF_FILES)
MF_TFM_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.tfm))
MF_DVI_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.dvi))
MF_LOG_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.log))
HELP_CATALOGS = $(PO_FILES:%.po=%)
CATALOGS = $(HELP_CATALOGS:$(DOMAIN)=)
-
-DIST_FILES += $(POT_FILES) $(PO_FILES)
-
SHARED_FLAGS = -bundle -flat_namespace -undefined suppress
endif
OUT_SO_MODULES = $(addprefix $(outdir)/, $(C_FILES:.c=$(SHARED_MODULE_SUFFIX)))
-EXTRA_DIST_FILES += $(PY_MODULES_IN)
-
-.PHONY: install-doc uninstall-doc
+.PHONY: install-doc uninstall-doc distclean top-doc
install-doc:
uninstall-doc:
-local-dist: configure
+distclean: clean doc-clean test-clean log-clean
+ $(MAKE) local-distclean
local-distclean:
- rm -f config.hh config.make Makefile GNUmakefile \
- config.cache config.status config.log index.html \
- stepmake/stepmake/stepmake stepmake/stepmake/bin
+ rm -f config.hh config.make GNUmakefile \
+ config.cache config.status config.log
rm -rf autom4te.cache
rm -rf $(outdir)
-local-maintainerclean:
-
GNUmakefile: GNUmakefile.in
$(MAKE) INFILE=$< OUTFILE=$@ -f $(stepdir)/automatically-generated.sub.make
-ifneq ($(PACKAGE),STEPMAKE)
-aclocal.m4: $(stepmake)/aclocal.m4
- $(MAKE) INFILE=$< OUTFILE=$@ LINECOMMENT=dnl -f $(stepdir)/automatically-generated.sub.make
-
-autogen.sh: $(stepmake)/autogen.sh
- $(MAKE) INFILE=$< OUTFILE=$@ LINECOMMENT=\# -f $(stepdir)/automatically-generated.sub.make
- chmod +x autogen.sh
-endif
-
-
$(package-icon):
$(MAKE) -C Documentation/logo icon
$(MAKE) final-install
endif
-local-dist: top-doc
-
-dist:
- rm -rf $(distdir)
- $(MAKE) local-dist $(distdir)
- chmod -R a+r $(distdir)
- chmod a+x `find $(distdir) -type d -print`
- (cd ./$(depth)/$(outdir); $(TAR) -cf - --owner=0 --group=0 $(DIST_NAME) | gzip -9 > $(DIST_NAME).tar.gz)
- rm -rf $(distdir)
-
local-help:
@echo " config rerun configure"
@echo " dist roll tarball: $(depth)/$(outdir)/$(distname).tar.gz"
- @echo " distclean also remove configure output"
- @echo " cvs-clean also remove out directories and generated files"
- @echo " maintainerclean also remove distributed generated files"
+ @echo " distclean make clean, doc-clean, test-clean, log-clean and"
+ @echo " also remove configure output"
@echo " po make new translation Portable Object database"
@echo " po-replace do po-update and replace catalogs with msgmerged versions"
@echo " po-update update translation Portable Object database"
@echo " test-clean"
@echo
@echo " For more information on these targets, see"
- @echo " \`Testing LilyPond' in the Contributor's Guide."
+ @echo " \`Verify regression tests' in the Contributor's Guide."
@echo
-
-# override Generic_vars.make:
-DIST_FILES := $(EXTRA_DIST_FILES)
-
# urg?
include $(stepdir)/documentation-vars.make