Version 2.55.1
==============

As an experiment, I'll move librsvg from even-odd versioning (odd
minor version is unstable, even minor version is stable), to the
versioning scheme that GNOME uses these days.  So, 2.55.x is the new
stable series.

* There is a new development guide for librsvg, for people who want to
  help in its development.  I hope this will be especially useful to
  Outreachy and Summer of Code interns:
  https://gnome.pages.gitlab.gnome.org/librsvg/devel-docs/index.html

* Define missing crate metadata for Cargo.toml (Guillaume Desmottes).

* Add some tests that were missing for the C API.

* Fix the basic test suite in Windows.

* Miscellaneous fixes for the build and CI (Jürg Billeter).

Version 2.55.0-alpha
====================

This is the first release in the new development series.

- The Minimum Supported Rust Version (MSRV) is now Rust 1.58.

- #855: The release tarball no longer contains vendored Rust
  dependencies.  Most distributions now have infrastructure to pull
  these themselves, so let's make the tarball smaller.

- #880 - Accept patterns with userSpaceOnUse units for the stroke of
  axis-aligned lines.

- #706: Small reductions in memory consumption of the DOM tree
  (Michael Howell).

- Updates for the gtk-rs API (Bilal Elmoussaoui).

Version 2.54.4
==============

- #817 - Support CSS Color 4 syntax for `<alpha-value>`.  Opacities
  can be specified as numbers or percentages now, e.g. `0.5` or `50%`
  (Michael Howell).

- #870 - Roll back minimum required version of Pango to 1.46.0
  (Kleis Auke Wolthuizen).

- #867 - Fix Windows NMake install when documentation is not built.
  (Peter Williams).

Version 2.54.3
==============

- #866 - Fix detection of gi-docgen (David King, Jan Alexander Steffens).

- Install the generated documentation in the correct place so that
  Devhelp can find it (thanks to Jan Tojnar for pointing this out).

Version 2.54.2
==============

- #823 - Fix regressions when computing element geometries.

- Add a --disable-gtk-doc option for the configure script, so people
  can disable generating documentation for cross-compiling (Matt
  Turner).

- MSVC: Support generating documentation, and passing introspection
  paths (Chun-wei Fan)

Version 2.54.1
==============

This release just has some build-time fixes.

- Fix oversight in the Minimum Supported Rust Version (MSRV) - this
  release requires Rust 1.56 or later.  This has been true since
  librsvg 2.53.1, but it was not checked correctly. (Matt Turner)

- #859 - Make rst2man and gi-docgen optional. (Kleis Auke Wolthuizen)

- #856 - Fix documentation comments.

Version 2.54.0
==============

This is a summary of the 2.53.x release notes; you can also read them
for more detail.  Not many new features; we've been working on
infrastructure and documentation.

- Librsvg now supports SVG2 geometry properties for these elements:
  rect, circle, ellipse, image, svg (Jeremias Ortega).

- #721 - Catch circular references when rendering patterns.

- The C API documentation now uses gi-docgen instead of gtk-doc.
  Rsvg-convert's man page is now converted to reStructuredText instead
  of troff.

- The "Recommendations for applications" chapter in the documentation
  is much improved!

Version 2.53.2
==============

- #851 - Output filled text as text for PDF; fixes regression due to
  outputting all text as paths.

- Fix taller-than-wide proportional scaling and size limiting in
  rsvg-convert.

- #772, #773, #774, #775, #776 - Implement SVG2 geometry properties
  for these elements: rect, circle, ellipse, image, svg (Jeremias
  Ortega).

- #450 - Fix potential unaligned accesses in surface iterators
  (Michael Howell).

- Actually use GDK_PIXBUF_MODULEDIR when calling
  gdk-pixbuf-query-loaders (Fabrice Fontaine).

- Windows build fixes (Chun-wei Fan).

- Add links to functions and types throughout the C API documentation.

Version 2.53.1
==============

