[frogs] Re: Naming output files

[ Thread Index | Date Index | More lilynet.net/frogs Archives ]


Sorry, it is not working correctly yet (it does not count)....

2009/2/26 Marek Klein <marek@xxxxxxxxxxxxx>
2009/2/26 Reinhold Kainhofer <reinhold@xxxxxxxxxxxxx>


It would actually be quite simple to implement: In scm/lily-library.scm in the
print- book-with function, instead of storing the file count as a number in
'output-count, store it in an alist (which is set as the 'output-count parser
variable), with the suffix as key. This way, the counting is per suffix and
we'll automatically not append the number for the first file with a given
suffix...

I think this would be quite a nice task or a frog, so I'm not coding it
myself, just giving a few pointers... The way to work with the alist (that's
Scheme's idea of a Hash) can be seen e.g. in my counter snippet on LSR:
http://lsr.dsi.unimi.it/LSR/Item?id=543

All you need to do is to use assoc-ref instead of count and ly:parser-define!
(instead of the set! in the counter example) with assoc-set! to set one entry
of the hash / alist. The key for the alist would be the suffix. The rest of
the function doesn't even need to be changed...

Here is my solution:

(define counter-alist '())

(define (print-book-with parser book process-procedure)
  (let*
      ((paper (ly:parser-lookup parser '$defaultpaper))
       (layout (ly:parser-lookup parser '$defaultlayout))
       (output-count (assoc-ref counter-alist 'output-suffix))
       (base (ly:parser-output-name parser))
       (output-suffix (ly:parser-lookup parser 'output-suffix)) )
     
    (if (string? output-suffix)
    (set! base (format "~a-~a" base (string-regexp-substitute
                       "[^a-zA-Z0-9-]" "_" output-suffix))))

    ;; must be careful: output-count is under user control.
    (if (not (integer? output-count))
    (set! output-count 0))

    (if (> output-count 0)
    (set! base (format #f "~a-~a" base output-count)))
    (set! counter-alist (assoc-set! counter-alist output-suffix (1+ output-count)))
    (process-procedure book paper layout base)
    ))

I didn't use ly:parser-define! instead of the set! (I couldn't make it to work).
The output-count variable is no more under user control this way.

Please do comment.

--
Marek Klein
http://gregoriana.sk



--
Marek Klein
http://gregoriana.sk


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/