Releases
2.18
Abjad 2.18
Improvements
[#715 ] Grace notes are now aware of their parentage above and beyond their enclosing GraceContainer
.
[#703 ] Added a synthetic_offset
keyword to attach()
and IndicatorExpression
.
This allows composers to attach effective indicators which start before the score starts, allowing composers to model how various indicators hold over from a previous section.
For example: attach(Dynamic('f'), voice, synthetic_offset=-1)
[#640 ] Many optimizations:
Optimized hot code paths in Duration and Offset instantiation.
Optimized timespan comparison.
Optimized parser instantiation.
[#626 , #726 ] Dynamic
now recognizes sffp
, sffz
and niente
as valid dynamic names.
[#726 ] Hairpin
is now niente-aware.
[#628 ] Implemented a collection of command-line tools for working with score packages.
ajv score
, ajv material
, ajv segment
, ajv target
.
These tools are provisional pending more extensive use.
[#719 ] Implemented TupletSpellingSpecifier.preferred_denominator
.
This mirrors Tuplet.preferred_denominator
.
[#666 ] Abjad now formats LilyPond properties using the newer dot-chained syntax, not the old #'...
syntax.
As always, Abjad targets the development version of LilyPond, currently the 2.19 series.
[#720 ] Non-reduced fractions can be attached to leaves just like Multiplier
objects.
[#724 ] Equipped Sequence.partition_by_counts()
with a reverse
keyword.
[#725 ] Equipped Markup
with .sub()
and .super()
markup command methods.
Changes
[#709 ] Spanners now attach only to leaves , never to containers .
This represents a significant simplification in Abjad's score model.
This change should generally be transparent to users, as attach()
does the work of iterating leaves in its component expression.
[#709 ] Many spanners now attach only to 2 or more leaves at once, including Slur
and Tie
.
[#709 ] Removed Container.select_leaves()
.
To select a container's leaves, use list(iterate(container).by_leaf())
.
To select the first leaf of a container, use next(iterate(container).by_leaf())
.
To select the last leaf of a container, use next(iterate(container).by_leaf(reverse=True))
.
[#628 , #644 , #643 , #702 ] Tool-chain clean-up and refactoring
developerscripttools
was renamed commandlinetools
.
DeveloperScript
was renamed CommandlineScript
.
Unused and obsolete scripts have been removed.
[#717 ] Out-ported various classes to https://github.com/trevorbaca/baca :
Cursor
, PitchClassTree
, PayloadTree
, CyclicPayloadTree
.
[#714 ] Selector.by_leaves()
is now Selector.by_leaf()
. This harmonizes with IterationAgent.by_leaf()
.
[#721 ] Added a new LilyPondCommand.prefix property.
This makes it easy to position arbitrary strings relative to components.
Bugfixes
[#655 ] Tuplet._simplify_redundant_tuplet()
takes logical ties into account.
[#680 ] Abjad's docs post-process SVG images under Python 2.7 properly.
[#736 ] Registration now takes quarter tones into account.
You can’t perform that action at this time.