While it is not a user-visible change, Jordan Petridis has ported
librsvg's Continuous Integration (CI) infrastructure to use
Freedesktop CI Templates.  This lets us test librsvg easily on
different environments.  If you want your environment tested, now is
the time to add it!

- #599 - Fix incorrect text rendering when text has different scales
  in the X/Y axes.  This regressed after librsvg 2.52.5, when Pango
  had to revert its fix for the same bug.  Now librsvg renders all
  text as paths, and does the scaling itself.  Please file a bug if
  you have evidence that this presents a performance problem for you.

- Update to the latest gtk-rs release (Bilal Elmoussaoui).

- Port to Freedesktop CI Templates (Jordan Petridis).

- Visual Studio builds can work from a git checkout now (Chun-wei Fan)

- Windows build fixes (Martin Hertz, Chun-wei Fan)

Version 2.53.0
==============

This is the first release in the new development series.  There are no
new features, just changes to how the documentation is built.

The man page for rsvg-convert is now generated from a reStructuredText
document, and the C API reference is generated using gi-docgen.

Please make sure you install python3-docutils (for rst2man) and
gi-docgen before compiling librsvg from a tarball.

- #755 - rsvg-convert's man page is now generated from reStructuredText.

- #827 - Move C API reference to gi-docgen.

- Test suite updates (Michael Howell).

- Link against bcrypt for Visual Studio builds (Martin Hertz).

Version 2.52.5
==============

Just bugfixes this time:

- #812 - Fix mangled output in rsvg-convert when redirecting output to
  a pipe on Windows (Michael Howell).

- #766 - When outputting to SVG, rsvg-convert now uses the
  width/height units specified in the command line; it always used
  pixels before (Daniel Petri Rocha).

- #814 - Fix incorrect top/left margins for SVG/PS/EPS/PDF output
  (Daniel Petri Rocha).

- #599 - Fix incorrect placement of glyphs when text has non-uniform
  scaling in the X/Y axes.  This is not a librsvg bug, but is fixed by
  Pango 1.49.3 and later.  Hopefully Pango 1.48.11 will be released
  soon with this fix as well.  Note that this release of librsvg
  cannot increase the minimum Pango version to 1.48.11 because it is
  not released yet.

Miscellaneous:

- Updated crate dependencies: assert_cmd, cast, clap cssparser,
  float-cmp, itertools, nalgebra, png, proptest, rctree, selectors,
  system-deps.

Version 2.52.4
==============

New features:

- #816 - Support the isolation property from the Compositing and
  Blending Level 1 specification.

- Support Visual Studio 2022 (Chun-wei Fan).

Fixes:

- #818 - The opacity and mix-blend-mode properties were not being
  applied when an element has a mask.

- Fix panic when an empty group has a pattern fill and filters.

- Fix the tests on Windows; the still only work when Fontconfig is
  present (Chun-wei Fan).

- Work around a bug in the cairo-rs bindings in the test suite, that
  only manifests itself in s/390x due to its calling convention.  See
  https://github.com/gtk-rs/gtk-rs-core/issues/335

Version 2.52.3
==============

Bugfixes, mostly for text layout.  Also, text links in PDF!

- #17 - Support text-decoration=overline.

- #249 - Basic support for the unicode-bidi property.  Librsvg still
  considers each tspan independently of others, which is incorrect, but
  at least bidi-override works now for a single embedding level.

- #804 - Fix placement of tspan that changes the text direction.

- #805 - :lang() selector should now match lang attribute from an
  element's parent. (Michael Howell)

- #806 - Fix the text-anchor property for right-to-left text.

- #807 - PDF now includes links inside text elements. (Michael Howell)

Version 2.52.2
==============

Bugfixes and new features!

## New features

Thanks to Michael Howell, rsvg-convert now supports generating
multi-page PDFs in a sensible way.

With one SVG document per page, each page with the
SVG's natural size:

  rsvg-convert --format=pdf -o out.pdf a.svg b.svg c.svg

