David Kastrup [Thu, 25 Jun 2015 11:04:50 +0000 (13:04 +0200)]
Issue 4462/1: Create a module variable access system for C++
This replaces the previous "memoizing" ly_lily_module_constant with a
rather rigid system for importing/exporting/accessing module variables.
As opposed to the system used by ly_lily_module_constant, access will
continue to go through the respective module variables, making it
possible to also write to the respective variables. In addition, this
ensures that any changes to the variables from the Scheme side will get
properly reflected in the C++ side, allowing for redefinitions when
debugging.
In a nutshell, ly_lily_module_constant ("ly:music?") would generally be
replaced with Lily::ly_music_p, a declaration of it looking like
extern Variable ly_music_p;
would be placed in namespace Lily in lily/include/lily-imports.hh, and a
corresponding definition
Variable ly_music_p ("ly:music?");
in namespace Lily in lily/lily-imports.cc . The type Scm_module where
variables are organized can use pre-existing modules (in which case it
is initialized by calling the member function import ()) or are can
bring up a fresh module (in which case it is initialized by calling the
member function boot ()). The startup is done in lily/guile-init.cc .
Since one of the most frequent uses of imported variables is for
function calls, the Scm_variable type (underlying the module-local
Variable type) has operator () defined to allow calling as a function.
David Kastrup [Fri, 26 Jun 2015 10:20:01 +0000 (12:20 +0200)]
Issue 4463: Fix regression with -ddebug-parser
Running
lilypond -ddebug-parser scheme-sandbox
led to the error message
scm/lily.scm:1056:21: In procedure value->lily-string in expression (ly:parse-file file-name):
scm/lily.scm:1056:21: Wrong number of arguments to #<procedure value->lily-string (arg)>
This was an obvious oversight in the implementation of issue 4442.
Paul Morris [Wed, 10 Jun 2015 04:16:16 +0000 (00:16 -0400)]
Issue 4418/2 add and use new whiteout function
scm/stencil.scm: redefine the whiteout function
so that it approximates the stencil's outline by
creating multiple displaced copies of the stencil.
Rename the previous whiteout function 'whiteout-box'.
scm/define-grob-properties.scm: define two
properties to go with the two whiteout functions.
lily/grob.cc: use the new whiteout functions and
properties.
scm/define-markup-commands.scm: define markup
commands to go with the two whiteout functions.
David Kastrup [Fri, 12 Jun 2015 07:51:40 +0000 (09:51 +0200)]
Issue 4443: Don't pass current parser/location into #{...#} call
The construct #{...#} generates a call to a function embedded-lilypond.
After issue 4422, this call passed (*parser*)/(*location*) arguments
instead of the previous parser/location arguments needed for accessing
the respective values in a different lexical environment. But since the
respective values are stored in GUILE fluids rather than in lexical
variables now, they are already passed implicitly and unnecessary as
function parameters.
David Kastrup [Fri, 12 Jun 2015 11:41:11 +0000 (13:41 +0200)]
Issue 4442/7: Stop maintaining "parser" variable
When invoking a parser, the global "parser" variable was temporarily
pointing to the parser. This mechanism was somewhat awkward and with
problems of its own. Since an active parser maintains the %parser fluid
now, we can forego maintaining the "parser" variable altogether.
Trevor Daniels [Sat, 6 Jun 2015 21:22:13 +0000 (22:22 +0100)]
Issue 4435: Remove Solo staff when empty
The recently added Solo staff is outside the ChoirStaff and so
is not affected by the ChoirStaff overrides to VerticalAxisGroup.
This patch moves the overrides into a \layout block at top level
so all staves are affected. The overrides in PianoStaff are then
no longer required. Note that this \layout block can itself be
overridden by setting the Layout variable.
David Kastrup [Sat, 30 May 2015 08:58:22 +0000 (10:58 +0200)]
Issue 4425: Fix some CG musing about music functions
While the example code has been adapted to reflect the state of music
functions after acceptance of issue 4422 and issue 4421, the answer that
has now been replaced has been wrong from its inception.
David Kastrup [Sun, 24 May 2015 17:38:34 +0000 (19:38 +0200)]
Issue 4421/4: Make music functions callable from Scheme
The functions get their signature checked and optional argument handling
is exactly like in LilyPond, with *unspecified* taking the role of
"\default".
Dan Eble [Thu, 28 May 2015 00:39:47 +0000 (20:39 -0400)]
Issue 4423: eliminate part combiner's array of context handles (2/4)
Create child iterators in parent context. Add an initial split state
to ensure that the first split-list entry, whatever it is, will
redirect the outlets for the child iterators.