Dear friends,
I'm pleased to announce that Abjad 2.17 is now available.
Abjad is a Python API for Formalized Score Control
Abjad helps composers build up complex pieces of music notation in an
iterative and incremental way. Use Abjad to create symbolic
representations of all the notes, rests, staves, tuplets, beams and slurs
in any score. Because Abjad extends the Python programming language, you
can use Abjad to make systematic changes to your music as you work. And
because Abjad wraps the powerful LilyPond music notation package, you can
use Abjad to control the typographic details of the symbols on the page.
Details of the new release appear below.
------------
## Improvements:
- Abjad's documentation has seen extensive work, including:
- crisp SVG Graphviz output for all class lineage graphs
- expandable image thumbnails
- a score gallery page showing notation examples from many scores created
- revised installation instructions
- virtually all code examples in the docs are now interpreted via the
`abjad-book` Sphinx extension, guaranteeing correctness
- many enhancements to Abjad's Sphinx extension
- A new `PackageGitCommitToken` class for embedding Python package version
information in LilyPond files as comments.
- A new `IterationAgent.by_timeline_and_logical_tie()` method.
- A provisional collection of new classes in `lilypondnametools` for
object-modeling various LilyPond entities: `LilyPondGrob`,
`LilyPondGrobInterface`, `LilyPondContext` and `LilyPondEngraver`.
- Abjad now supports PyPy, in addition to Python 2.7 and Python 3.3+.
## Changes:
- Abjad's dependencies have been separated into `standard`, `development` and
`ipython`. See our installation docs for details.
- Abjad's IPython extension now uses `timidity` instead of `ffmpeg` and
`fluidsynth` to embed audio output from calls to `play()`. OSX users can
install `timidity` via HomeBrew.
- `GraphvizEdge.__call__()` has been removed in favor of explicit
`.attach(node_one, node_two)` and `.detach()` methods.
- `sievetools` functionality has been merged into the classes housed in
`patterntools`.
- All `labeltools` functionality has been migrated into the
`agentools.LabelAgent` class.
- `LilyPondFile` properties such as `paper_size`, `includes`, etc. are now
immutable. Set them during instantiation. See the API example for details:
- `TimeSignature` can now only be instantiated from a pair, such as `(3, 4)`:
`TimeSignature((3, 4))`.
## Bugfixes:
- `GraphvizGraph` instances can now be copied with edges intact.
- `Markup` now properly quotes strings containing `#` symbols.
------------
We hope you enjoy!
Trevor Bača
Josiah Wolf Oberholtzer