Hi Maurits,
Am 22.02.2018 um 07:44 schrieb Maurits Lamers:
Hi,
Thanks for your suggestion! Do I understand from your reply that you
don't think there is a dynamic option, ie without adjusting the
lilypond code being processed?
To clarify the context a bit: what I am doing is reviewing homework by
students. This means that I am running my reviewer script (lilypond
file with embedded guile with event listeners) as a side-load script
through the -dinclude-settings option on the lilypond code files they
provided.
It is of course possible to preprocess the input files by appending
such a scheme call (automatically). If I can have a dynamic option
(such as listening to an event), I would rather like to have that
option as it reduces the amount of things that can go wrong during
processing.
I don't fully see how you're doing things, but would it be possible that
instead of loading your "review code" through -dinclude-settings you
could compile your own .ly file and *include* your students' code into
that? If so, something along these lines could work:
\version ...
\include "my-review-lib.ily"
\book {
\include "students-file.ly"
}
\writeStatistics
I have a function loadFile that may even let you specify the file to
include through the command line:
% put this in your lib
loadFile =
#(define-void-function (target)(string?)
(if (file-exists? target)
(begin
(let ((parser (ly:parser-clone)))
(ly:parser-parse-string parser "\\language \"nederlands\"")
(ly:parser-parse-string parser
(format "\\include \"~a\""
target)))
(format #t "File ~q successfully loaded" target))
(format #t "File ~a not found" target)))
\book {
\loadFile #(ly:get-option 'filename)
}
Note that this doesn't respect the include path.
BTW this use-case sounds pretty interesting, it might be nice to share
your thoughts about this when you got it to work.
HTH
Urs
cheers
Maurits
Hi Maurits,
Am 21.02.2018 um 20:52 schrieb Maurits Lamers:
Hi all,
I would like to execute some (embedded scheme) code at the end of an
input file, that is after the last score block.
My current problem is that I am parsing score blocks, but some of
the input is given as a single score block and the content in other
files is put in many score blocks.
During my processing of this content I gather some statistics, and I
would like to write them out to a file at the end of the file. In
the current solution, I am running the export at the end of the
finalize event on a score block, which of course causes the writing
of the data to happen at the end of the parsing of every score block.
What would be the best way to only write out the statistics at the
end of the file?
Can you somehow create an explicit \book{ } block?
Code after a book block will be executed after the PDF has been
completely written, i.e. really after the score has been processed
completely. But if you don't write that explicit \book block LilyPond
will automatically wrap the whole document in one.
\version "2.19.80"
\book {
\score {
\new Staff { c' }
}
}
#(ly:message "I'm executed after compilation")
You'll see from the log that the message is printed only after the
PDF file has been finished.
HTH
Urs
Thanks in advance!
Maurits
_______________________________________________
lilypond-user mailing list
[email protected] <mailto:[email protected]>
https://lists.gnu.org/mailman/listinfo/lilypond-user
_______________________________________________
lilypond-user mailing list
[email protected] <mailto:[email protected]>
https://lists.gnu.org/mailman/listinfo/lilypond-user
_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user