[prev in list] [next in list] [prev in thread] [next in thread] 

List:       lilypond-user
Subject:    Re: TextSpanner usability improvements
From:       Martín_Rincón_Botero <martinrinconbotero () gmail ! com>
Date:       2020-09-25 9:01:29
Message-ID: CAG9pZzWGSLUKkPjAvaK3spGvP61hW8QCvGnK+0_7J8ifR=zACA () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Dear all,

in case there are people like me interested in having a basic syntax for
inputting text spanners, I wrote three simple functions for that matter:
\textSpan, \textSpanArrow and \textSpanDoubleArrow. They replace in
practice following overrides with user input:

\override TextSpanner.bound-details.left.text
\override TextSpanner.bound-details.right.text
\override TextSpanner.style
\override TextSpanner.bound-details.right.arrow
\override TextSpanner.bound-details.left.arrow

The syntax of these three functions is:
\textSpan "text" #'linestyle "text", and are used in combination with
\startTextSpan and \stopTextSpan. Overrides and tweaks can still be used,
preferably after and not before, so that what you change is not changed
again by these functions.

\version "2.20.0"

textSpan = #(define-music-function
                   (parser location leftmarkup style rightmarkup)
                   (markup? symbol? markup?)
                   #{
\override TextSpanner.bound-details.left.text = \markup { \upright
#leftmarkup }
\override TextSpanner.bound-details.right.text = \markup { \upright
#rightmarkup }
\override TextSpanner.bound-details.left-broken.text = ##f
\override TextSpanner.bound-details.right-broken.text = ##f
\override TextSpanner.style = #style
\override TextSpanner.bound-details.right.arrow = ##f
\override TextSpanner.bound-details.left.arrow = ##f
                   #})

textSpanArrow = #(define-music-function
                   (parser location leftmarkup style rightmarkup)
                   (markup? symbol? markup?)
                   #{
\override TextSpanner.style = #style
\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.arrow = ##t
\override TextSpanner.bound-details.left.text = \markup { \upright
#leftmarkup }
\override TextSpanner.bound-details.right.text = \markup { \upright
#rightmarkup }
\override TextSpanner.bound-details.left-broken.text = ##f
\override TextSpanner.bound-details.right-broken.text = ##f
\override TextSpanner.dash-period = 1.0
                   #})

textSpanDoubleArrow = #(define-music-function
                   (parser location leftmarkup style rightmarkup)
                   (markup? symbol? markup?)
                   #{
\override TextSpanner.style = #style
\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.arrow = ##t
\override TextSpanner.bound-details.left.arrow = ##t
\override TextSpanner.bound-details.left.text = \markup { \upright
#leftmarkup }
\override TextSpanner.bound-details.right.text = \markup { \upright
#rightmarkup }
\override TextSpanner.bound-details.left-broken.text = ##f
\override TextSpanner.bound-details.right-broken.text = ##f
\override TextSpanner.dash-period = 1.0
                   #})

%EXAMPLE

\relative c' {
  \textSpan \markup { \bold "press." } #'trill \markup { \italic
\center-align "norm." }
  c1\startTextSpan
  c1
  c1\stopTextSpan
  \textSpanArrow "m. vib." #'dashed-line \markup { \center-align "senza
vib."}
  \break
  c1\startTextSpan
  c1
  c1\stopTextSpan
  \break
  \textSpanDoubleArrow \markup { \box "sul pont."} #'line "sul tasto"
  c1\startTextSpan
  c1
  c1
  c1\stopTextSpan
  \textSpan \markup {\italic "air"} #'zigzag " "
  c1\startTextSpan
  c4 c2.\stopTextSpan
}

[image: image.png]

Cheers,
Martín.




Am So., 20. Sept. 2020 um 18:57 Uhr schrieb Thomas Morley <
thomasmorley65@gmail.com>:

> Am So., 20. Sept. 2020 um 17:30 Uhr schrieb Xavier Scheuer
> <x.scheuer@gmail.com>:
> >
> > On Sun, 20 Sep 2020 at 13:03, Thomas Morley <thomasmorley65@gmail.com>
> wrote:
> > >
> > > Hi Martin,
> > >
> > > in general I'm more with Aaron.
> > > P.e., I have no clue which default text one could think of for
> > > TextSpanner's left/right-text!?
> > > Otoh, I'd wish we'd have a LilyPond-data-structure to assign a list of
> > > key/value pairs in ly-syntax to a variable. Right now we can do so at
> > > top-level, in layout, paper and \with.
> > >
> > > That said, find attached a TempoSpanner-coding.
> > > I'm not sure it's the best approach at all. For sure there's wide room
> > > for improvements.
> > > Probably the best one could say: it's a proof of concept.
> >
> > Hi,
> >
> > Great! Could you add this to issue 3176 (a proof of concept is not yet a
> proper solution, but is anyway better than nothing, especially for a 7
> years old issue)?
> > https://gitlab.com/lilypond/lilypond/-/issues/3176
> >
> > Thank you!
> >
> > Cheers,
> > Xavier
> >
> > --
> > Xavier Scheuer <x.scheuer@gmail.com>
> >
>
> Done, with a slightly improved and commented code:
> https://gitlab.com/lilypond/lilypond/-/issues/3176#note_415526421
>
> Cheers,
>   Harm
>


-- 
www.martinrinconbotero.com

[Attachment #5 (text/html)]

<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:trebuchet \
ms,sans-serif">Dear all,</div><div class="gmail_default" style="font-family:trebuchet \
ms,sans-serif"><br></div><div class="gmail_default" style="font-family:trebuchet \
ms,sans-serif">in case there are people like me interested in having a basic syntax \
for inputting text spanners, I wrote three simple functions for that matter: \
\textSpan, \textSpanArrow and \textSpanDoubleArrow. They replace in practice \
following overrides with user input:</div><div class="gmail_default" \
style="font-family:trebuchet ms,sans-serif"><br></div><div \
class="gmail_default"><span style="font-family:monospace">\override \
TextSpanner.bound-details.left.text</span></div><div class="gmail_default"><span \
style="font-family:monospace">\override \
TextSpanner.bound-details.right.text</span></div><div class="gmail_default"><span \
style="font-family:monospace">\override TextSpanner.style</span></div><div \
class="gmail_default"><span style="font-family:monospace">\override \
TextSpanner.bound-details.right.arrow</span></div><div class="gmail_default"><span \
style="font-family:monospace">\override \
TextSpanner.bound-details.left.arrow</span></div><div class="gmail_default" \
style="font-family:trebuchet ms,sans-serif"><br></div><div class="gmail_default" \
style="font-family:trebuchet ms,sans-serif">The syntax of these three functions \
is:</div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif"><span \
style="font-family:monospace">\textSpan &quot;text&quot; #&#39;linestyle \
&quot;text&quot;</span>, and are used in combination with <span \
style="font-family:monospace">\startTextSpan</span> and <span \
style="font-family:monospace">\stopTextSpan</span>. Overrides and tweaks can still be \
used, preferably after and not before, so that what you change is not changed again \
by these functions.<br></div><div class="gmail_default" style="font-family:trebuchet \
ms,sans-serif"><br></div><div class="gmail_default"><span \
style="font-family:monospace">\version &quot;2.20.0&quot;<br></span></div><div \
class="gmail_default"><span style="font-family:monospace"><br></span></div><div \
class="gmail_default"><span style="font-family:monospace">textSpan = \
#(define-music-function<br>                             (parser location leftmarkup \
style rightmarkup)<br>                             (markup? symbol? markup?)<br>      \
#{<br>\override TextSpanner.bound-details.left.text = \markup { \upright #leftmarkup \
}<br>\override TextSpanner.bound-details.right.text = \markup { \upright #rightmarkup \
}<br>\override TextSpanner.bound-details.left-broken.text = ##f<br>\override \
TextSpanner.bound-details.right-broken.text = ##f<br>\override TextSpanner.style = \
#style<br>\override TextSpanner.bound-details.right.arrow = ##f<br>\override \
TextSpanner.bound-details.left.arrow = ##f<br>                             \
#})</span></div><div class="gmail_default"><span \
style="font-family:monospace"><br></span></div><div class="gmail_default"><span \
style="font-family:monospace">textSpanArrow = #(define-music-function<br>             \
(parser location leftmarkup style rightmarkup)<br>                             \
(markup? symbol? markup?)<br>                             #{<br>\override \
TextSpanner.style = #style<br>\override \
TextSpanner.bound-details.right.stencil-align-dir-y = #CENTER<br>\override \
TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER<br>\override \
TextSpanner.bound-details.right.arrow = ##t<br>\override \
TextSpanner.bound-details.left.text = \markup { \upright #leftmarkup }<br>\override \
TextSpanner.bound-details.right.text = \markup { \upright #rightmarkup }<br>\override \
TextSpanner.bound-details.left-broken.text = ##f<br>\override \
TextSpanner.bound-details.right-broken.text = ##f<br>\override \
TextSpanner.dash-period = 1.0<br>                             \
#})<br><br>textSpanDoubleArrow = #(define-music-function<br>                          \
(parser location leftmarkup style rightmarkup)<br>                             \
(markup? symbol? markup?)<br>                             #{<br>\override \
TextSpanner.style = #style<br>\override \
TextSpanner.bound-details.right.stencil-align-dir-y = #CENTER<br>\override \
TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER<br>\override \
TextSpanner.bound-details.right.arrow = ##t<br>\override \
TextSpanner.bound-details.left.arrow = ##t<br>\override \
TextSpanner.bound-details.left.text = \markup { \upright #leftmarkup }<br>\override \
TextSpanner.bound-details.right.text = \markup { \upright #rightmarkup }<br>\override \
TextSpanner.bound-details.left-broken.text = ##f<br>\override \
TextSpanner.bound-details.right-broken.text = ##f<br>\override \
TextSpanner.dash-period = 1.0<br>                             \
#})<br></span></div><div class="gmail_default"><span \
style="font-family:monospace"><br></span></div><div class="gmail_default"><span \
style="font-family:monospace">%EXAMPLE<br></span></div><div \
class="gmail_default"><span style="font-family:monospace"><br></span></div><div \
class="gmail_default"><span style="font-family:monospace">\relative c&#39; {<br>   \
\textSpan \markup { \bold &quot;press.&quot; } #&#39;trill \markup { \italic \
\center-align &quot;norm.&quot; }<br>   c1\startTextSpan<br>   c1<br>   \
c1\stopTextSpan<br>   \textSpanArrow &quot;m. vib.&quot; #&#39;dashed-line \markup { \
\center-align &quot;senza vib.&quot;}<br>   \break<br>   c1\startTextSpan<br>   \
c1<br>   c1\stopTextSpan<br>   \break<br>   \textSpanDoubleArrow \markup { \box \
&quot;sul pont.&quot;} #&#39;line &quot;sul tasto&quot;<br>   c1\startTextSpan<br>   \
c1<br>   c1<br>   c1\stopTextSpan<br>   \textSpan \markup {\italic &quot;air&quot;} \
#&#39;zigzag &quot; &quot;<br>   c1\startTextSpan<br>   c4 \
c2.\stopTextSpan<br>}</span></div><div class="gmail_default"><span \
style="font-family:monospace"><br></span></div><div \
class="gmail_default"><div><div><div><img src="cid:ii_kfi0jkg72" alt="image.png" \
width="547" height="159"><br><br></div>Cheers,</div><div>Martín.<br></div><div><br></div><br><br></div><span \
style="font-family:monospace"></span></div></div><br><div class="gmail_quote"><div \
dir="ltr" class="gmail_attr">Am So., 20. Sept. 2020 um 18:57  Uhr schrieb Thomas \
Morley &lt;<a href="mailto:thomasmorley65@gmail.com">thomasmorley65@gmail.com</a>&gt;:<br></div><blockquote \
class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid \
rgb(204,204,204);padding-left:1ex">Am So., 20. Sept. 2020 um 17:30 Uhr schrieb Xavier \
Scheuer<br> &lt;<a href="mailto:x.scheuer@gmail.com" \
target="_blank">x.scheuer@gmail.com</a>&gt;:<br> &gt;<br>
&gt; On Sun, 20 Sep 2020 at 13:03, Thomas Morley &lt;<a \
href="mailto:thomasmorley65@gmail.com" \
target="_blank">thomasmorley65@gmail.com</a>&gt; wrote:<br> &gt; &gt;<br>
&gt; &gt; Hi Martin,<br>
&gt; &gt;<br>
&gt; &gt; in general I&#39;m more with Aaron.<br>
&gt; &gt; P.e., I have no clue which default text one could think of for<br>
&gt; &gt; TextSpanner&#39;s left/right-text!?<br>
&gt; &gt; Otoh, I&#39;d wish we&#39;d have a LilyPond-data-structure to assign a list \
of<br> &gt; &gt; key/value pairs in ly-syntax to a variable. Right now we can do so \
at<br> &gt; &gt; top-level, in layout, paper and \with.<br>
&gt; &gt;<br>
&gt; &gt; That said, find attached a TempoSpanner-coding.<br>
&gt; &gt; I&#39;m not sure it&#39;s the best approach at all. For sure there&#39;s \
wide room<br> &gt; &gt; for improvements.<br>
&gt; &gt; Probably the best one could say: it&#39;s a proof of concept.<br>
&gt;<br>
&gt; Hi,<br>
&gt;<br>
&gt; Great! Could you add this to issue 3176 (a proof of concept is not yet a proper \
solution, but is anyway better than nothing, especially for a 7 years old issue)?<br> \
&gt; <a href="https://gitlab.com/lilypond/lilypond/-/issues/3176" rel="noreferrer" \
target="_blank">https://gitlab.com/lilypond/lilypond/-/issues/3176</a><br> &gt;<br>
&gt; Thank you!<br>
&gt;<br>
&gt; Cheers,<br>
&gt; Xavier<br>
&gt;<br>
&gt; --<br>
&gt; Xavier Scheuer &lt;<a href="mailto:x.scheuer@gmail.com" \
target="_blank">x.scheuer@gmail.com</a>&gt;<br> &gt;<br>
<br>
Done, with a slightly improved and commented code:<br>
<a href="https://gitlab.com/lilypond/lilypond/-/issues/3176#note_415526421" \
rel="noreferrer" target="_blank">https://gitlab.com/lilypond/lilypond/-/issues/3176#note_415526421</a><br>
 <br>
Cheers,<br>
   Harm<br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" \
class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><span><a \
href="http://www.martinrinconbotero.com" \
target="_blank">www.martinrinconbotero.com</a></span><br></div></div></div></div></div>



["image.png" (image/png)]

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic