Re: Generate pdf from scheme function

2013-03-18 Thread Alexandre Araujo Moreira
Thanks for everything, guys. I just tested what David said on 2.17 and it
worked for the case I described here. Problem is, when I try to add a
\header block inside it I start getting errors again. Considering how many
problems I've faced so far regarding this, I feel I'm trying to push the
scheme-functions in a direction they're not intended to go, is that correct?

So far I managed to achieve the overall results I want \include-ing a
couple files (one above the information I want to supply setting default
values for some global variables, the melody and other variables set in the
main file, then another included file below it all containing the structure
I wanted my macro to generate. It's not the best result but it's a good
trade-off so far.

Am I missing another, better, way to do it programmatically? Or are
scheme-functions actually intended to do what I'm failing to do and I'm
just using them wrong?




On Mon, Mar 18, 2013 at 5:07 AM, David Kastrup d...@gnu.org wrote:

 Alexandre Araujo Moreira alexandr...@gmail.com writes:

   Alexandre Araujo Moreira alexandr...@gmail.com writes:
 
   \version 2.16.2
   simpleMusic =
   #(define-scheme-function (parser location melody) (ly:music?)
   #{
   \score {
   $melody
   \layout {}
   }
   #})
   \simpleMusic { c1 }
  
   Is there anyway I can write something similar to simpleMusic (in
   usage), where it'll automatically generate the pdf given the
 notes?
 
  \version 2.16.2
  simpleMusic =
  #(define-scheme-function (parser location melody) (ly:music?)
  #{
  \score {
  $melody
  \layout {}
  }
  #})
 
  \score { \simpleMusic { c1 } }
 
  Probably more verbose than you care for, but at least you can get
  midi and layout blocks in which is more than you can do using a
  music function.
 
 
  David, I tried what you said above (and some variations, as having a
  score around another score seemed odd)

 It is not a score around another score in LilyPond-think, but rather a
 score syntactically introduced with \score and then being constructed
 inside by referring to a score variable.  Things work similarly with
 \book and \bookpart variables.

  and I only managed to get syntax errors.

 This is probably my fault: I don't have 2.16 installed but did not
 change the version header to reflect this in my posting.  The above code
 works fine in current 2.17.  I did not remember that the changes were
 not already in 2.16.

  My original idea was based on believing a scheme-function in
  Lilypond was more-or-less like a macro in Scheme. Now I think I was
  wrong about that.

 No, you are quite correct, particularly regarding the more-or-less
 part.  Working on the more part is ongoing work, however.

  Is there any facility in Lilypond that would allow me to write
  something like
 
  \myMacro arg1 arg2 and have lilypond behave as if I had wrote the
  expansion of myMacro over arguments arg1 and arg2? If there is such a
  thing I can work out a way in which it could behave the way I want.
  Especially if I have anything like guile's syntax-case at my
  disposal.

 The problem is not as much defining such functions but rather to get
 them accepted everywhere where you would expect.  This is a gradual
 process.  I had some attempts to turn this into an all-or-nothing
 feature where you could use Scheme functions wherever a variable was
 possible.  It turns out that this is quite tricky: variables in the
 syntax generally know their type, and Scheme functions know their type
 only after being called which requires their argument list to be parsed
 (and evaluated) first.

 The parser generally uses one token of lookahead to make its
 decisions, and whenever the syntax depends on the type of a variable,
 the lookahead required for finding the end of a Scheme function's
 argument list call interferes with the not-yet made decision about the
 expression's type.

 It is the goal to eventually get rid of all these fine distinctions and
 limitations, and 2.17 is a solid step forward from 2.16 in that regard.

 --
 David Kastrup


 ___
 lilypond-user mailing list
 lilypond-user@gnu.org
 https://lists.gnu.org/mailman/listinfo/lilypond-user




-- 
Bad programming is easy. Idiots can learn it in 21 days, even if they are
dummies.
- As seen in 'How to Design Programs'
___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Generate pdf from scheme function

2013-03-17 Thread Alexandre Araujo Moreira
Hello, everyone.

I've been playing with lilypond to write simple, one-instrument, scores for
learning for a few weeks now, and figured I could automate some of the
tedious layout configuration I apply to all my scores with a simple scheme
function. Unfortunately things aren't going very well. Let me describe my
problem.

I wrote a scheme function with (define-scheme-function), with the following
code:

\version 2.16.2
simpleMusic =
#(define-scheme-function (parser location melody) (ly:music?)
   #{
\score {
  $melody
  \layout {}
}
  #})
\simpleMusic { c1 }

Is there anyway I can write something similar to simpleMusic (in usage),
where it'll automatically generate the pdf given the notes? Later I plan to
add other outputs (controlled by cmdline parameters), so having this kind
of usage would be very helpful.

My idea is to extend the parameters later (add title, composer, or anything
else that is interesting to me) and apply a few transformations to the
melody parameter (for example, unfold repeats while generating midi).

The problem is, I thought what I wrote above would be enough to have it
generate the outputs declared inside the function (in this case, the
\layout), but it seems it doesn't work that way.

Thanks,
Alexandre Araujo Moreira.
___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: Generate pdf from scheme function

2013-03-17 Thread Alexandre Araujo Moreira
On Sun, Mar 17, 2013 at 10:01 PM, David Kastrup d...@gnu.org wrote:

 Alexandre Araujo Moreira alexandr...@gmail.com writes:

  \version 2.16.2
  simpleMusic =
  #(define-scheme-function (parser location melody) (ly:music?)
  #{
  \score {
  $melody
  \layout {}
  }
  #})
  \simpleMusic { c1 }
 
  Is there anyway I can write something similar to simpleMusic (in
  usage), where it'll automatically generate the pdf given the notes?

 \version 2.16.2
 simpleMusic =
 #(define-scheme-function (parser location melody) (ly:music?)
 #{
 \score {
 $melody
 \layout {}
 }
 #})
 \score { \simpleMusic { c1 } }

 Probably more verbose than you care for, but at least you can get midi
 and layout blocks in which is more than you can do using a music
 function.


David, I tried what you said above (and some variations, as having a score
around another score seemed odd) and I only managed to get syntax errors.

My original idea was based on believing a scheme-function in Lilypond was
more-or-less like a macro in Scheme. Now I think I was wrong about that. Is
there any facility in Lilypond that would allow me to write something like

\myMacro arg1 arg2 and have lilypond behave as if I had wrote the expansion
of myMacro over arguments arg1 and arg2? If there is such a thing I can
work out a way in which it could behave the way I want. Especially if I
have anything like guile's syntax-case at my disposal.


 --
 David Kastrup


 ___
 lilypond-user mailing list
 lilypond-user@gnu.org
 https://lists.gnu.org/mailman/listinfo/lilypond-user

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user