On Wed, 2013-05-22 at 22:29 +0200, Andreas Schneider wrote: > Thank you for all the information and the correction of my script. I'm > currently doing some reading about scheme. > > What I want to do in my script is to put markup right after a movement > (before the next movement starts), i.e. in the generated lilypond code > directly *after* the line > } %End of Movement > of the movement the script is attached to. (As you already pointed out, > at the moment the markup is put before the closing } of the movement, > which is not valid lilypond.) How can I do that? I'll look into it - I know there is something for putting text before a movement (page break goes there I think), also there is something for putting stuff at the end (the critical commentary goes there) but after each movement may need DENEMO_ALT_OVERRIDE, and may need it being made active.
> > I'm also wondering why the creation of a button in the movement titles > button bar does not work, although I followed the instructions in your > mail from April 1st (or so I think). I had one appear with your script - do you have them visible (the movement titles bar that is)? Richard > > Andreas > > > Am 22.05.2013 11:05, schrieb Richard Shann: > > Denemo's script language is a superset of scheme, that is, it is scheme > > plus a bunch of procedures such as d-DirectiveGet-movementcontrol-prefix > > and so on. > > So when I referred to (let xxx () syntax, I just mean the scheme syntax > > for the "let" procedure. > > Scheme is well documented, with the official reference here: > > > > http://www.gnu.org/software/guile/manual/html_node/index.html > > > > Named "let" is documented at > > http://www.gnu.org/software/guile/manual/html_node/while-do.html#while-do > > > > while the way "let" makes variables local to the let is documented at > > http://www.gnu.org/software/guile/manual/html_node/Local-Bindings.html#Local-Bindings > > > > > > Guile is the interpreter for scheme, and Denemo provides a CLI at the > > top of the scheme window. > > So if you want to check if a procedure name is correct you can type it > > in there and hit return and the output (in the console) will tell you > > what it is. > > > > But, yes we could do with documentation on the Denemo procedures: there > > is ancient documentation on the Denemo directive fields in the manual, > > but things have moved on since then, and there are various easier-to-use > > procedures, for which I have to look in an existing script and/or look > > in the sources $PREFIX/actions/denemo-modules/*.scm to see if what I > > want is already defined (Nils wrote most of this stuff I think). > > > > In your code I have changed the ((let to (set!, dropped the (disp ...) > > calls and balanced the closing parentheses and I get this: > > > > ;;;MarkupAtEnd > > (let ((tag "MarkupAtEnd")(themarkup #f)) > > (d-DirectivePut-movementcontrol-override tag > > DENEMO_OVERRIDE_GRAPHIC) > > (d-DirectivePut-movementcontrol-display tag "MarkupAtEnd") > > (disp "checking previous markup ...") > > (if (d-Directive-movementcontrol? tag) > > (set! themarkup (d-DirectiveGet-movementcontrol-postfix > > tag)) > > > > (set! themarkup ("")) > > > > ) > > (set! themarkup (d-GetUserInput (_ "MarkupAtEnd") (_ "Edit markup:") > > themarkup)) > > (disp themarkup) > > (d-DirectivePut-movementcontrol-postfix tag themarkup) > > (d-DirectivePut-movementcontrol-override tag DENEMO_OVERRIDE_AFFIX) > > (d-SetSaved #f) > > > > > > which does execute. The (disp xxx) procedures can't just be added in to > > the (if xxx yyy) because "if" takes one or two arguments, so just > > putting in extra (disp zzz) gives too many arguments. > > Instead you need this > > > > > > (if a > > (begin > > (something for the if case) > > (disp "a is true")) > > (begin > > (something for the else case) > > (disp "a is #f))) > > > > where the "if" has two arguments (begin ...) and (begin ...) > > The "begin" procedure just groups expressions together to make a single > > expression, so that the "if" gets two arguments. > > > > But, as I say, this is scheme syntax, which, while there is not a lot of > > it, does need reading up first. > > > > I hope you didn't feel I was being critical of your effort - I'm pleased > > to see you giving a try at writing a script. > > > > Your script is placing markup at the end of the \score { ......} block > > before the closing }, which I don't think is allowed LilyPond syntax. > > To get the movementcontrol directive to put the postfix in the right > > place may require some adjustment to the override field. If you let me > > know what output LilyPond you are trying for I'm sure it can be done... > > > > HTH > > > > Richard _______________________________________________ Denemo-devel mailing list [email protected] https://lists.gnu.org/mailman/listinfo/denemo-devel
