Re: [frogs] Enhancement request: Define output-suffix as a configurable context property. |
[ Thread Index | Date Index | More lilynet.net/frogs Archives ]
Hi Carl, That will work, but it's still a work-around. We'd be avoiding setting it as a context property to keep the architectural thinking clean, while at the same time duplicating the functionality of a property by hand. What we're in effect doing here is duplicating the behaviour of a property, we're hiding the parser variable and writing a function to write to it. So why not pvSet = #(define-music-function (parser layout parser-variable new-value) (variable? string?) (set! parser-variable new-value) (make-music 'SequentialMusic 'void #t)) then do \book { \pvset output-suffix "gibbon-vole-aardvark" {... \score blocks and things ...} }But I'm still bothered we may be re-inventing the wheel here. We've got properties in lily already, and defined ways of setting them (\set, \override and even assigning them in the relevant block). Could we not add a new define-parser-variable-properties.scm with (define-public all-pv-properties '()) (define (pv-property-description symbol type? description) (if (not (and (symbol? symbol) (procedure? type?) (string? description))) (throw 'init-format-error)) (if (not (equal? #f (object-property symbol 'translation-doc))) (ly:error (_ "symbol ~S redefined" symbol))) (set-object-property! symbol 'translation-type? type?) (set-object-property! symbol 'translation-doc description) (set! all-pv-properties (cons symbol all-translation-properties)) symbol) (define-public all-pv-properties (map (lambda (x) (apply pv-property-description x)) `( (output-suffix ,string? "Text to append to the output filename for the current @code{\\book} block") ;;; Maybe add all the other supported parser variables here? ))) The above should work as I've adapted it unashamedly from define-context-properties.scm Remaining things to do would be
Opinions? Cheers, Ian Carl Sorensen wrote: On 9/19/09 7:27 AM, "Ian Hulin" <ian@xxxxxxxxxxxx> wrote:Hi Carl, Neil, I'm quite happy to re-think the proposal if what I have in mind contravenes existing design architecture. Put it down to relative inexperience and the fact I don't get opportunity to work on lilly as often as I'd like. Anyhow, here are some of the reasons why I'd like to do something with this stuff: * Using parser variables to configure things is evil, because it requires users to drop into Scheme to set the parser variable. I feel we need to replace #(define output-suffix "gibbon-vole-aardvark") with something handled at the lilypond language level. * * At the moment, output-suffix is de facto a property of a \book block.� There is a design assumption (informal club rule) in lilypond� that we only produce one back-end output file (.pdf, .png whatever) per \book block. * However, there is as great big exception to this in the form of midi files, one of which one is output for every \score block with a \midi present. At the moment the file name generation code kludges its way around this but it not very clean, unclear and all this stuff is barely documented. * So what I'd like to do is to have some way of replacing the Scheme definition either - * \book { * ��� \set output-suffix "gibbon-vole-aardvark" * ��� {... \score blocks and things} * } * , or * \book \with {output-suffix = "gibbon-vole-aardvark"} * { * �� {... \score blocks and things} * }.Could one define a void music function setOutputSuffix = #(define-music-function (parser layout new-output-suffix) (string?) (define output-suffix new-output-suffix) (make-music 'SequentialMusic 'void #t)) then do \book { \setOutputSuffix "gibbon-vole-aardvark" {... \score blocks and things ...} } I haven't tried it, but I think it may work. Carl --- ---- Join the Frogs! ______________________________________________ This email has been scanned by Netintelligence http://www.netintelligence.com/email |
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |