lilypond-user
[Top][All Lists]
Advanced

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

FW: [frogs] Re: Patching the output file naming code (Was: thanks to who


From: Carl D. Sorensen
Subject: FW: [frogs] Re: Patching the output file naming code (Was: thanks to whomever put this in the LSR...)
Date: Sun, 21 Jun 2009 12:20:21 -0600

I've forwarded Ian's message from the Frogs mailing list, because I don't
know how to answer his question.  I'm sure somebody on -devel will.

Thanks,

Carl


------ Forwarded Message
From: Ian Hulin <address@hidden>
Reply-To: <address@hidden>
Date: Sat, 20 Jun 2009 17:25:42 -0600
To: Reinhold Kainhofer <address@hidden>, <address@hidden>
Conversation: [frogs] Re: Patching the output file naming code (Was: thanks
to whomever  put this in the LSR...)
Subject: [frogs] Re: Patching the output file naming code (Was: thanks to
whomever  put this in the LSR...)

Hi Reinhold,

I've now started doing some work on this, and the big disadvantage with the
current use of #(define output-suffix "whatever") et al. is that they affect
all the files in all \score or \bookpart sections.  What I would like to do
is pick up a value of the property from something like a \paper block within
the current \score or \bookpart.  Is \paper the right place to put
properties relating to output filenames, or should it be property of \score
itself?

Either 

\bookpart {

    \header {
        blah...
        }
    \score \with {output-suffix="Allegro"}{
        blah...
    }
}

Or 

\bookpart {
    \header {
       blah...
    }
    \score {
        \paper {
               output-suffix= "Allegro}
               }
       blah...
    }
}

Now how do I pick up a property value from a specific currently active
lilypond block in Scheme?  I can pick up the results of #(define
output-suffix "Allegro") by calling ly:parser-lookup.  What do I use for
lily property?  Below is my latest attempt


(define (get-outfile-name parser base )
 (let*
      ((output-suffix (ly:parser-lookup parser 'output-suffix))
       (counter-alist (ly:parser-lookup parser 'counter-alist))
       (alist-key '())
       (result '())
       (output-count (assoc-ref counter-alist output-suffix)) )
    (if (string? output-suffix)
    (set! alist-key (format "~a-~a" base (string-regexp-substitute
                       "[^a-zA-Z0-9-]" "_" output-suffix)))
    (set! alist-key base))
      (set! result alist-key)
    ;; must be careful: output-count is under user control.
    (if (not (integer? output-count))
    (set! output-count 0))

    (if (> output-count 0)
    (set! result (format #f "~a-~a" alist-key output-count)))
    (ly:parser-define!
        parser 'counter-alist (assoc-set! counter-alist alist-key (1+
output-count)))    
    result)
 )

(define (print-book-with parser book process-procedure)
  (let*
      ((paper (ly:parser-lookup parser '$defaultpaper))
       (layout (ly:parser-lookup parser '$defaultlayout))
       (base (ly:parser-output-name parser))
       (outfile-name (get-outfile-name parser base)) )
      
    (process-procedure book paper layout outfile-name)
    ))


Cheers,
Ian






}

Reinhold Kainhofer wrote:
>  
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Am Dienstag, 9. Juni 2009 23:29:34 schrieb Ian Hulin:
>   
>  
>>  
>> Hi Reinhold,
>> I'm having a look at seeing if I can pick up the work Marek Klein did on
>> -devel.  It covered amending the coded generating output file suffixes
>> to allow users to code user-specified names as the suffix.  It changes
>> the function print-with-book in file lily-library.scm so one of the
>> internal variables uses a Scheme alist.
>> 
>> How much more work would it be to implement Patrick's suggestion below?
>>     
>>  
>  
> 
> Almost none, see below for a consistent proposal.
> 
>   
>  
>>  
>> But it would be nice to have an option to override the file-name for
>> any arbitrary book.  Something like
>> 
>> \book {
>>    \paper {
>>      output-file-name = "Blah"
>>    }
>>    \score {
>>      ...
>>    }
>> }
>> .
>> .
>> .
>> 
>> As I understand it, the above would allow allow you to have a file
>> called something like "mozsym40.ly" and use
>> \paper {
>> output-file-name="SinfoniaK550"
>> }
>> to generated SinfoniaK550.pdf, .png, .mid, .midi or whatever.
>>     
>>  
>  
> 
> That would not be hard to implement (if you look at the print-with-book code,
> you'll see that currently the file name is concatenated from base and suffix.
> You'd have to add another check and not use the base name for this). However,
> it will be a little harder to make this system consistent and easy to use.
> 
> Currently, we have:
>     basename-suffix(-nr)
> where the number will become optional with the patch.
> 
> Of course, one can add another layout variable 'output-basename, which will be
> used instead of the basename (so the suffix will still be used), however, in
> this case the numbering within suffixes will not be ideal. You can then get:
> 
> mybase1-suffix
> mybase1-suffix-2
> mybase2-othersuffix
> mybase2-suffix-3
> 
> I.e. the numbering will be only within each suffix, even if it is for a
> different 
> basename...
> 
> The alternative is to use the basename-suffix combination as the key in the
> alist to look up the naming. This would probably be the ideal way.
> 
> So, if you really want to generalize the naming even further, I would propose:
> - -) A layout variable 'output-basename (default: the input file name, like
> now)
> - -) A layout varialbe 'output-suffix (default: empty)
> - -) The naming will then be: basename-suffix[-nr] (or basename[-nr] if no
> suffix is 
> set), where the numbering is done like in the almost-finished patch, only that
> the key will not only be the suffix, but the complete "basename-suffix" string
> (or 
> if no suffix is set, then "basename" will be the key).
> 
> This way, the user has complete control over the output file naming, while the
> behavior without explicit settings stays the same as it is now.
> 
> Oh, and it might be a good idea to move the code to determine the file name
> out 
> of print-with-book and into a separate function, which is called from the let
> block in print-with-book.
> 
> Cheers,
> Reinhold
> 
> - -- 
> - ------------------------------------------------------------------
> Reinhold Kainhofer, address@hidden, http://reinhold.kainhofer.com/
>  * Financial & Actuarial Math., Vienna Univ. of Technology, Austria
>  * http://www.fam.tuwien.ac.at/, DVR: 0005886
>  * LilyPond, Music typesetting, http://www.lilypond.org
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
> 
> iD8DBQFKL+qZTqjEwhXvPN0RAgltAKDCcUb63j8uH9EWVIIW0AT9qAb27ACfUAv1
> WTVtj9dSe0MHV6VJR8JrJRk=
> =yugo
> -----END PGP SIGNATURE-----
> 
> ______________________________________________
> This email has been scanned by Netintelligence
> http://www.netintelligence.com/email
> 
> 
>   


------ End of Forwarded Message





reply via email to

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