}
@end lilypond
-
-LilyPond is more flexible than some users realise. Han-Wen could be
-very rich.
-
-Just too funny not to include.
-
@example
-@quotation
- I've just entered a request on cosource.com :
-@quotation
- http://www.cosource.com/cgi-bin/cos.pl/wish/info/387
-@end quotation
Here's a copy of my feature request :
@quotation
Your task, if you accept it is to implement a \smarttranspose
notations. Double accidentals should be removed, as well as #E
(-> F), bC (-> B), bF (-> E), #B (-> C).
@end quotation
-@end quotation
-You mean like this. (Sorry 'bout the nuked indentation.)
-Add IMPLEMENT_TYPE_P(Music, "music?"); to music.cc, and presto, done.
-
-That's an easy $ 100; if I'd make $ 200/hour for every hour I worked
-on Lily, I'd be very rich :)
+You mean like this. (Sorry 'bout the nuked indentation.)
@end example
--- /dev/null
+
+\header { texidoc=" You can write molecule callbacks in Scheme, thus
+providing custom glyphs for notation elements. A simple example is
+adding parentheses to existing molecule callbacks.
+
+The parenthesized beam is less successful due to implementation of the
+Beam.
+";
+
+ }
+
+#(define (parenthesize-callback callback)
+ "Construct a function that will do CALLBACK and add parentheses.
+Example usage:
+
+ \property Voice.NoteHead \\override #'molecule-callback
+ =
+ #(parenthesize-callback Note_head::brew_molecule)
+
+"
+
+
+ (define (parenthesize-molecule grob)
+ "This function adds parentheses to the original callback for
+GROB. The dimensions of the molecule is not affected.
+"
+
+ (let* (
+ (fn (ly-get-default-font grob))
+ (pclose (ly-find-glyph-by-name fn "accidentals-)"))
+ (popen (ly-find-glyph-by-name fn "accidentals-("))
+ (subject (callback grob))
+
+ ;; remember old size
+ (subject-dims (ly-get-molecule-extent subject 0))
+ )
+
+ ;; add parens
+ (set! subject
+ (ly-combine-molecule-at-edge
+ (ly-combine-molecule-at-edge subject 0 1 pclose 0.2)
+ 0 -1 popen 0.2))
+
+ ;; revert old size.
+ (ly-set-molecule-extent! subject 0 subject-dims)
+ subject
+ )
+ )
+ parenthesize-molecule
+ )
+
+
+
+\score {
+ \notes \relative c' { c4 e
+
+ \property Voice.NoteHead \override #'molecule-callback
+ =
+ #(parenthesize-callback Note_head::brew_molecule)
+ g bes
+ \property Voice.NoteHead \revert #'molecule-callback
+ \property Voice.Beam \override #'molecule-callback
+ =
+ #(parenthesize-callback Beam::brew_molecule)
+
+ a8 gis8 a2.
+
+ }
+
+ \paper { linewidth = -1.; }
+ }
+