lilypond-user
[Top][All Lists]
Advanced

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

Re: input code


From: Freeman Gilmore
Subject: Re: input code
Date: Fri, 13 Dec 2019 02:28:48 -0500



On Thu, Dec 12, 2019 at 10:20 PM Aaron Hill <address@hidden> 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

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