On Thu, Dec 12, 2019 at 10:20 PM Aaron Hill <[email protected]>
wrote:

> On 2019-12-12 5:53 pm, Freeman Gilmore wrote:
> > Someday I may write a markup up for some accidentals.   This may help
> > me
> > understand what I am doing with markup.   For how I just want to know a
> > little about how lexer reads the pitch, the octave. accidental and note
> > size; and I may not be able to do that any way.   I know nothing about
> > flex
> > and just learned it existed today.    Also, I would like to see how the
> > markup works around the accidental to place a string in it space.     I
> > read some of *Separating input language and formatter in GNU Lilypond,
> > *and
> > found it interesting.   Looking for more details.
> >
> > I do not need to know all this to learn how to write a markup; just
> > like to
> > understand a little about how it works around the accidental.      But
> > I do
> > need to learn more about scheme and markups.
>
> While it is well beyond the scope of LilyPond itself, I would recommend
> you look for a copy of Principles of Compiler Design [1], the so-called
> "dragon book".
>
> [1]: https://en.wikipedia.org/wiki/Principles_of_Compiler_Design
>
> This book builds from the ground up a fairly complete picture of how
> compilers work.  It is a very technical book, so do not expect to work
> through it quickly.  However if you are truly interested in the
> underlying details of lexical analyzers ("lexers") and parsers, then
> this will be a great resource.
>
> That said, I am uncertain how a better understanding of LilyPond's
> parser would impact matters of accidentals and markup.  To me, it feels
> like you may be digging too deeply here.  While I always support a
> healthy amount of curiosity, it may prove more practical for you to
> focus your attention on higher-level concerns.
>
> When you talk of markup and accidentals, are you interested in
> redesigning the look of an existing accidental or perhaps inventing a
> new one?  To my knowledge, the only intersection with LilyPond's parser
> would involve the naming of notes.  Take a look at
> scm/define-note-names.scm for an example of how the existing languages
> are defined.  This pattern can easily be extended to support other
> alterations.
>

Aaron:

You made some good points.   I do get sidetracked with how thing work.    I
know about the SCM.   And seeing it again did put together some of what I
wanted to know.   I will study your second example; I have tried it.

Thank you,

fg

>
> Of course, that still may be going further than you need to.  If you
> simply need to replace the normal stencil for a specific Accidental, you
> can do the following:
>
> %%%%
> \version "2.18.2"
>
> { \tweak Accidental.horizontal-skylines
>      #ly:grob::horizontal-skylines-from-stencil
>    \tweak Accidental.stencil #ly:text-interface::print
>    \tweak Accidental.text \markup \vcenter \huge \bold "$"
>    fis'1 }
> %%%%
>
> If such a replacement needs to happen on a global scale, then something
> like the following may be useful:
>
> %%%%
> \version "2.18.2"
>
> dollar = \markup \vcenter \huge \bold "$"
>
> \layout { \context { \Voice
>    \override Accidental.before-line-breaking = #(lambda (grob)
>      (if (eqv? (ly:grob-property grob 'alteration) SHARP)
>        (begin (ly:grob-set-property! grob 'horizontal-skylines
>                 ly:grob::horizontal-skylines-from-stencil)
>               (ly:grob-set-property! grob 'text dollar)
>               (ly:grob-set-property! grob 'stencil
>                 ly:text-interface::print))))
> } }
>
> { e'4 fis' bes' gis' | fis'8 gisis' fis'2 r4 }
> %%%%
>
>
> -- Aaron Hill
>
>

Reply via email to