With all pages sized as portrait US Letter, and each SVG scaled to fit
so that there is a 1in margin around each page:

  rsvg-convert --format=pdf -o out.pdf \
    --page-width=8.5in --page-height=11in \
    --width=6.5in --height=8.5in --keep-aspect-ratio \
    --top=1in --left=1in \
    a.svg b.svg c.svg

Please see the man page for details.

- #738 - Support <a> elements inside <text>.  Also, support the CSS :link
  pseudo-class for matching against links. (Michael Howell)

- #649 - Support the CSS :lang() pseudo-class for matching against an
  element's xml:lang attribute. (Michael Howell)

- #790 - Support the mask-type property from SVG2.

## Fixes

- #800 - Don't panic when a shorthand property is set to
  inherit. (Michael Howell)

- #788 - Fix regression with the viewport size of interior <svg>
  elements. (Michael Howell)

- #731 - Allow length units to be case-insensitive, per SVG2. (Kolja Lampe)

## Documentation

- There is now a FEATURES.md in the repository, where you can see all
  the elements, attributes, and properties that librsvg supports.  We
  will be adding detail to this gradually.

- For developers, there is now devel-docs/adding-a-property.md with a
  tutorial on how to add support for new CSS properties.

Version 2.52.1
==============

This is a bugfix release; there are no new features this time.

## Changes:

- #791 - Fix ordering of tspan inside text elements for right-to-left
  languages.

- #789 - Fix text-anchor positioning for right-to-left languages.

- #797 - Fix regression in computing sizes when an SVG has only one of
  width/height and a viewBox.  Thanks to Joshua Fogg for compiling a
  list of test cases for this.

- #565 - Spec compliance - the writing-mode property applies only to
  text elements, no to individual tspan elements.

- #794 - Fix build on big-endian platforms.

- Clarify documentation for the rsvg_handle_write() /
  rsvg_handle_close() deprecated APIs.

Version 2.52.0
==============

This is a big release!  What follows is a summary from the 2.51.x
release notes; you can also read them for more detail.

The biggest user-visible change is that rsvg-convert has been ported
to Rust (Sven Neumann, Paolo Borelli), and it has new features!

## New features in rsvg-convert

### Support for physical units

rsvg-convert is now aware of physical units, and
fixes a bug where PDFs were created at the wrong size.  Do you need to
render an SVG in a PDF file, scaled to 10x10 cm, placed at a certain
position of a landscape A4 page?

  rsvg-convert --format=pdf \
    --page-width=297mm --page-height=210mm \
    --width=10cm --height=10cm --keep-aspect-ratio \
    --top=5cm --left=8cm \
    foo.svg > foo.pdf

Please see the rsvg-convert(1) man page for more details and plenty of
examples.

### Support for Accept-Language

Previously, librsvg picked up the user's language preferences through
environment variables like LANG and LC_MESSAGES.  This is inconvenient
for applications that call rsvg-convert but don't want to synthesize a
LANG variable.

There is a new option in rsvg-convert so you can pass
--accept-language=<languages> formatted as an HTTP Accept-Language
header.  This is used to specify which languages will be chosen from
elements with the "systemLanguage" attribute:

    rsvg-convert --accept-language=es-MX,en foo.svg

That command will select Mexican Spanish and English from suitable SVG
elements.  Please see the man page for details.

### Miscellaneous

rsvg-convert's default DPI is now 96, to better match W3C
standards.  It was 90 before for historical reasons.  We can change
this back to 90 if it breaks too many scripts.  You can use the
options "--dpi-x=90 --dpi-y=90" to restore the old behavior.

rsvg-convert no longer supports the "xml" or "recording" output
formats.  These are useful only for debugging Cairo, not for general
usage.

## SVG2/CSS3 features

The following features are supported now.  Madds H, John Ledbetter,
worked on these features.

- transform property from SVG2; previously librsvg only supported the
  transform attribute from SVG1.1, which has different syntax.

- context-fill and context-stroke for <marker> and <use> elements.

- markers now support orient="auto-start-reverse".

- paint-order for text elements.

- "auto" values for the width and height attributes of the <image>,
  <rect>, and <svg> elements.

- All the <filter-function> types from the Filter Effects Module Level
  1 specification: blur(), brightness(), contrast(), drop-shadow(),
  grayscale(), hue-rotate(), invert(), opacity(), sepia(), saturate().

- The filter property now supports chains of uri() filters or
  <filter-function> shortcuts.

- Support CSS selectors for attribute matching, like rect[attr^="prefix"]

## New APIs

See the HTML documentation for details:

- rsvg_handle_get_intrinsic_size_in_pixels()

- rsvg_major_version / rsvg_minor_version / rsvg_micro_version
  variables - used to obtain the librsvg version from languages other
  than C, since they do not have access to the C macros like
  LIBRSVG_MAJOR_VERSION.

## Deprecations

The following APIs are deprecated but still available:

- rsvg_handle_render_cairo() - use rsvg_handle_render_document() instead.

- rsvg_handle_render_cairo_sub() - use rsvg_handle_render_layer() or
  rsvg_handle_render_element() depending on what you want to do.

Please see the "Migrating from old APIs" chapter in the HTML
documentation for details.

## News for developers

If you want to run the librsvg test suite easily, there are now Docker
scripts to do so.  Please see the tools/docker/README.md file for
details. (Madds H)

There is no leftover C code in the library; all of the implementation
and the publically-visible symbols are defined in the Rust code.  The
remaining .h files are all public and do not reflect any .c
code. (Sven Neumann)

The test suite is now ported to Rust.  The only remaining tests in C
are for the C API itself (tests/api.c).  With the test suite in
Rust, the tests are automatically run in parallel across CPU cores,
making test runs much faster.  (Sven Neumann, Dunja Lalic)

"cargo build", "cargo test" now work without running autotools first,
so you can in general develop librsvg as a normal Rust project.

The HTML documentation has new chapters; you may find interesting
things there!

## News for distributors

There is a new list of librsvg releases with security fixes in
SECURITY.md.  That file also contains security-related information
on librsvg's dependencies.

The Minimum Supported Rust Version (MSRV) is now Rust 1.52.

## Special thanks

Paolo Borelli and Sven Neumann did a lot of painstaking work to finish
porting the library and rsvg-convert to Rust.

Sven Neumann and Dunja Lalic ported the test suite to Rust, making it
much faster.

Dunja Lalic rewrote the Continuous Integration infrastructure, making
it MUCH faster.

Madds H did their Outreachy internship for librsvg and implemented a
bunch of useful SVG2/CSS3 features.

John Ledbetter methodically went through all the <filter-function>
shortcuts and implemented them for SVG2.

Ismael Luceno has been cleaning up our autotools scripts.

Andre Klapper has been wrangling numerous bug reports from Wikimedia
as usual.

Chun-wei Fan, Abraham Toriz, Christian Hergert, Ignacio Casal Quinteiro
have been keeping the Windows and MacOS builds working.


Version 2.51.4
==============

- #618 - SVG2: Implement context-fill and context-stroke for markers
  (Madds H).

- #727 - SVG2: Implement paint-order for text elements (Madds H).

- #747 - SVG2: Support width="auto" and height="auto" for the image element.

- Fix the Windows build (Chun-wei Fan).

- The tools/docker directory now has scripts that developers can use
  to test librsvg on containers for various Linux distributions.

- Gtk-rs dependency is updated to 0.14.0 (Bilal Elmoussaoui, Chun-wei Fan).

- #758 - Panic when rendering with masks or opacity to a non-image surface.

- #757 - Fix 32-bit builds.


Version 2.51.3
==============

The big news is that rsvg-convert is now aware of physical units, and
fixes a bug where PDFs were created at the wrong size.  Do you need to
render an SVG in a PDF file, scaled to 10x10 cm, placed at a certain
position of a landscape A4 page?

  rsvg-convert --format=pdf \
    --page-width=297mm --page-height=210mm \
    --width=10cm --height=10cm --keep-aspect-ratio \
    --top=5cm --left=8cm \
    foo.svg > foo.pdf

