lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Merging a markup-command with an event-function


From: Pierre Perol-Schneider
Subject: Merging a markup-command with an event-function
Date: Sat, 14 Mar 2015 18:42:57 +0100

Hi,

In order to make a new guitar barré function, I'm trying to merge the attached markup-command with an event-function (without success - problem is on line #90):

%%%%%%%%%%%%%%%%%
\version "2.18.2"

Prefix = \markup {
  %% uncomment/comment these lines for C, C slashed, B or B slashed prefix :
  \roman C
  %\combine \roman C \translate #'(0.65 . -0.25) \override #'(thickness . 1.2) \draw-line #'(0 . 1.8)
  %\roman B
  %\combine \roman B \translate #'(0.65 . -0.25) \override #'(thickness . 1.2) \draw-line #'(0 . 1.8)
  %%%%%%%%%%%%
  \hspace #0.2
}

#(define-markup-command (prefix layout props string-qty) (integer?)
    (interpret-markup layout props
      (case string-qty
            ((2) #{
                    \markup {
                      \override #'(font-family . typewriter)
                      \concat {
                      \raise #.15
                      \fontsize #-6
                        {
                          \raise #.5 "1"
                          \hspace #-.2
                          \raise #.2 "/"
                          \hspace #-.2
                          "3"
                        }
                        \Prefix
                      }
                    }
                 #})
            ((3) #{
                    \markup {
                      \override #'(font-family . typewriter)
                      \concat {
                      \raise #.15
                      \fontsize #-6
                        {
                          \raise #.5 "1"
                          \hspace #-.2
                          \raise #.2 "/"
                          \hspace #-.2
                          "2"
                        }
                        \Prefix
                      }
                    }
                 #})
            ((4) #{
                    \markup {
                      \override #'(font-family . typewriter)
                      \concat {
                      \raise #.15
                      \fontsize #-6
                        {
                          \raise #.5 "2"
                          \hspace #-.2
                          \raise #.2 "/"
                          \hspace #-.2
                          "3"
                        }
                        \Prefix
                      }
                    }
                 #})
            ((5) #{
                    \markup {
                      \override #'(font-family . typewriter)
                      \concat {
                      \raise #.15
                      \fontsize #-6
                        {
                          \raise #.5 "5"
                          \hspace #-.2
                          \raise #.2 "/"
                          \hspace #-.2
                          "6"
                        }
                        \Prefix
                      }
                    }
                 #})
            (else
             #{ \markup\Prefix #}))))

startBarre =
#(define-event-function (parser location arg-string-qty fret-nbr) (integer? markup?)
   ;; here's the problem ??
  (define string-qty arg-string-qty)
  ;; hereunder should be fine:
  (let* ((mrkp (markup #:upright #:concat (prefix fret-nbr))))
    (let* ((mrkp (markup #:upright #:concat (#:lower 0.08 prefix #:lower 0.05 fret-nbr #:hspace 0.3))))
    (define (width grob text-string)
      (let* ((layout (ly:grob-layout grob))
             (props (ly:grob-alist-chain
                       grob
                       (ly:output-def-lookup layout 'text-font-defaults))))
      (interval-length
         (ly:stencil-extent
           (interpret-markup layout props (markup text-string))
           X))))
    #{ 
      \tweak TextSpanner.after-line-breaking
        #(lambda (grob)
          (let* ((mrkp-width (width grob mrkp))
                 (line-thickness (ly:staff-symbol-line-thickness grob)))
           (ly:grob-set-nested-property!
             grob
             '(bound-details left padding)
             (+ (/ mrkp-width -4) (* line-thickness 2)))))
      \tweak TextSpanner.font-size -2
      \tweak TextSpanner.style #'line
      \tweak TextSpanner.bound-details.left.text #mrkp
      \tweak TextSpanner.bound-details.left.padding 0.25
      \tweak TextSpanner.bound-details.left.attach-dir -1
      \tweak TextSpanner.bound-details.left-broken.text ##f
      \tweak TextSpanner.bound-details.left-broken.attach-dir -1
      %% adjust the numeric values to fit your needs:
      \tweak TextSpanner.bound-details.left-broken.padding 1.5
      \tweak TextSpanner.bound-details.right-broken.padding 0
      \tweak TextSpanner.bound-details.right.padding 0.25
      \tweak TextSpanner.bound-details.right.attach-dir 2
      \tweak TextSpanner.bound-details.right-broken.text ##f
      \tweak TextSpanner.bound-details.right.text
        \markup \draw-line #'(0 . -1)
      \startTextSpan
    #})))

stopBarre = \stopTextSpan

%% Syntax: note \startBarre #'string quantity' "text"  notes \stopBarre (text = any fret number)
%% Example:

{
  \clef "G_8"
  \key d\minor
  <<
    { \voiceOne a'16[ \startBarre #3 "III" bes d' bes f'8] \stopBarre }
    \\
    { \voiceTwo d2 }
  >>
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%


Thanks in advance for any help!

Cheers,
Pierre

Attachment: barres.ly
Description: Text Data

Attachment: prefix.ly
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]