lilypond-user
[Top][All Lists]
Advanced

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

Re: Is there an equivalent of #define ... #ifndef ... #endif in lilypond


From: lilypond
Subject: Re: Is there an equivalent of #define ... #ifndef ... #endif in lilypond?
Date: Sun, 19 Feb 2012 16:19:49 -0800
User-agent: Mutt/1.5.21 (2010-09-15)

On Sun, Feb 19, 2012 at 02:48:05AM -0800, Michael Hendry wrote:
> 
> >> #DEFINE NotYet
> >> ...
> >> #IFNDEF NotYet
> >> \book {
> >>    \bookOutputName "Chez Fernand (alto)"
> >>    \new Score
> >> <<
> >>    \transpose f' d {\TheChords}
> >>    \new Staff
> >>    \repeat unfold 13 {
> >>            s1 \noBreak s1 \noBreak s1 \noBreak s1 \break }
> >>    \transpose f' d {\TheHead}
> >>>>
> >>    \header {piece = "Alto Sax"}
> >> }
> >> #ENDIF
> 
...
> Of course, I know about block comments, and
> if there were only one section I wanted to suppress during the development
> of piece that would be fine. But I have several sections I'd like to switch
> off during data entry, and I'd like to be able to switch them all on again
> with a single edit without having to remember where they are - in much the
> same way as a C programmer will scatter debugging code through a project,
> and switch it off for the final compilation.
> 
> So it would be:
> 
> #define debugging
> 
> ... several pages of code ...
> 
> #ifdef debugging
> ... print something on the screen, and await a user response ...
> #endif
> 
> ... several more pages of code ...
> 
> #ifdef debugging
> ... do something else that's useful in the debugging process ...
> #endif

Please forgive my exercise in total conjecture, as I have not
tested any of the concepts below, but perhaps UNIX's m4 macro
preprocessor can provide the tools you seek without requiring any
changes to LilyPond.

Since that I infer you possess knowledge of the C language's
macro capabilities, would it suit your needs to simply write your
LilyPond source code to conform with m4(1), and then use m4's
macro capabilities to do what you want?  Using a wheel which
has already been invented, as it were.

I'll admit that I'm not intimately familiar with m4, so please
forgive me if you've tried this and found it unworkable.

> I envisage a series of #define statements at the head of the main .ly file
> such as:
> 
> #define concert_part
> #define guitar_part
> #undef alto_part
> #define clarinet_part
> 
> which would alter the output from the included "parts.ly" file.
 
Or, you could set/unset variables from the command line:

m4 -Dconcert_part -Dguitar_part -Ualto_part -Dclarinet_part \
        parts.ly \
| lilypond


Jim




reply via email to

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