Please see the rsvg-convert(1) man page for more details and plenty of
examples.

SVG2 features:

Markers now implement orient="auto-start-reverse".  The work on
markers is by Madds H., who is doing their Outreachy internship for
librsvg.

All the <filter-function> types in SVG2 are now supported, thanks to
John Ledbetter.

- The Minimum Supported Rust Version (MSRV) is now Rust 1.52.  This
  takes care of CVE-2021-28878 in the Rust standard library.

- #514 - rsvg-convert is now aware of physical units.

- #484 - Markers can now have orient="auto-start-reverse" per SVG2
  (Madds H - Outreachy internship).

- #711 - Implement the drop-shadow() filter function (John Ledbetter).

- #713 - Implement the hue-rotate() filter function (John Ledbetter).

- #677 - rsvg-convert, do not clip the rightmost/bottomost pixels of
  an image with partial pixel coverage.

- Partial fix for #668 - Render small caps for fonts that support the
  "smcp" OpenType feature.  Librsvg and Pango are not yet able to
  synthesize small caps for fonts that do not support them, but for
  those that do, they should work fine now.

- #566 - Restrict which elements can appear inside a clipPath, to be
  spec compliant.

- #746 - Possible cairo_save() without cairo_restore() in render_layer().

- Various updates to the developer's documentation.


Version 2.51.2
==============

This release fixes an important bug about text spacing.  The bug fix
requires an update to at least Pango 1.44.  Sorry for the increased
requirements!

Librsvg now supports most of the filter function shortcuts in SVG2;
see below.

Previously, librsvg picked up the user's language preferences through
environment variables like LANG and LC_MESSAGES.  This is inconvenient
for applications that call rsvg-convert but don't want to synthesize a
LANG variable.

There is a new option in rsvg-convert so you can pass
--accept-language=<languages> formatted as an HTTP Accept-Language
header.  This is used to specify which languages will be chosen from
elements with the "systemLanguage" attribute:

    rsvg-convert --accept-language=es-MX,en foo.svg

That command will select Mexican Spanish and English from suitable SVG
elements.  Please see the man page for details.

- The Minimum Supported Rust Version (MSRV) is now Rust 1.51.

- Librsvg now requires at least Pango 1.44.

- #730 - Incorrect text spacing when the transform is not 1:1.  You
  can see this when a small font-size is scaled up due to a
  transform.  It is less visible for a large font-size scaled down.

- #709 #710 #712 714 #715 #716 #717 - The "filter" attribute now
  accepts lists of "<filter-function>" per SVG2.  There is support for
  blur(), contrast(), grayscale(), invert(), opacity(), saturate(),
  sepia() (John Ledbetter).

- #356 - Add --accept-language option to rsvg-convert.

- #704 - Fix circle/ellipse in paths when they are made out of a
  single Arc command.

- #691 - Don't allow number lists with unbounded lengths in
  tableValues attributes, for feComponentTransfer and
  feConvolveMatrix (Madds H).

- #718 - Negative rx/ry in rect element should be ignored.

- #687 - Reduce memory pressure when rendering text.

- Fix build on 32-bit ARM (Lovell Fuller).

- Update the Rust crate dependencies (Bastien Orivel).

- Refactoring parsers (Paolo Borelli).

- There is a new list of librsvg releases with security fixes in
  SECURITY.md.  That file also contains security-related information
  on librsvg's dependencies.

Special thanks to John Ledbetter for carefully implementing each of
the new shortcuts for filter functions in SVG2.


Version 2.51.1
==============

- The Minimum Supported Rust Version is now 1.48.

- rsvg-convert should fully work on Windows again (Abraham Toriz).

- rsvg-convert's SVG output format uses pixel units instead of points again.

- #699 - Images embedded as data: URLs didn't render if they had a
  MIME type with a charset parameter.

- #698 - Add limit for too-large radiuses on the feMorphology filter (Madds H).

- #686 - Reduced stack usage (Sebastian Dröge).

- #261 - Parse the enable-background property.

- #703 - Properly ignore elements in an error state inside the "switch" element.

