Trevor Daniels [Sat, 30 Aug 2014 20:44:23 +0000 (21:44 +0100)]
Issue 4078: Doc: Use variables rather than instrument definitions
Using variables for switching character names in vocal music
rather than instrument definitions is easier to understand,
easier to set up and quicker to type. It also frees up the
use of instrument definitions so they may be tailored for
better use in instrumental compositions.
Remove the mention of \transposition. This is never required
in vocal music.
David Kastrup [Mon, 25 Aug 2014 15:46:29 +0000 (17:46 +0200)]
Issue 4082/1: Reimplement Smobs via templates rather than preprocessor
This creates the underlying code for the new implementation without
converting the bulk of the code (which is left to a script committed
separately). The include file ly-smobs.icc is removed completely. A
new file smobs.tcc contains generic template instantiations. The GCC
implementation works by loading it unconditionally in smobs.hh.
Depending on the underlying template mechanism, it might be feasible to
include it into just one compilation unit.
Where the previous implementation referred to class names passed into
macros, the typeinfo mechanism of C++ is employed for deriving the
respective name. The GCC implementation uses some cursory demangling of
the resulting type id, converting "3Box" into "Box" and similarly.
Other APIs might warrant different polishing but the type names are
mostly used for internal purposes and differences are not all that
problematic.
Trevor Daniels [Sat, 30 Aug 2014 11:42:54 +0000 (12:42 +0100)]
Issue 4075: Doc: Correct the instrumentTransposition setting in NR 2.1.6
The value of instrumentTransposition affects the MIDI
pitch. As all the notes in this example are entered
at the correct sounding pitch no instrument transposition
is required. Previously Kaspar sounded an octave too low.
But it turns out that the "formal" definition of a list given there is
unsuitable for determining the list status of circular lists because the
definition, well, turns out to be circular.
Janek Warchoł [Sun, 10 Aug 2014 19:09:42 +0000 (21:09 +0200)]
Use aligned-on-x-parent instead of other callbacks for some grobs
Now that we have an easy way of specifying different alignments for
grob and its parent (see 0c4f221e5d), we can use aligned-on-.-parent
in places that we previously used .-aligned-on-self. With this change,
the users have more control over the placement of grobs.
David Kastrup [Wed, 20 Aug 2014 12:27:55 +0000 (14:27 +0200)]
Issue 3518: Support temporary divisi staves
This provides the low-level support for temporary divisi staves by
adding a `VerticalAxisGroup.remove-layer' property of type integer that
interacts with the "Keep_alive_together_engraver": when set to a numeric
value, staves with the same numeric value are kept alive together as one
group. Of several such groups with live staves, only the one with the
lowest common numeric `remove-layer' is retained.
David Kastrup [Mon, 18 Aug 2014 16:17:05 +0000 (18:17 +0200)]
Issue 4070: Cyclic markup detection unable to deal with non-linear code execution
This uses dynamic winding to keep the stack depth counts accurate even
in the presence of non-local exits like those used of
map-markup-commands. It also changes the regtest
markup-cyclic-reference.ly since it seems too much trouble to trap both
cyclic references via a tortoise/hare algorithm as well as limiting the
maximum markup stack depth.
David Kastrup [Wed, 30 Jul 2014 15:34:55 +0000 (17:34 +0200)]
Issue 2507: Stop the entanglement of context properties and grob property internals
This introduces a semi-opaque structure Grob_properties meeting the
predicate ly:grob-properties? that is algorithmically handled at the C++
level via a wrapper structure Grob_property_info.
Encapsulating grob properties in that manner reduces the potential for
clashes and makes it easier to change algorithms and/or internal
representation.
While the principal distinction between context properties (one value
per context) and context-based grob property templates (one stack per
context) remains, at least the separation of the handling is more
pronounced.
David Kastrup [Thu, 14 Aug 2014 20:20:35 +0000 (22:20 +0200)]
Issue 3072: Nested overrides get confused with multiple contexts in play
The main problem with nested overrides lies not as much with the
override (which can be done reasonably well) but rather with the
corresponding reverts. Detecting and undoing a previously established
nested override by its effects on an alist, particularly when nested
overrides may be present at several different levels in several
different contexts and/or stack depths and may be undone in different
order from being established, is a complex problem. It is complex
enough that it is not clear that a satisfactory solution does even
exist: at least LilyPond's implementation breaks down for a number of
test cases.
The approach of this implementation is to not even try reverting nested
overrides from looking at their effects on the final result. Instead
nested overrides like
with ... filled in from other parts of the alist (which may change
independently at a later point of time) but rather by using
(bound-details left text) itself as a key and thus storing
((bound-details left text) . "foo")
as the representation of the override. Consequently, reverting an
override with the same nested property path is straightforward. Neither
the action of overriding nor of reverting now require referring to or
updating any part of the property stack outside of the current context.
The downside is that an actual reference to the resulting grob alist
requires expanding the nested overrides at the time of creating a grob
or otherwise asking for ly:context-grob-properties.
Since issue 2507 encapsulated grob property access into the
Grob_property_info algorithm container structure relying on data stored
in context properties of elements of type Grob_properties, changing the
respective algorithms can be facilitated completely in those classes.
In order to provide similarly efficient access and reasonable caching
and just-in-time reevaluation of previously computed values,
Grob_properties needed to be significantly extended in size.
Rewrite paths relative to the lily-output-dir or the output dir
depending on which one is being used. Always use forward slashes
since this is what lilypond expects, even on Windows.
James Lowe [Sun, 10 Aug 2014 08:34:20 +0000 (09:34 +0100)]
Doc: Appendix - Articulations and Ornamentation - part 3
Issue 1189
Create Texifo @multitable entries for the
List of Articulations appendix.
As there are a lot of separate scripts being
documented this Issue is going to be split
into multiple, smaller, parts to aid in the
review process. Part 2 was commit 4d6f2a27cc
This is part 3 and while not strictly
'Articulations and ornamentations' covers
the percussion scripts.
I have also set the @code{} script examples into
the same column as the @lilypond examples; saving
a significant amount of wasted page space. I have
removed unnecessary lilypond-book variables making
the texinfo code less noisy.
David Kastrup [Sun, 17 Aug 2014 08:14:44 +0000 (10:14 +0200)]
Fix issue 3826
Commit 2d3a5d87166caa13feb036e23086b0d4f23283f4 let
scripts/auxiliar/update-with-convert-ly.sh call the non-existent
Makefile target "make pythonmodules" instead of "make python-modules".
Until now, numbers indicating clef transposition (for example
in \clef "G_8") were simply centered against the clef glyph.
This was not optimal, because clef glyphs aren't symmetrical
- for example the hook of the treble clef isn't exactly at its
horizontal center, and thus the octavation number shouldn't
be exactly centered.
This commit allows to specify alignment separately for each
clef, taking into account their individual characteristics.
Alignments are stored in clef-alignments property.
* Check for tracker issues missing OWNER or SUMMARY fields.
* Convert tabs to spaces in tracker issue summaries.
* Add lilypond-issues.csv to .gitignore.
* Add Heikki to mailmap.
* Update documentation.
* Fix typos.
David Kastrup [Sun, 15 Jun 2014 23:01:57 +0000 (01:01 +0200)]
Issue 4056: Let \partial in mid-piece work via a finalization hook
That allows all other processing to complete before measurePosition is
adjusted. In particular, this avoids problems when multiple parallel
contexts invoke \partial and/or bar checks.
Janek Warchoł [Sat, 9 Aug 2014 19:08:08 +0000 (21:08 +0200)]
Grob alignment: get back 2.19.9 behaviour
A series of commits
* 0bc7f77 Issue 3978: Merge alignment cleanup
|\
| * d6604b0 define-grobs.scm: reorder properties alphabetically
| * 6f3f8f0 TextScript, CombineTextScript: use aligned_on_parent
| * 1d76502 Replace XY-offset closures with aligned_on_parent where possible
| * 09412c2 Clean up DynamicText horizontal alignment.
|/
changed how some grobs (notably DynamicTexts) reacted to overriding
self-alignment-X property. The new behaviour was confusing for some
users, so this commit gets back the old behaviour. The possibility
of using separate alignment factors for grob and its parent, introduced
by previous commit (see Issue 4022), makes it possible to get pre-0bc7f77
behaviour just by changing default values of parent-alignment-*; leaving
up the possibility to easily change them in the future.
See http://lists.gnu.org/archive/html/lilypond-user/2014-07/msg00691.html
and https://code.google.com/p/lilypond/issues/detail?id=4036
for details.
Abraham Lee [Sat, 2 Aug 2014 16:17:01 +0000 (18:17 +0200)]
Allow changing of notation fonts
This commit changes the behaviour of make-pango-font-tree in the
following ways:
- Make all arguments optional key/value pairs
keeping the current default values (emmentaler/Century Schoolbook)
- Allow changing of music fonts too.
Currently alternative music fonts have to be present in the font
directory besides Emmentaler fonts, and they have to be manually installed.
But now there are a number of alternative and compatible fonts available.