Werner Lemberg [Thu, 20 Nov 2014 13:24:29 +0000 (14:24 +0100)]
Issue 4195: Improve spacing annotations.
Extend `annotate-spacing-spec' to also show the name of the used spacing
property, if possible.
Note that this patch is a Scheme hack only; to further improve the
annotation it would be necessary to make `ly:get-spacing-spec' return the
appropriate spacing property, too (if possible).
Dan Eble [Sat, 1 Nov 2014 01:02:39 +0000 (21:02 -0400)]
Issue 4112: Add internal chord-range option to part combiner
Add a number-pair parameter to make-part-combine-music to replace the
previously hard-coded minimum and maximum intervals that may be
combined into a chord or unison in the shared voice.
There is no user interface for this enhancement because it is not easy
to agree on one, but there is a regression test showing how it might
be used at one's own risk.
David Kastrup [Sat, 18 Oct 2014 11:53:50 +0000 (13:53 +0200)]
Issue 461: LilyPond should accept a tie between notes which are enharmonically identical
This patch connects the respective notes in Tie_engraver and
Tie_performer as a fallback after exhausting regular tie associations.
It also keeps the accidental engraver from applying its special rules
for tied notes that don't have exactly matching pitches.
No attempt is made to adjust the visuals of the ties: they will remain
horizontal, focused on the left note head.
David Nalesnik [Sun, 19 Oct 2014 14:00:15 +0000 (09:00 -0500)]
Improvements to measure counter
This patch adds no new functionality to the measure counter, but
there are improvements to the code.
The stencil callback has been shortened, as there is no need to
search for columns which are already available as the bounds of
broken spanners. It has also been moved to scm/output-lib.scm,
where other such functions are.
The engraver has been streamlined by the removal of an unnecessary
variable and levels of nesting. Comments have been revised.
David Kastrup [Fri, 3 Oct 2014 12:01:29 +0000 (14:01 +0200)]
Issue 3066: tie in TabStaff (using q) displays one of the unisone notes in a chord
This patch basically works by letting a note consume at most one tie
running into it.
It also tries to do a better job at matching potentially corresponding
notes when producing ties by not messing up match order when matching
ties to noteheads.
This patch builds on the number-format function used for
string numbers and enables it for page numbers, through
a new 'page-number-type paper property. Previously,
a custom markup function had to be used as demonstrated
in the bookparts.ly regtest, which has now been rewritten
to make use of the new property.
David Kastrup [Wed, 8 Oct 2014 14:46:52 +0000 (16:46 +0200)]
Issue 4156: Define Smob<> constructors
The purpose of this patch is to stop the previous implicit copying of
Smob<> data members in derived copy constructors.
To that purpose, Smob<> has received a private copy constructor (which
gcc unfortunately only considers worth a warning rather than an error
when implicitly used in a default copy constructor) and an inline
default constructor.
Several classes contained virtual copy constructors without being
actually copyable have had their copy constructor removed.
Several copy constructors just containing a failing assertion were
instead removed and left (privately) declared but not defined. This
standard C++ practice leads to link time rather than run time errors in
case an instance of such a class is copied.
Other smob-defining base classes (Simple_smob and Smob{1,2,3}) do not
actually have non-static data members that could be initialized.
Prohibiting the copying of Simple_smob as a base class seems rather
pointless as all of the data members of a derived class are under the
control of the derived class. However, Smob{1,2,3} "misuse" the this
pointer to contain an SCM value. Creating a copy would change the
associated address, a very undesirable operation. So Smob{1,2,3} have
its constructors private and/or disabled.
James Lowe [Wed, 1 Oct 2014 07:10:53 +0000 (08:10 +0100)]
Doc: Usage 1.2 - Added note about using wildcards
Issue 4147
Added note about being able to use wildcards with
LilyPond in the 'Standard shell commands' section.
Changed some of the text for Windows and MacOS users,
who may not know what a 'shell' is, to reflect each
OS's own nomenclature for their 'Terminal' applicatoin.
This commit adds a number-type property that allows for different
numbering styles, as well as user-exposed predefined commands
to easily switch between default guitar-like string numbers and
roman numerals more suitable for unfretted strings.
Additionally, the number formatting function previously used only
in fret-diagrams is now available for possibly wider use.
This can be passed a token returned from Grob_property_info::push and
will then only revert the matching push or nothing at all. This is used
to limit the fallout from internal property reversions that might not
match the original override because of an intervening property push/pop.
David Kastrup [Sun, 5 Oct 2014 22:31:58 +0000 (00:31 +0200)]
Issue 2010: \lyricsto may turn into a voice-mangling zombie
The problem here was that the simultaneous iterator might keep
rerhythmed lyrics around when the associated voice has died already,
blocking the simultaneous iterator. The solution is that when removing
the last regular iterator to remove all remaining lyric-combined
iterators at the same time.
David Kastrup [Fri, 3 Oct 2014 12:01:29 +0000 (14:01 +0200)]
Issue 3066: tie in TabStaff (using q) displays one of the unisone notes in a chord
This patch just tries to do a better job at matching potentially
corresponding notes when producing ties by not messing up match order as
badly when matching ties to noteheads.
David Kastrup [Sun, 28 Sep 2014 08:58:43 +0000 (10:58 +0200)]
Issue 4138: Make \time work with \tweak and \footnote
The way this is done is to let a TimeSignatureMusic expression expand to
produce a TimeSignatureEvent that can be listened to. The
Time_signature_engraver _does_ listen to this event and uses it to set
the origin for TimeSignature grobs created in the same time step.
Another effect is that any warnings associated with a TimeSignature grob
will be able to point to a source location in case that the respective
change of timing parameters can be traced to TimeSignatureMusic in a
context below the context of the Time_signature_engraver creating the
TimeSignature.
Since events that can be listened to create a Bottom context implicitly,
this causes a difference for cases like
\score { { \time 3/4 \skip 2. r2. } }
Previously, Staff (and Voice) contexts were only created _after_ the
\skip completed (the timing parameters are set in the Timing context,
equal to Score by default), making the time signature appear only in
measure 2. Now the implicit creation of a Staff (and thus a
Time_signature_engraver) in the course of creating a Bottom context (in
this case a Voice) makes the time signature appear right away.
If one uses a separate non-printing context for containing timing info,
one has to make sure that any implicitly created Bottom context is
non-printing as well.
David Kastrup [Thu, 25 Sep 2014 10:43:53 +0000 (12:43 +0200)]
Issue 4130: Isolated durations don't work after \pageBreak
The example
\score {
\new RhythmicStaff {
R1 |
\pageBreak
1~ |
8 r r4 r2 |
}
}
led to unexpected results since \pageBreak produces an EventChord which
is then taken as a repeat note by 1~. This patch makes sure that
repeated durations only attach to event chords containing rhythmic
events.
David Kastrup [Fri, 26 Sep 2014 12:26:54 +0000 (14:26 +0200)]
Issue 4133: Give predicate ly:grob-properties? the description "grob properties"
\set Staff.InstrumentName = "Test"
previously led to
warning: type check for `InstrumentName' failed;
value `"Test"' must be of type `ly:grob-properties'
and will now instead produce
warning: type check for `InstrumentName' failed;
value `"Test"' must be of type `grob properties'.
The output looks slightly less cryptic and more intentional. The plural
form is indeed correct: this type of context property serves as a
container for _all_ grob properties of InstrumentName.
David Kastrup [Wed, 10 Sep 2014 15:01:43 +0000 (17:01 +0200)]
Issue 4135/2: Replace mark_smob static member functions with non-static members
Since the mark functions generally need to access a number of members,
it is quite more convenient if the mark functions are proper non-static
member functions.
David Kastrup [Sat, 27 Sep 2014 11:27:45 +0000 (13:27 +0200)]
Issue 4135/1: Don't use ASSERT_LIVE_IS_ALLOWED in simple smobs
When replacing mark_smob with a proper member function, use of
ASSERT_LIVE_IS_ALLOWED would require access to self_scm () or similar,
and simple smobs don't link back to their SCM cell. This only
concerns Skyline and Context_mod, so the loss is not all that
large.
David Kastrup [Thu, 18 Sep 2014 13:46:39 +0000 (15:46 +0200)]
Issue 4119: Avoid using `markup' as local binding
I suspected this to be a case of GUILEv2 porting problems, but that does
not appear to be the case. Nevertheless, using the `markup' macro's
name as a local identifier may well confuse humans even if it does
manage to convince GUILE.
David Kastrup [Wed, 14 Aug 2013 18:43:37 +0000 (20:43 +0200)]
Issue 4126: Provide a --enable-guile2 option in configure
For convenient experimenting with GUILEv2, we want to have everything in
master, so provide a configure option that will allow the switch to
GUILEv2 compilation. Off by default since, well, lots of stuff does not
work yet.
David Kastrup [Mon, 22 Sep 2014 13:53:56 +0000 (15:53 +0200)]
Issue 4125: Disable character set recognition
GUILE 1.8 presumably does not make use of the LC_CTYPE information and
just does its input/output/string processing in 8bit chunks. For the
sake of getting comparable results at first when working on GUILE 2.0,
we switch off character set recognition here.
At a later point of time, integration with the character processing of
GUILE 2.0 may be attempted but since this is an entirely new can of
worms with its own performance pitfalls, we put this aside for now.
David Kastrup [Sat, 20 Sep 2014 17:57:38 +0000 (19:57 +0200)]
Issue 4121/2: Store markup command argument list names in docstring
For one thing, the doc string does not make a lot of sense without the
argument list and it cannot reliably be deduced from the doc string
itself.
For another, GUILEv2 does not do us the favor of storing the original
argument list anywhere where it could be retrieved with a useful amount
of labor.
While it would be nice to put the types of the arguments into the doc
string as well, the signature's actual predicates are only evaluated
after macro expansion and that is too late for generating the doc
string.
So we just stick the argument list (after uncurrying) as a line at the
top.
David Kastrup [Sat, 20 Sep 2014 17:57:38 +0000 (19:57 +0200)]
Issue 4121/1: Store music function argument list names in docstring
For one thing, the doc string does not make a lot of sense without the
argument list and it cannot reliably be deduced from the doc string
itself.
For another, GUILEv2 does not do us the favor of storing the original
argument list anywhere where it could be retrieved with a useful amount
of labor.
While it would be nice to put the types of the arguments into the doc
string as well, the signature's actual predicates are only evaluated
after macro expansion and that is too late for generating the doc
string.
So we just stick the argument list (after uncurrying) as a line at the
top.
David Kastrup [Fri, 19 Sep 2014 10:14:28 +0000 (12:14 +0200)]
Issue 4116: Disable ASSERT_LIVE_IS_ALLOWED in GUILEv2
Apparently the garbage collection in GUILEv2 can do a mark pass over
material without actually protecting it from collection, possibly
because the garbage collector can run in a separate thread. At least,
the attempt to print such remaining live smobs still seen by a mark pass
leads to crashes, so disable this memory leak detection mechanism on
GUILEv2.