- #695 - Fix cascading mode for the "feImage" element.

- Fix cascading for the "filter" element and filter primitives in general.

- Remove constraints on the types of units used within the "filter"
  element and filter primitives.

- Reduced memory consumption in general by about 300 bytes per SVG element.

- Update vulnerable crates:
    smallvec to 1.6.1 (RUSTSEC-2021-0003)
    generic-array to 0.13.3 (RUSTSEC-2020-0146)

- Lots of cleanups to the build (Sven Neumann).

- Update to gtk-rs 0.9 (Bilal Elmoussaoui).

- Updated ARCHITECTURE.md and documentation in general.

Special thanks to Dunja Lalic for adding the start of code coverage
analysis to the build.


Version 2.51.0
==============

There are many changes in this development release!  This experimental
release is meant for early testing, with the understanding that some
things may be broken, especially since we have large changes to the
way librsvg's artifacts are built.

The biggest user-visible change is that rsvg-convert has been ported
to Rust (Sven Neumann, Paolo Borelli).

Please file bugs at https://gitlab.gnome.org/GNOME/librsvg/-/issues/new
if these changes break your scripts; they are experimental for the
2.51.x development series:

- #646 - rsvg-convert's default DPI is now 96, to better match W3C
  standards.  It was 90 before for historical reasons.  We can change
  this back to 90 if it breaks too many scripts.  You can use the
  options "--dpi-x=90 --dpi-y=90" to restore the old behavior.

- rsvg-convert's --export-id (-i) option should now have more useful
  behavior.  This extracts a particular element from the SVG document
  and renders it scaled to the size specified by the --width/--height
  arguments, or to the pixel size of the element as if it had no
  transformations applied.

- rsvg-convert no longer supports the "xml" or "recording" output
  formats.  These are useful only for debugging Cairo, not for general
  usage.

Known missing features, which should be restored for the stable release:

- rsvg-convert does not allow stdin/stdout streams on Windows; this is
  being tracked in issue #676.

The following are changes related to porting to Rust; they are not
necessarily user-visible, but important for developers of the library:

- There is no leftover C code in the library; all of the
  implementation and the publically-visible symbols are defined in the
  Rust code.  The remaining .h files are all public and do not reflect
  any .c code.  (Sven Neumann)

- The test suite is now ported to Rust.  The only remaining tests in C
  are for the C API itself (tests/api.c).  With the test suite in
  Rust, the tests are automatically run in parallel across CPU cores,
  making test runs much faster.  (Sven Neumann, Dunja Lalic)

- "cargo build", "cargo test" should now work without running
  autotools first.

- The C API is now implemented on top of the public Rust API, without
  special hooks into the library's internals.

The following APIs are deprecated but still available:

- rsvg_handle_render_cairo() - use rsvg_handle_render_document() instead.

- rsvg_handle_render_cairo_sub() - use rsvg_handle_render_layer() or
  rsvg_handle_render_element() depending on what you want to do.

- These deprecations are because the new APIs conform with the web
  world's view of how SVGs should be positioned and scaled in
  surrounding content.  Whereas the old APIs were about rendering SVGs
  to whatever current transformation matrix a Cairo context may
  contain, the new APIs take a rectangular viewport and librsvg
  automatically scales the SVG document to fit in it.  The "natural
  sizing" that was implicit in the deprecated APIs is now explicitly
  documented, and available through the new API
  rsvg_handle_get_intrinsic_size_in_pixels().

New APIs:

- rsvg_handle_get_intrinsic_size_in_pixels() converts an SVG
  document's intrinsic dimensions to pixels, i.e. transforms the SVG
  document's "width" and "height" attributes to CSS pixels.

New features and bug fixes:

- #615: SVG2: Support a chain of uri() filters in the "filter" property
  (John Ledbetter, Sven Neumann).

- #483: Support CSS selectors for attribute matching, like rect[attr^="prefix"]

- #554: Fixed the geometry_for_layer() APIs to not ignore the passed viewport.

