From 69d7781c6ab26df02bc81ff1eb294d47fa673491 Mon Sep 17 00:00:00 2001 From: Graham Percival Date: Mon, 7 Mar 2011 12:33:57 +0000 Subject: [PATCH] Move chordGlissando into music-functions-init.ly --- .../snippets/chord-glissando-in-tablature.ly | 2 - .../new/chord-glissando-in-tablature.ly | 2 - ly/chord-glissando-init.ly | 83 ------------------- ly/music-functions-init.ly | 65 ++++++++++++++- 4 files changed, 64 insertions(+), 88 deletions(-) delete mode 100644 ly/chord-glissando-init.ly diff --git a/Documentation/snippets/chord-glissando-in-tablature.ly b/Documentation/snippets/chord-glissando-in-tablature.ly index f1ab4d37cd..6bd5505fd0 100644 --- a/Documentation/snippets/chord-glissando-in-tablature.ly +++ b/Documentation/snippets/chord-glissando-in-tablature.ly @@ -19,8 +19,6 @@ and @code{\\chordGlissando} draws lines between single notes. } % begin verbatim -\include "chord-glissando-init.ly" - myMusic = \relative c' { \chordGlissando 8 diff --git a/Documentation/snippets/new/chord-glissando-in-tablature.ly b/Documentation/snippets/new/chord-glissando-in-tablature.ly index e3d3f610ae..1f5e08834d 100644 --- a/Documentation/snippets/new/chord-glissando-in-tablature.ly +++ b/Documentation/snippets/new/chord-glissando-in-tablature.ly @@ -11,8 +11,6 @@ and @code{\chordGlissando} draws lines between single notes. doctitle = "Chord glissando in tablature" } -\include "chord-glissando-init.ly" - myMusic = \relative c' { \chordGlissando 8 diff --git a/ly/chord-glissando-init.ly b/ly/chord-glissando-init.ly deleted file mode 100644 index f59c99d11f..0000000000 --- a/ly/chord-glissando-init.ly +++ /dev/null @@ -1,83 +0,0 @@ -%%%% This file is part of LilyPond, the GNU music typesetter. -%%%% -%%%% Copyright (C) 2010 Carl D. Sorensen -%%%% -%%%% 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 . - -\version "2.13.49" - -%% Make slide indication for chords -chordGlissando = -#(define-music-function (parser location mus1 mus2) (ly:music? ly:music?) - "Make a glissando between the notes of triads @code{mus1} and @code{mus2}." - - (define (add-glissando musChord) - (let ((els (ly:music-property musChord 'elements))) - (ly:music-set-property! musChord 'elements (append els (list (make-music 'GlissandoEvent)))) - musChord)) - - (define (get-notes musicChord) - (filter (lambda(x) (eq? (ly:music-property x 'name) 'NoteEvent)) - (ly:music-property musicChord 'elements))) - - (define (select-note musChord index) - (let* ((notes (get-notes musChord)) - (non-notes (filter (lambda (x) - (not (eq? (ly:music-property x 'name) - 'NoteEvent))) - (ly:music-property musChord 'elements))) - (selected-note (list-ref notes index)) - (new-els (cons selected-note non-notes)) - (new-mus (ly:music-deep-copy musChord))) - (ly:music-set-property! new-mus 'elements new-els) - new-mus)) - - (define (add-glissando-line mus1 mus2 index) - (context-spec-music - (context-spec-music - (make-sequential-music - (list - hideNotes - (make-grob-property-set 'StringNumber 'transparent #t) - (make-grob-property-set 'NoteColumn 'ignore-collision #t) - ;; obviously, this isn't equivalent to \once, - ;; so could be changed if required - (make-grob-property-set 'Glissando 'thickness 2) - (make-grob-property-set 'DynamicText 'transparent #t) - (make-grob-property-set 'DynamicLineSpanner 'transparent #t) - (make-grob-property-set 'DynamicTextSpanner 'transparent #t) - (add-glissando (select-note mus1 index)) - (select-note mus2 index))) - 'Bottom (symbol->string (gensym))) - 'Staff)) - - (let* ((notes1 (get-notes mus1)) - (notes2 (get-notes mus2)) - (note-count (min (length notes1) (length notes2)))) - - #{ - \once \override Glissando #'minimum-length = #4 - \once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods - << - { - $(add-glissando mus1) - $mus2 - } - $(make-simultaneous-music - (map (lambda (x) - (add-glissando-line mus1 mus2 x)) - (iota note-count))) - >> - \revert NoteColumn #'ignore-collision - #})) diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index 2ebbd8f1bc..10643a3bab 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -204,7 +204,70 @@ breathe = (_i "Insert a breath mark.") (make-music 'BreathingEvent)) - +%% Make slide indication for chords +chordGlissando = +#(define-music-function (parser location mus1 mus2) (ly:music? ly:music?) + "Make a glissando between the notes of triads @code{mus1} and @code{mus2}." + + (define (add-glissando musChord) + (let ((els (ly:music-property musChord 'elements))) + (ly:music-set-property! musChord 'elements (append els (list (make-music 'GlissandoEvent)))) + musChord)) + + (define (get-notes musicChord) + (filter (lambda(x) (eq? (ly:music-property x 'name) 'NoteEvent)) + (ly:music-property musicChord 'elements))) + + (define (select-note musChord index) + (let* ((notes (get-notes musChord)) + (non-notes (filter (lambda (x) + (not (eq? (ly:music-property x 'name) + 'NoteEvent))) + (ly:music-property musChord 'elements))) + (selected-note (list-ref notes index)) + (new-els (cons selected-note non-notes)) + (new-mus (ly:music-deep-copy musChord))) + (ly:music-set-property! new-mus 'elements new-els) + new-mus)) + + (define (add-glissando-line mus1 mus2 index) + (context-spec-music + (context-spec-music + (make-sequential-music + (list + hideNotes + (make-grob-property-set 'StringNumber 'transparent #t) + (make-grob-property-set 'NoteColumn 'ignore-collision #t) + ;; obviously, this isn't equivalent to \once, + ;; so could be changed if required + (make-grob-property-set 'Glissando 'thickness 2) + (make-grob-property-set 'DynamicText 'transparent #t) + (make-grob-property-set 'DynamicLineSpanner 'transparent #t) + (make-grob-property-set 'DynamicTextSpanner 'transparent #t) + (add-glissando (select-note mus1 index)) + (select-note mus2 index))) + 'Bottom (symbol->string (gensym))) + 'Staff)) + + (let* ((notes1 (get-notes mus1)) + (notes2 (get-notes mus2)) + (note-count (min (length notes1) (length notes2)))) + + #{ + \once \override Glissando #'minimum-length = #4 + \once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods + << + { + $(add-glissando mus1) + $mus2 + } + $(make-simultaneous-music + (map (lambda (x) + (add-glissando-line mus1 mus2 x)) + (iota note-count))) + >> + \revert NoteColumn #'ignore-collision + #})) clef = #(define-music-function (parser location type) (string?) -- 2.39.5