Skip to content

2.18

Compare
Choose a tag to compare
@josiah-wolf-oberholtzer josiah-wolf-oberholtzer released this 08 Jul 06:11

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.