- Fixed CSS "import" so it allows only files from the same base directory
  (Lars Schmertmann).

- #642 - Fix dx/dy offsets in nested <tspan> elements.

- #601 - Compute correct bounds for objects with stroke-width=0.

- Slight speed improvements in the RGBA premultiplication code (Sven Neumann).

- #623 - The pkg-config files (*.pc) do not define the 'svgz_supported' and
  'css_supported' variables anymore.  These variables were hardcoded
  to 'true' and unchanged since 2011.

- #624 - The source repository no longer produces a librsvg-uninstalled.pc file.

- Fix the MacOS build (Christian Hergert, Ignacio Casal Quinteiro).

- Deal with missing pkg-config (Ismael Luceno).

- For cross-compilation, check for target-specific prefixed tools like
  rustc/cargo (Heiko Becker).

Changes in the Rust API:

- #597 - The LoadingError and RenderingError enums have changed, and
  are now marked #[non_exhaustive].  They will probably change again
  to hide details of error variants before we make librsvg available
  as a crate on crates.io.

Special thanks for this release:

- Dunja Lalic for revamping the CI infrastructure and making our CI
  runs much, much faster - !398.

- Sven Neumann, Dunja Lalic for porting the test suite to Rust.

- Sven Neumann, Paolo Borelli for porting rsvg-convert to Rust and
  unraveling all the little historical details that were embedded in
  it.

- Paolo Borelli for constant refactoring.


Version 2.50.7
==============

Two cairo-related bug fixes:

- #745 - Fix mismatched cairo_save/restore when running in inside the Cairo test suite.
- #746 - Possible cairo_save() without cairo_restore() in render_layer().


Version 2.50.6
==============

This release fixes an important bug about text spacing.  The bug fix
requires an update to at least Pango 1.44.  Sorry for the increased
requirements!

- Librsvg now requires at least Pango 1.44.

- #730 - Incorrect text spacing when the transform is not 1:1.  You
  can see this when a small font-size is scaled up due to a
  transform.  It is less visible for a large font-size scaled down.

- #704 - Fix circle/ellipse in paths when they are made out of a
  single Arc command.


Version 2.50.5
==============

- #699 - Images embedded as data: URLs didn't render if they had a
  MIME type with a charset parameter.

- #691 - Don't allow number lists with unbounded lengths in
  tableValues attributes, for feComponentTransfer and
  feConvolveMatrix (Madds H).

- #718 - Negative rx/ry in rect element should be ignored.


Version 2.50.4
==============

Update dependent crates that had security vulnerabilities:

  generic-array to 0.13.3 - RUSTSEC-2020-0146

- #686 - Reduced stack usage (Sebastian Dröge).

- #698 - Add limit for too-large radiuses on the feMorphology filter (Madds H).

- #703 - Properly ignore elements in an error state inside the "switch" element.



Version 2.50.3
==============

- #601 - Compute correct bounds for objects with stroke-width=0.

- #545 - Fix MacOS build (Ignacio Casal Quinteiro, Christian Hergert).

- Fix test suite on Rust 1.49 (Sven Neumann).

Version 2.50.2
==============

- #642 - Fix dx/dy offsets in nested <tspan> elements.

Version 2.50.1
==============

- #615: SVG2: Support a chain of uri() filters in the "filter" property
  (John Ledbetter, Sven Neumann).

- #483: Support CSS selectors for attribute matching, like rect[attr^="prefix"]

- #554: Fixed the geometry_for_layer() APIs to not ignore the passed viewport.

- Fixed CSS "import" so it allows only files from the same base directory
  (Lars Schmertmann).

- #623 - The pkg-config files (*.pc) do not define the 'svgz_supported' and
  'css_supported' variables anymore.  These variables were hardcoded
  to 'true' and unchanged since 2011.

- #624 - The source repository no longer produces a librsvg-uninstalled.pc file.

Version 2.50.0
==============

- The following is a summary of changes between 2.48.x and 2.50.0.  For
  full details, please see the 2.49.x release notes below.

- This release requires at least Rust 1.40.

