* input/regression/collision-head-chords.ly (texidoc): new file.
* lily/type-swallow-translator.cc: add note swallow translator
* input/test/time-signature-double.ly: new file.
* lily/type-swallow-translator.cc: add Rest_swallow_translator
* ly/engraver-init.ly (ChordNamesContext): add Rest_swallow_translator
(FiguredBassContext): idem.
2003-03-05 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ * input/test/time-signature-double.ly: new file
+
+ * input/regression/collision-head-chords.ly (texidoc): new file.
+
+ * lily/type-swallow-translator.cc: add note swallow translator
+
+ * input/test/time-signature-double.ly: new file.
+
+ * lily/type-swallow-translator.cc: add Rest_swallow_translator
+
+ * ly/engraver-init.ly (ChordNamesContext): add Rest_swallow_translator
+ (FiguredBassContext): idem.
+
* VERSION (MY_PATCH_LEVEL): 1.7.14 released
* input/mutopia/W.A.Mozart/*.ly (romanze): markup syntax updates.
@chapter GNU LilyPond --- The music typesetter
-This is the user manual for GNU LilyPond 1.6.0.
+This is the user manual for GNU LilyPond 1.7.14.
@cindex web site
"\"God\"" is "`King'"
@end example
+You can use empty syllables, e.g. @code{_4} or @code{" "4} to enter
+lyrics. This can confuse the LilyPond -- for example, this might put
+(empty) lyrics under rests. To remedy this, use @code{\skip}.
@menu
\chords { c1 c/+g c/+f }
@end lilypond
+The chords mode is a mode similar to @code{\lyrics}, @code{\notes}
+etc. Most of the commands continue to work, for example, @code{r} and
+@code{\skip} can be used to insert spaces, and @code{\property} to
+change various settings.
+
+
@refbugs
\paper { linewidth = -1. } }
@end lilypond
+@cindex SpacingSpanner, overriding properties
+
+The @internalsref{SpacingSpanner}, is score wide, so its properties
+must be overriden from the @code{\paper} block, e.g.
+@example
+\paper @{ \translator @{
+ \ScoreContext
+ SpacingSpanner \override #'spacing-increment = #3.0
+@} @}
+@end example
@refbugs
@node A melody with chords
@section A melody with chords
+[TODO: show how to do fixed 4 measures to the line]
+
In this section we show how to typeset a melody with chord
accompaniment. This file is included as @file{input/tutorial/flowing.ly}.
\version "1.7.6"
+\header {
+texidoc = "Collisions for single head notes. "
+}
\score {
\notes
- \context Staff \notes <
- %% the f and g on 4th beat are exceptionally ugh.
- \context Voice=i { \stemUp c4 d e f g2 g4 a | }
- \context Voice=ii { \stemDown g4 f e g g2 g2 }
+ \context Staff \notes \transpose c c' <
+ { c4 d e f g2 g4 a | } \\
+ { g4 f e g g2 g2 }
>
}
-%% new-chords-done %%
\ No newline at end of file
+%% new-chords-done %%
--- /dev/null
+\version "1.7.14"
+\header {
+texidoc = "Note heads in collisions should be merged if
+they have the same positions in the extreme note heads.
+"
+
+}
+
+
+\score {
+\notes \relative c'' {
+c4
+ < { c4 d4 <<c d>>8 <<c d>> <<c d>> } \\ { c4 c <<a b>>8 <<b c>> <<c d>>8 } >
+}
+\paper {linewidth = -1.0 }
+}
+
+%% new-chords-done %%
--- /dev/null
+
+\header {
+
+
+texidoc= "Double time signatures are not supported
+explicitly, but can be faked by overriding formatting routines. "
+
+}
+\version "1.7.14"
+
+
+#(define (brew-double-time-sig grob)
+ (define (frac-to-mol font frac)
+ (let*
+ (
+ (d (fontify-text font (number->string (cdr frac))))
+ (n (fontify-text font (number->string (car frac))))
+ (c (ly:molecule-combine-at-edge d Y UP n 0.0))
+ )
+ (ly:molecule-align-to! c Y CENTER)
+ c
+ ))
+
+ (let*
+
+ (
+ (chain (Font_interface::get_property_alist_chain grob))
+ (font (ly:get-font grob chain))
+ (f1 '(6 . 4))
+ (musfont (ly:get-font grob (cons (list '(font-relative-size . 2) '(font-family . music)) chain)))
+ (plus (ly:molecule-translate-axis (ly:find-glyph-by-name musfont "scripts-stopped") 0.1 Y))
+ (f2 '(3 . 2))
+ (m1 (frac-to-mol font f1))
+ (m2 (frac-to-mol font f2))
+ )
+
+
+ (ly:molecule-combine-at-edge
+ (ly:molecule-combine-at-edge m1 X RIGHT plus 0.2)
+ X RIGHT m2 0.2)
+
+ )
+)
+
+
+\score { \notes \relative c'
+ {
+ \property Staff.TimeSignature \override #'molecule-callback = #brew-double-time-sig
+ \time 3/2
+ c2 c c
+
+ }
+
+ }
+
};
+class Rest_swallow_translator : public virtual Translator
+{
+protected:
+ virtual bool try_music (Music*) { return true; }
+
+public:
+ TRANSLATOR_DECLARATIONS(Rest_swallow_translator);
+};
+
+
Skip_req_swallow_translator::Skip_req_swallow_translator(){}
ENTER_DESCRIPTION(Skip_req_swallow_translator,
"",
"",
"");
+
+
+Rest_swallow_translator::Rest_swallow_translator(){}
+
+ENTER_DESCRIPTION(Rest_swallow_translator,
+ "Swallow rest",
+ "",
+ "rest-event",
+ "",
+ "",
+
+
+ "");
+
+class Note_swallow_translator : public virtual Translator
+{
+protected:
+ virtual bool try_music (Music*) { return true; }
+
+public:
+ TRANSLATOR_DECLARATIONS(Note_swallow_translator);
+};
+
+Note_swallow_translator::Note_swallow_translator(){}
+
+ENTER_DESCRIPTION(Note_swallow_translator,
+ "Swallow notes",
+ "",
+ "note-event",
+ "",
+ "",
+ "");
\type "Engraver_group_engraver"
\name ChordNames
+ \consists "Rest_swallow_translator"
\consists "Output_property_engraver"
\consists "Separating_line_group_engraver"
\consists "New_chord_name_engraver"
FiguredBassContext = \translator {
\type "Engraver_group_engraver"
\name FiguredBass
- \consists "Figured_bass_engraver"
+ \consists "Figured_bass_engraver"
+ \consists "Rest_swallow_translator"
+ \consists "Note_swallow_translator"
\consistsend "Axis_group_engraver"
}
"Brew a single column for a music figure"
(let* (
(chain (Font_interface::get_property_alist_chain grob))
- (mf (ly:get-font grob (cons '((font-family . music))
+ (mf (ly:get-font grob (cons '((font-family . music) (font-magnification . 0.8))
chain
)))
(nf (ly:get-font grob