- Windows builds now support ARM64, thanks to Chun-wei Fan.

- Librsvg now consumes much less memory for large SVG files.  The limit for
  the maximum number of elements in an SVG is bigger now at 1 million
  elements (this limit exists to avoid unbounded memory consumption by
  maliciously large files, and is plenty to render even very detailed
  maps).  Thanks to Sergey "Shnatsel" Davidoff and Adam Reichold for making
  this possible.

- #34 - The 'font' shorthand in is now supported in CSS.  Librsvg
  ignores the 'line-height' sub-property because it cannot be done
  easily with Pango, but everything else in 'font' should work now.

- Many new features from SVG2:

- #508 - radialGradient now supports the "fr" property from SVG2
  (Dunja Lalic, Corentin Rossignon).

- #568 - Support href attribute in addition to xlink:href per SVG2.

- #560 - Ignore missing filter references per SVG2.

- #607 - Support the mix-blend-mode property from SVG2 and the
  Compositing and Blending Level 1 specification, so layers can be
  composited with operators like multiply/screen/color-burn, etc.
  https://www.w3.org/TR/compositing-1/ (John Ledbetter).

- #473 - Support the paint-order property from SVG2, so one can pick
  the order in which a path's fill/stroke/markers are drawn (John Ledbetter).

- Many bug fixes and little optimizations; see the 2.49.x release notes for
  details.  Thanks to Paolo Borelli, Daniel Kolesa, Ernestas Kulik.
  Sven Neumann, Bastien Orivel, Jordan Petridis, Emile Snyder.

- Special thanks to Sven Neumann for fixing all the cargo-clippy lints.


Version 2.49.5
==============

- #607 - Support the mix-blend-mode property from SVG2 and the
  Compositing and Blending Level 1 specification, so layers can be
  composited with operators like multiply/screen/color-burn, etc.
  https://www.w3.org/TR/compositing-1/ (John Ledbetter).

- #473 - Support the paint-order property from SVG2, so one can pick
  the order in which a path's fill/stroke/markers are drawn (John Ledbetter).

- Cleanups of the basic drawing and paint-handling code (Paolo Borelli).

- Many style fixes per cargo-clippy (Sven Neumann).

- Improved documentation on the library's internals.

Version 2.49.4
==============

- Support ARM64 Windows builds (Chun-wei Fan).

- #165 - Draw zero-length paths with square caps correctly (Bastien Orivel).

- #568 - Support href attribute in addition to xlink:href per SVG2.

- #560 - Ignore missing filter references per SVG2.

- #609 - Support the transform attribute again in clipPath (Sven Neumann).

- Update Criterion benchmarks (Ernestas Kulik).

- Update to newer dependencies (Bastien Orivel).

- Many style fixes per cargo-clippy (Dunja Lalic, Sven Neumann).

Version 2.49.3
==============

- #34 - The 'font' shorthand in is now supported in CSS.  Librsvg
  ignores the 'line-height' sub-property because it cannot be done
  easily with Pango, but everything else in 'font' should work now.

- #605 - Compute 'bolder' and 'lighter' font-weight correctly.

- #219 - Make the path parser have a tokenizer/parser (Emile Snyder).

- Fixes for the CI after the gitlab.gnome.org changes (Jordan Petridis).

- Fixed some typos in the documentation (codespell is awesome!).

Version 2.49.2
==============

- Fix failing tests.

Version 2.49.1
==============

- (#604) - Fix build on big-endian machines.  Thanks to Daniel Kolesa
  for testing this repeatedly.

Version 2.49.0
==============

- Memory consumption of parsed SVG data is greatly reduced.  Property
  values, path data, and text nodes now use much less memory than
  before.  Thanks to Sergey "Shnatsel" Davidoff and Adam Reichold for
  their contributions.

- With that reduction in memory consumption, librsvg can now load up
  to 1 million XML elements.  This is a hard limit to avoid malicious
  files consuming arbitrary amounts of memory.

- #508 - radialGradient now supports the "fr" property from SVG2
