commit ec1fda53b71bcb1ba94414febd0e5e377d95bbe2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Sep 1 14:25:14 2017 -0500

    Oops, distribute the svg1.1/resources for the tests as well.

 tests/Makefile.am | 53 +++++++++++++++++++++++++++--------------------------
 1 file changed, 27 insertions(+), 26 deletions(-)

commit 5f67aee2aaaac2db8ddcdd0e7d997691f8120dc9
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Sep 1 13:38:51 2017 -0500

    Update NEWS

 NEWS | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

commit d54556007d35611e03fb9e8c8d98093fec5bb460
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Sep 1 13:16:15 2017 -0500

    Don't pass --verbose to cargo build
    
    Quiet the build a little...

 Makefile.am | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 0216b4d9cf5c36f8e67dbcc0c9ec9b19d45b7f91
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Sep 1 13:14:53 2017 -0500

    Makefile.am: Add "cargo vendor" to dist-hook
    
    Thanks to
    https://github.com/endlessm/ostree/blob/47a54bf876023b0cb457bc8a4f4264f9b2ed5438/Makefile.am
    for the incantations.
    
    This makes it possible to release tarballs with all the Rust
    dependencies embedded in them.
    
    Hopefully this paves the way for distros to use Cargo's source
    replacement to build librsvg with their own versions of dependencies.

 Makefile.am              |  9 ++++++++-
 rust/cargo-vendor-config | 11 +++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

commit d6683eb7ebb6fe4f3efd7c82e706caf9970ed756
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Sep 1 11:30:38 2017 -0500

    pattern.rs: shorten the way we map option values
    
    Thanks to Sergey Bugaev for the tip.

 rust/src/pattern.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit bdc1d2c6975c7882351b3fe0401fee1448444767
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Sep 1 09:39:30 2017 -0500

    RsvgCairoClipRender: Implement the ::render_pango_layout() method, so we can clip text
    
    With this, the test masking-path-04-b.svg passes.

 rsvg-cairo-clip.c                                  |  28 +++++++-
 .../reftests/svg1.1/masking-path-04-b-ref.png      | Bin 88260 -> 92911 bytes
 .../fixtures/reftests/svg1.1/masking-path-04-b.svg |  79 +++++++++++++++++++++
 .../reftests/svg1.1/resources/bluesquidj.png       | Bin 0 -> 37497 bytes
 4 files changed, 106 insertions(+), 1 deletion(-)

commit 589e2dcf53bd05213bb17ed48e24d3f166e4fc92
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Sep 1 08:45:31 2017 -0500

    bgo#621088: rsvg_cairo_clip_render_new(): Don't leave uninitialized fields in the parent RsvgCairoRender
    
    A text object used as a clip path caused librsvg to crash.  The reason
    is that when we create an RsvgCairoClipRender, we were leaving an
    all-zeros clip_render->super.bbox field.
    
    This caused two things:
    
    1. An all-zeros RsvgBbox is invalid; it should be "virgin" or actually
    have a valid affine.
    
    2. We were not preserving the bbox from the parent rendering context,
    so the clipped objects would not know their viewport size.  Now we
    copy the original cairo_render->bbox to our derived
    clip_render->super.bbox, and start afresh with an empty bb_stack
    inside the clip_render.

 rsvg-cairo-clip.c | 31 ++++++++++++++++++++++++++-----
 1 file changed, 26 insertions(+), 5 deletions(-)

commit dde39fccd1804b09ba1d4bfbc784fea8f72e13f6
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Sep 1 08:09:35 2017 -0500

    Remove unused prototype

 rsvg-cairo-render.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

commit 2f858993d9acf6e57be016b8688e02d0aecb0c25
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Sep 1 07:54:33 2017 -0500

    Add a bunch of masking/clipping tests from the SVG test suite

 .../reftests/svg1.1/masking-intro-01-f-ref.png     | Bin 0 -> 14528 bytes
 .../reftests/svg1.1/masking-intro-01-f.svg         |  81 +++++++++++++
 .../reftests/svg1.1/masking-mask-01-b-ref.png      | Bin 0 -> 17887 bytes
 .../fixtures/reftests/svg1.1/masking-mask-01-b.svg | 131 ++++++++++++++++++++
 .../reftests/svg1.1/masking-mask-02-f-ref.png      | Bin 0 -> 4512 bytes
 .../fixtures/reftests/svg1.1/masking-mask-02-f.svg |  50 ++++++++
 .../reftests/svg1.1/masking-opacity-01-b-ref.png   | Bin 0 -> 30924 bytes
 .../reftests/svg1.1/masking-opacity-01-b.svg       | 125 +++++++++++++++++++
 .../reftests/svg1.1/masking-path-01-b-ref.png      | Bin 0 -> 12226 bytes
 .../fixtures/reftests/svg1.1/masking-path-01-b.svg |  95 +++++++++++++++
 .../reftests/svg1.1/masking-path-02-b-ref.png      | Bin 0 -> 13294 bytes
 .../fixtures/reftests/svg1.1/masking-path-02-b.svg |  84 +++++++++++++
 .../reftests/svg1.1/masking-path-03-b-ref.png      | Bin 0 -> 23263 bytes
 .../fixtures/reftests/svg1.1/masking-path-03-b.svg | 134 +++++++++++++++++++++
 .../reftests/svg1.1/masking-path-04-b-ref.png      | Bin 0 -> 88260 bytes
 15 files changed, 700 insertions(+)

commit 8b98d9929e071b7f66bf2a3c7b87c60803b50048
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Sep 1 07:12:13 2017 -0500

    rsvg-cairo-draw: Comment on how we should be computing bounding boxes for viewports/clipping

 rsvg-cairo-draw.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

commit fd6f94b99932d64daca0b6959e73d0ff2d80dfae
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Aug 31 21:21:01 2017 -0500

    marker: Pop the things in the same order as NodeSvg and NodeUse, to make this easier to refactor

 rust/src/marker.rs | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

commit 5405a2fb96ea7a39cd17d78499279f11c1dfbd9d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Aug 31 21:04:38 2017 -0500

    marker.rs: Unconditionally push a viewbox, to make this easier to refactor

 rust/src/marker.rs | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

commit d2549f2fc2782c970c121305df041201590165dc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Aug 31 20:48:26 2017 -0500

    Add coords-viewattr-03-b.svg to the test suite

 .../reftests/svg1.1/coords-viewattr-03-b-ref.png   | Bin 0 -> 24302 bytes
 .../reftests/svg1.1/coords-viewattr-03-b.svg       |  94 +++++++++++++++++++++
 2 files changed, 94 insertions(+)

commit 5cc00b78918bfb8dcd4b62f440d80a2148ee17d4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Aug 31 20:39:48 2017 -0500

    NodeUse: Unconditionally push a viewbox, to make this easier to refactor

 rust/src/structure.rs | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

commit 060c3ef390519ccd708255fd65bf8adc09644175
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Aug 31 20:29:07 2017 -0500

    Add struct-use-09-b.svg and coords-viewattr-02-b.svg to the test suite
    
    The "use" one is for nested use/symbol.
    
    The "viewattr" one is for preserveAspectRatio on image elements.

 .../reftests/svg1.1/coords-viewattr-02-b-ref.png   | Bin 0 -> 37569 bytes
 .../reftests/svg1.1/coords-viewattr-02-b.svg       | 716 +++++++++++++++++++++
 .../reftests/svg1.1/struct-use-09-b-ref.png        | Bin 0 -> 6556 bytes
 tests/fixtures/reftests/svg1.1/struct-use-09-b.svg |  74 +++
 4 files changed, 790 insertions(+)

commit 5afb3a858f63e7dedf6ef7b73726acb3d2072175
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Aug 31 20:03:22 2017 -0500

    ViewBox: Represent unspecified view boxes as Option<ViewBox>
    
    We still have RsvgViewBox with an "active" boolean field for the C
    code.  The Rust code now handles Option<ViewBox> throughout, and only
    exposes that to C with rsvg_node_svg_get_view_box().

 rust/src/marker.rs    | 28 ++++++++--------
 rust/src/pattern.rs   | 26 ++++++++-------
 rust/src/structure.rs | 46 ++++++++++++--------------
 rust/src/viewbox.rs   | 89 +++++++++++++++++++++++----------------------------
 4 files changed, 89 insertions(+), 100 deletions(-)

commit 60b1a31da424a1700c4d3dc6ca7d3f515bc1f420
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Aug 31 18:44:19 2017 -0500

    NodeUse: normalize to default values as early as possible

 rust/src/structure.rs | 36 +++++++++++++++++-------------------
 1 file changed, 17 insertions(+), 19 deletions(-)

commit 6dab70a53f480a61ca04c3b93d83b8b23a464842
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Aug 31 13:46:29 2017 -0500

    Remove unnecessary includes

 rsvg-base-file-util.c | 3 +--
 rsvg-base.c           | 3 +--
 rsvg-cairo-render.c   | 2 +-
 rsvg-cond.c           | 1 -
 rsvg-file-util.c      | 1 -
 rsvg-filter.h         | 3 +--
 rsvg-gobject.c        | 1 -
 rsvg-styles.c         | 1 -
 rsvg.c                | 1 -
 9 files changed, 4 insertions(+), 12 deletions(-)

commit b97e590442e3178298cee47dd5239cb71a709720
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Aug 30 10:01:58 2017 -0500

    Regenerate test reference files now that text rendering is fixed

 .../reftests/svg1.1/coords-trans-02-t-ref.png       | Bin 8349 -> 8286 bytes
 .../reftests/svg1.1/coords-trans-03-t-ref.png       | Bin 7902 -> 7889 bytes
 .../reftests/svg1.1/coords-trans-04-t-ref.png       | Bin 6655 -> 6654 bytes
 .../reftests/svg1.1/coords-trans-05-t-ref.png       | Bin 8140 -> 8105 bytes
 .../reftests/svg1.1/coords-trans-06-t-ref.png       | Bin 8526 -> 8493 bytes
 .../reftests/svg1.1/filters-composite-02-b-ref.png  | Bin 16647 -> 16613 bytes
 .../reftests/svg1.1/paths-data-04-t-ref.png         | Bin 18160 -> 18138 bytes
 .../reftests/svg1.1/paths-data-05-t-ref.png         | Bin 16048 -> 16037 bytes
 .../reftests/svg1.1/paths-data-06-t-ref.png         | Bin 7255 -> 7242 bytes
 .../reftests/svg1.1/paths-data-07-t-ref.png         | Bin 6646 -> 6628 bytes
 .../reftests/svg1.1/paths-data-08-t-ref.png         | Bin 19314 -> 19317 bytes
 .../reftests/svg1.1/pservers-grad-08-b-ref.png      | Bin 38874 -> 38874 bytes
 12 files changed, 0 insertions(+), 0 deletions(-)

commit c70000117fb6e7dabdb77c1c8cc1067add7da6d9
Author: Massimo <sixtysix@inwind.it>
Date:   Wed Aug 30 09:55:48 2017 -0500

    bgo#587721: Update the PangoLayout for the new matrix before rendering
    
    If the cairo_t's transformation changes between the time the
    PangoLayout is created and the time it is shown, one needs to
    pango_cairo_update_layout() first.

 rsvg-cairo-draw.c                                     |   4 ++++
 .../reftests/bugs/587721-text-transform-ref.png       | Bin 0 -> 3910 bytes
 .../fixtures/reftests/bugs/587721-text-transform.svg  |  13 +++++++++++++
 .../reftests/bugs/777834-empty-text-children-ref.png  | Bin 9653 -> 9386 bytes
 4 files changed, 17 insertions(+)

commit 6c3bccd588571c102003fcc2dca67a01623f04e6
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 29 15:15:01 2017 -0500

    Oops, sort the list of supported SVG features so <switch> works
    
    We use the list of supported features with bsearch(), and the list
    was not sorted.
    
    Added struct-cond-03-t.svg from the SVG test suite to this effect.
    The reference PNG is different from the official test suite's original
    one, because we do NOT support the SVG DOM feature.  Still, the test
    file lets us test for <switch> working based on supported feature names.

 rsvg-cond.c                                        |   7 +-
 .../reftests/svg1.1/struct-cond-03-t-ref.png       | Bin 0 -> 4433 bytes
 .../fixtures/reftests/svg1.1/struct-cond-03-t.svg  |  83 +++++++++++++++++++++
 3 files changed, 87 insertions(+), 3 deletions(-)

commit 86bb7e1e43312314ca53417b85df7f6667dfa78a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 29 09:19:41 2017 -0500

    bgo#785276: Don't crash on empty or single-byte files
    
    Sigh...
    
    We also modify tests/crash.c to test for this condition, and add a
    couple of new tests.

 rsvg-base.c                                | 11 ++++++++++-
 tests/crash.c                              | 12 ++++++++----
 tests/fixtures/crash/785276-empty.svg      |  0
 tests/fixtures/crash/785276-short-file.svg |  1 +
 4 files changed, 19 insertions(+), 5 deletions(-)

commit 4b67fb5d7690419d1b2f97c380f6245b81d4604a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 29 08:50:22 2017 -0500

    Add struct-cond-01-t.svg from the SVG test suite
    
    This is a basic test for the <switch> element that uses an unsupported
    extension name in the requiredExtensions attribute.

 .../reftests/svg1.1/struct-cond-01-t-ref.png       | Bin 0 -> 4498 bytes
 .../fixtures/reftests/svg1.1/struct-cond-01-t.svg  |  61 +++++++++++++++++++++
 2 files changed, 61 insertions(+)

commit d38cb2e3de1a5a23e14e9ea5d0f788cab3511088
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 29 08:48:08 2017 -0500

    bgo#634514: Don't render unknown elements and their sub-elements
    
    We were representing unknown elements as a NodeGroup, so their
    children would be rendered.
    
    Now we represent them as NodeDefs.  This is like a NodeGroup, but it
    doesn't do any rendering of itself or its children.  The SVG spec says
    that we should stop rendering the file if we encounter an unknown
    element, but it seems that real-world renderers are more lenient - so
    we'll just not render unknown elements and their children.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=634514

 rsvg-base.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

commit 40a049cee1705e768d43d67d6dfc4bcda0be0098
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 29 08:27:18 2017 -0500

    PathBuilder: use LargeArc and Sweep types instead of plain booleans
    
    This makes it easier to see what the arguments PathBuilder::arc() are about.

 rust/src/path_builder.rs | 27 ++++++++++++++++++++-------
 rust/src/path_parser.rs  | 11 +++++++++--
 rust/src/shapes.rs       |  8 ++++----
 3 files changed, 33 insertions(+), 13 deletions(-)

commit 95355f7f0ab0cb1ad0313bbf7a93d0e403c5810e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 22 20:50:50 2017 -0500

    PathCommand: derive PartialEq so we can remove a custom comparison function

 rust/src/path_builder.rs |  3 ++-
 rust/src/path_parser.rs  | 66 ++----------------------------------------------
 2 files changed, 4 insertions(+), 65 deletions(-)

commit 177b7401265c1adfd6a973067ded31f17ffb3fe2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 22 20:33:08 2017 -0500

    Switch from cairo::PathSegment to our own PathCommand throughout

 rust/src/marker.rs       | 12 ++++++------
 rust/src/path_builder.rs | 28 ++++++++++++++--------------
 rust/src/path_parser.rs  | 44 ++++++++++++++++++++++----------------------
 3 files changed, 42 insertions(+), 42 deletions(-)

commit d7aff34d2fa7e5b6c059b049b9f50ed858949ebc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 2 12:15:52 2017 -0600

    path_builder.rs: Declare a PathCommand enum
    
    We will move PathBuilder from storing cairo::PathSegment directly, to
    storing its own PathCommand.  This will be an enum similar to Cairo's,
    but that can also store SVG's Arc command, and possibly SVG's quadratic
    Béziers, too.
    
    Currently, when adding markers to a path, we have unwanted markers in
    the middle of arcs, as they get exploded into Bézier curve segments.  By
    having our own Arc PathCommand, we can defer the arc-to-Béziers step
    until we finally feed the PathBuilder into Cairo.
    
    This should also make it possible to have tests for parsing Arc
    commands; currently there are none.

 rust/src/path_builder.rs | 7 +++++++
 1 file changed, 7 insertions(+)

commit 29dce41359437df138bda8ddb1971dbfbe8b4187
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 22 20:41:03 2017 -0500

    Require lalrpop 0.13.1 - now we can build on Rust nightly as well

 rust/Cargo.lock | 189 +++++++++++++++++++++-----------------------------------
 rust/Cargo.toml |   4 +-
 2 files changed, 73 insertions(+), 120 deletions(-)

commit 1ef560fef2c41686fa7ff165c038b12978327102
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Aug 21 14:30:41 2017 -0500

    Update to the released cairo-rs 0.2.0
    
    Yay!

 rust/Cargo.lock | 50 +++++++++++++++++++++++++-------------------------
 rust/Cargo.toml | 20 ++++++++++++--------
 2 files changed, 37 insertions(+), 33 deletions(-)

commit caf234cf0453cc9a1b1ad9144562c2f0f309c79f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Aug 17 15:23:16 2017 -0500

    bgo#786372 - In the style element, the type attribute should default to "text/css"
    
    Per https://www.w3.org/TR/SVG/styling.html#StyleElementTypeAttribute ,
    if a <style> element doesn't specify a "type" attribute, then it
    should be as if type="text/css".  We should really pick up that value
    from the svg element's contentStyleType, but we don't read that yet.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=786372

 rsvg-base.c                                              |  15 ++++++++++++++-
 .../reftests/bugs/786372-default-style-type-ref.png      | Bin 0 -> 287 bytes
 .../fixtures/reftests/bugs/786372-default-style-type.svg |   1 +
 3 files changed, 15 insertions(+), 1 deletion(-)

commit 7e5384590b8ff1a6d5d693365059165adf60330f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Aug 11 18:55:17 2017 -0500

    rsvg_handle_get_position_sub(): test for the presence of a toplevel node as soon as possible

 rsvg-base.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

commit 747eb2c49e7a39314492bd0e628c16ccca633235
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Aug 11 18:30:20 2017 -0500

    rsvg_standard_element_start(): Remove unnecessary check
    
    No creator function should ever return a NULL node, so assert that and
    remove the check.
    
    For elements of unknown type, we already turn them into groups in
    get_node_creator_for_element_name().

 rsvg-base.c | 29 ++++++++++++++---------------
 1 file changed, 14 insertions(+), 15 deletions(-)

commit 46c8688aa1795958fb1308c2bf5ea29295fe6c23
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Fri Mar 3 15:19:42 2017 +0800

    build: Check for PangoFT2/FontConfig availability
    
    On Windows the GTK+ stack does not hard depend on PangoFT2 (thus
    Fontconfig--GTK+ uses PangoWin32 to do the Font discovery and
    configuration stuff by default, unless one uses an envvar to force
    PangoFT2 usage), unlike *NIX platforms, so we need to check for
    it by doing:
    
    -On Windows, enable the test code that uses PangoFT2/FontConfig if
     PangoFT2 and FontConfig is found during configure.  On Visual Studio
     builds, this is set to be disabled in config.h.win32(.in), and can be
     manually enabled by uncommenting #define HAVE_PANGOFT2 1 in
     config.h.win32 prior to the build (or rebuild).  This continues to have
     FontConfig and PangoFT2 to act as an optional dependency.
    
    -On non-Windows platforms, make PangoFT2 and FontConfig a hard dependency,
     which is what the current code assumes.
    
    We might probably need to make the custom TTF load via PangoWin32 and/or
    the native Windows API to run the tests when PangoFT2 and FontConfig are
    not found on Windows.
    
    Also bump the Pango dependency to 1.38 as the test code uses API that is
    introduced in 1.38.x.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=779405

 config.h.win32.in   |  3 +++
 configure.ac        | 19 ++++++++++++++++++-
 rsvg-cairo-clip.c   |  2 ++
 rsvg-cairo-draw.c   | 12 +++++++++++-
 rsvg-cairo-render.c |  7 +++++++
 rsvg-cairo-render.h |  5 +++++
 6 files changed, 46 insertions(+), 2 deletions(-)

commit 8a93c3d192510eac4ff38a24194e1eb2ed2dc412
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 8 17:23:17 2017 -0500

    Update NEWS

 NEWS | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

commit 31b6af3ce820d4f1b652ea72f8a0d9476c1f2937
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 8 13:19:06 2017 -0500

    rsvg_handle_dispose(): Free the libxml2 parser context
    
    If the RsvgHandle was written to but not closed, then we'll still have
    an XML parser context at dispose time - don't leak it.
    
    Fixes the leak in https://bugzilla.gnome.org/show_bug.cgi?id=777833#c2

 rsvg-base.c    | 4 ++--
 rsvg-gobject.c | 2 ++
 2 files changed, 4 insertions(+), 2 deletions(-)

commit 88c63cf76ed9a6fb0fbed8ad3c794ff81fad101b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 8 13:08:41 2017 -0500

    RsvgHandle: use a state field instead of finished/is_closed/first_write flags
    
    This makes it easier to see, well, which reading state we are in.

 rsvg-base.c         | 39 ++++++++++++++++++++++++++++-----------
 rsvg-cairo-render.c |  2 +-
 rsvg-gobject.c      |  3 +--
 rsvg-private.h      | 14 ++++++++++----
 rsvg.c              |  2 +-
 5 files changed, 41 insertions(+), 19 deletions(-)

commit fe78b716ab4780056a11402cad109446acb0ac70
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 8 10:32:39 2017 -0500

    rsvg-base.c: Use rsvg_free_xml_parser_and_doc() throughout

 rsvg-base.c | 25 ++++++-------------------
 1 file changed, 6 insertions(+), 19 deletions(-)

commit 27449ad35391e7b03a29c1579a751a682222bcb1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 8 10:23:04 2017 -0500

    rsvg_free_xml_parser_and_doc(): New function; we'll use it instead of freeing things by hand
    
    libxml2's xmlFreeParserCtxt(c) does not free the underlying c->myDoc;
    that needs to be freed separately.  We are forgetting to do that in a
    couple of places, so rsvg_free_xml_parser_and_doc() will take care of
    that in a single place.
    
    http://xmlsoft.org/html/libxml-parser.html#xmlFreeParserCtxt

 rsvg-base.c    | 20 ++++++++++++++++++++
 rsvg-private.h |  3 +++
 2 files changed, 23 insertions(+)

commit fbdcc506d95aa74c27ab7299f70d072d527d0313
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 8 09:49:54 2017 -0500

    rsvg-gobject.c: Use FALSE, not 0

 rsvg-gobject.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 712ec1f7a261287d15491de401188a9c60924cca
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Aug 8 09:49:06 2017 -0500

    rsvg-gobject.c: Tighten an assertion

 rsvg-gobject.c | 2 ++
 1 file changed, 2 insertions(+)

commit 717595e7333df1a2d8f2514f1761cafae432cd6b
Author: Philip Withnall <withnall@endlessm.com>
Date:   Fri Jan 27 14:06:18 2017 +0000

    tools: Fix a minor memory leak of command line arguments
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777833

 tools/rsvg-tools-main.c | 1 +
 1 file changed, 1 insertion(+)

commit 63f008bd20df3bd3379c8e17ff244b10c91859de
Author: Philip Withnall <withnall@endlessm.com>
Date:   Fri Jan 27 14:02:11 2017 +0000

    tools: Fix an incorrect g_new() call
    
    It was allocating an array of guint8 pointers, rather than an array of
    guint8s. This resulted in an allocation 4 times too large, which is a
    bug, but not one which would cause crashes.
    
    Coverity ID: 1398303
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777833

 tools/rsvg-tools-main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit dfe34c8757debd07d4ef2f6f0381b2bcac1addc0
Author: Ting-Wei Lan <lantw44@gmail.com>
Date:   Mon Aug 7 21:43:10 2017 -0500

    bgo#782098 - Don't pass deprecated --nogtkinit to gtkdoc-scangobj

 doc/Makefile.am | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit 58e4b44053272770a2d6434d89e05dc80e096605
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Aug 7 13:43:59 2017 -0500

    Update Cargo.lock

 rust/Cargo.lock | 34 +++++++++++++++++-----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

commit 344a1c1c63e194b218cf82474ec5684345fa2cda
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Aug 7 11:19:28 2017 -0500

    bgo#779489 - Link to pangoft2 as well
    
    The link was failing on MacOS, since apparently pangoft2 is not linked
    in there by default.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=779489

 configure.ac | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

commit 951555887a5b03280d04c17b8f85a3490bd6f0f3
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jul 31 16:45:56 2017 -0500

    De-reference Parser's tokens when matching, for legibility

 rust/src/length.rs  | 18 +++++++++---------
 rust/src/opacity.rs |  8 ++++----
 rust/src/parsers.rs | 10 +++++-----
 3 files changed, 18 insertions(+), 18 deletions(-)

commit 47895f00461271271e6c668c259d87ea3160f777
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jul 31 13:06:16 2017 -0500

    Remove unused imports

 rust/src/bbox.rs | 1 -
 1 file changed, 1 deletion(-)

commit 4b90afa0c8909f1e27166b3c4a120ff1d989cd8d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jul 31 13:05:47 2017 -0500

    Refactor some more to avoid Ok() all over the place

 rust/src/parsers.rs | 39 +++++++++++++++++++++------------------
 1 file changed, 21 insertions(+), 18 deletions(-)

commit e4a3aeb00fd10a13b4d5ad2b58b46f383219e8fc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jul 31 13:02:39 2017 -0500

    opacity.rs: Refactor to not have Ok() all over the place

 rust/src/opacity.rs | 56 +++++++++++++++++++++++++++++------------------------
 1 file changed, 31 insertions(+), 25 deletions(-)

commit 829b3281d9b927cfdc3db3a7133424b6be6be5ac
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jul 31 12:57:01 2017 -0500

    length.rs: Refactor parser to not have Ok() all over the place

 rust/src/length.rs | 107 +++++++++++++++++++++++++++--------------------------
 1 file changed, 54 insertions(+), 53 deletions(-)

commit df0ecd978cc21c1dd3cc03eecde7efd9fc066542
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jul 31 12:51:50 2017 -0500

    Adjust for rust-cssparser API changes

 rust/src/length.rs  | 20 +++++++++++---------
 rust/src/opacity.rs |  4 ++--
 rust/src/parsers.rs |  6 +++---
 3 files changed, 16 insertions(+), 14 deletions(-)

commit 35089d4c5c415b0a133f5298cdd8c2d35dd039cb
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jul 31 12:44:41 2017 -0500

    Cargo.toml: Explicitly use the master branch of cairo-rs and friends
    
    ... because it hasn't made a release yet that includes
    Matrix::try_invert() nor the Debug/PartialEq traits for Matrix

 rust/Cargo.lock | 57 +++++++++++++++++++++++----------------------------------
 rust/Cargo.toml | 24 ++++++++++++++++--------
 2 files changed, 39 insertions(+), 42 deletions(-)

commit 7066c9cd028e9a946dee4963d362cc6bdef33c52
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jul 31 12:24:33 2017 -0500

    Adjust to rust-cssparser API changes

 rust/src/color.rs   |  3 ++-
 rust/src/length.rs  | 15 ++++++++-------
 rust/src/opacity.rs |  9 +++++----
 rust/src/parsers.rs | 26 +++++++++++++++-----------
 4 files changed, 30 insertions(+), 23 deletions(-)

commit 89e84d9788e100784dc7f9a9f32286a545b95820
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jul 31 12:11:17 2017 -0500

    Update to cairo-rs changes

 rust/Cargo.lock                  | 92 ++++++----------------------------------
 rust/Cargo.toml                  |  4 +-
 rust/src/bbox.rs                 |  4 +-
 rust/src/gradient.rs             |  3 +-
 rust/src/marker.rs               |  3 +-
 rust/src/parse_transform.lalrpop |  3 +-
 rust/src/pattern.rs              | 15 +++----
 rust/src/structure.rs            |  3 +-
 rust/src/transform.rs            |  4 +-
 9 files changed, 36 insertions(+), 95 deletions(-)

commit 67031d6646f299486dbdb4924588495d23d84566
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jul 31 11:07:59 2017 -0500

    aspect_ratio.rs: Update to the macro syntax in bitflags 0.9.1

 rust/Cargo.toml          |  2 +-
 rust/src/aspect_ratio.rs | 24 ++++++++++++------------
 2 files changed, 13 insertions(+), 13 deletions(-)

commit a268072facb45c56492af9167e97e9e26a420212
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jul 31 11:04:35 2017 -0500

    Cargo.toml: Move other crates to crates.io

 rust/Cargo.lock | 32 ++++++++++++++++++++++----------
 rust/Cargo.toml |  6 ++----
 2 files changed, 24 insertions(+), 14 deletions(-)

commit 2473df014aed6082cad10156240bbe3f3501ffb9
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jul 31 10:57:42 2017 -0500

    Cargo.toml: make more compact; use crates.io

 rust/Cargo.lock | 304 ++++++++++++++++++++++++++++++++++++--------------------
 rust/Cargo.toml |  32 ++----
 2 files changed, 206 insertions(+), 130 deletions(-)

commit dc2986f1dc73cad8d0e579f76200e03fc57b1390
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jul 31 10:25:18 2017 -0500

    Cargo.toml: Use the upstream cairo-rs now that Matrix::try_invert() is merged

 rust/Cargo.toml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

commit 73bd77fd9bb9f1581ec29c38646d35392a91d31e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jul 21 18:39:39 2017 -0500

    path_parser.rs: Use a shorter name for the declared lifetime of the chars_enumerator

 rust/src/path_parser.rs | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

commit 1bf93897ba40058c94d17883c4555a150d32ec72
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Jul 20 20:41:53 2017 -0500

    Remove the nom dependency.  So long, and thanks for all the fish.

 rust/Cargo.lock | 7 -------
 rust/Cargo.toml | 5 -----
 rust/src/lib.rs | 2 --
 3 files changed, 14 deletions(-)

commit 7fecfb8644276900fc536823701e489a88662b3a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Jul 20 20:39:16 2017 -0500

    parsers::list_of_points() - Implement with cssparser instead of nom

 rust/src/parsers.rs | 163 ++++++++--------------------------------------------
 1 file changed, 25 insertions(+), 138 deletions(-)

commit c41b703beb1a429aeafeec71bbdd00f300a1636d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Jul 20 15:10:27 2017 -0500

    RsvgViewBox::from_str(): Implement in terms of parsers::number_list()
    
    The syntax is the same.

 rust/src/parsers.rs | 39 +++++----------------------------------
 rust/src/viewbox.rs | 43 ++++++++++++++++++++++++-------------------
 2 files changed, 29 insertions(+), 53 deletions(-)

commit 03b2fb6e379d99b0094de58ef131e64c1835950b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Jul 20 14:05:54 2017 -0500

    property_bag::parse_or_none() doesn't need T to implement Default
    
    Only parse_or_default() does.

 rust/src/property_bag.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit b1dd396128ff6e6e7896cbb9a3f23a574c4f689e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Jul 19 16:45:18 2017 -0500

    parsers::angle_degrees(): Implement with rust-cssparser instead of nom

 rust/src/parsers.rs | 48 +++++++++++++++++-------------------------------
 1 file changed, 17 insertions(+), 31 deletions(-)

commit 0bd5b447f6367da8cea9c62ef6c55646ce150d84
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Jul 19 16:35:49 2017 -0500

    length.rs: Implement Length::parse() with rust-cssparser, not with nom

 rust/src/length.rs | 49 +++++++++++++++++++++++++++++++------------------
 1 file changed, 31 insertions(+), 18 deletions(-)

commit 10711bb1a54f6f772b468c214e92b6fd0ede81a9
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Jul 19 13:45:39 2017 -0500

    parsers: Test that number_and_units() can parse percentages and units beginning with "e"

 rust/src/parsers.rs | 2 ++
 1 file changed, 2 insertions(+)

commit 401c323270f307be0774780f85db605921929f96
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Jul 19 13:37:01 2017 -0500

    parsers::view_box() - Deal in &str and Result, not in &[u8] and nom::IResult

 rust/src/parsers.rs | 20 ++++++++++----------
 rust/src/viewbox.rs |  6 +++---
 2 files changed, 13 insertions(+), 13 deletions(-)

commit e52741e768bf2e1df0d27fa85f3a74917c943a92
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Jul 19 13:12:50 2017 -0500

    parsers::coordinate_pair() - This doesn't need to be public

 rust/src/parsers.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit b52da5b626f57426b454cfba60cc8ce9e7497eb4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Jul 19 13:11:29 2017 -0500

    parsers::number_and_units() - Deal in &str and plain Result, not &[u8] and nom::IResult

 rust/src/length.rs  | 58 ++++++++++++++++++++++++++---------------------------
 rust/src/parsers.rs | 24 +++++++++++++---------
 2 files changed, 44 insertions(+), 38 deletions(-)

commit c354bf77ad484884500be707ddd894e0a2ae78c7
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Jul 19 12:10:30 2017 -0500

    parsers::list_of_points() - take a &str, not a &[u8]
    
    We'll move away from nom, to reduce the number of parsing libraries.

 rust/src/parsers.rs | 20 ++++++++++----------
 rust/src/shapes.rs  |  2 +-
 2 files changed, 11 insertions(+), 11 deletions(-)

commit cc2793c92e7eae3bab215bd12a47e4d40c203c86
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jul 14 11:41:21 2017 -0500

    tests/README.md: Fix the markup a bit

 tests/README.md | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

commit a90065a189370fce2cae6051b5000f270f34ad0c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jul 14 11:34:43 2017 -0500

    Makefile.am: Oops, add rust/build.rs to the sources

 Makefile.am | 1 +
 1 file changed, 1 insertion(+)

commit 9dbe4e2175e9ba858358b2d11115a094531b80bb
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jul 14 11:10:13 2017 -0500

    coords-viewattr-01-b.svg - New test for the preserveAspectRatio attribute
    
    Sigh, we should have had this from the beginning.  No wonder the
    tests didn't catch the bug from the previous commit.

 .../reftests/svg1.1/coords-viewattr-01-b-ref.png   | Bin 0 -> 16515 bytes
 .../reftests/svg1.1/coords-viewattr-01-b.svg       | 140 +++++++++++++++++++++
 2 files changed, 140 insertions(+)

commit d8ab3534c3ce407fd0db09df611a84636d84ad14
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jul 14 10:54:23 2017 -0500

    aspect_ratio.rs: Sigh, use the correct capitalization for xMinYMin et al
    
    I copied the constant names incorrectly as XminYmin; the correct case in
    the SVG spec is xMinYMin and similarly for the others.
    
    Fuck camelCase.

 rust/src/aspect_ratio.rs | 80 ++++++++++++++++++++++++------------------------
 1 file changed, 40 insertions(+), 40 deletions(-)

commit 762d570ac599a001b6ba23110fc0789546f48770
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jul 7 11:42:35 2017 -0500

    rsvg-filter: Deal with errors in all callers to rsvg_filter_get_result()

 rsvg-filter.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

commit d4587391cf11915fc6129aeaaf5d013292fa0d4b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jul 7 11:38:56 2017 -0500

    rsvg-filter: Return NULL for invalid surfaces in rsvg_filter_get_{result,in}()

 rsvg-filter.c | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

commit 1910a0e0f77aa344a344758c15e83142dd30da4e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jul 7 11:29:04 2017 -0500

    feGaussianBlur: Don't try to blur an invalid surface
    
    This is a stop-gap measure to deal with invalid surfaces being fed
    to this filter.  We get a surface which is not in
    CAIRO_STATUS_SUCCESS, and so its width/height are 0.
    
    In reality we should be able to bubble up errors from
    cairo_*_surface_create(), but we don't do that yet.

 rsvg-filter.c | 5 +++++
 1 file changed, 5 insertions(+)

commit 6a94a7aa4f722bd08f7b677900d0329309ed029f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Jul 6 13:02:03 2017 -0500

    feTile: don't divide by zero if the input surface has empty bounds
    
    Thanks to Stefan Cornelius <scorneli@redhat.com> for the test file.

 rsvg-filter.c | 5 +++++
 1 file changed, 5 insertions(+)

commit ecf9267a24b2c3c0cd211dbdfa9ef2232511972a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jun 27 17:12:51 2017 -0500

    bgo#783835 - Don't divide by zero in box_blur_line() for gaussian blurs
    
    We were making the decision to use box blurs, instead of a true
    Gaussian kernel, based on the size of *both* x and y dimensions.  Do
    them individually instead.

 rsvg-filter.c | 29 ++++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

commit 818ad22366e2f1337077cee65151aef120ee77df
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jun 27 09:40:37 2017 -0500

    feConvolveMatrix: Use an enum for edgeMode, not ints

 rsvg-filter.c | 42 +++++++++++++++++++++++++++++-------------
 1 file changed, 29 insertions(+), 13 deletions(-)

commit 77e296fd852597359bfc973e0778269132474072
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jun 26 21:03:37 2017 -0500

    Move README to README.md and mark it up a bit

 README => README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

commit a7e1953a343459762f362a069b6024567c8dda06
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jun 26 21:01:28 2017 -0500

    Add a CONTRIBUTING.md in preparation for gitlab.gnome.org

 CONTRIBUTING.md | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 README          | 14 ++---------
 2 files changed, 79 insertions(+), 12 deletions(-)

commit 375836db1a49e0940d9e326e6932d176d542a216
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Jun 22 13:28:42 2017 -0500

    rsvg-convert.1 - Remove references to Sourceforge

 rsvg-convert.1 | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit 828e959ea6f85be5ebbb562e9bbd60c4e40e7e52
Merge: 23fb47e facef14
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jun 20 18:01:37 2017 -0500

    Merge remote-tracking branch 'origin/master'

commit 23fb47e93335ce885187be7fcc0e884c8c5bfc7e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jun 20 18:00:24 2017 -0500

    rsvg_css_parse_number_list(): Copy the array with copy_from_slice(), not manually

 rust/src/parsers.rs | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

commit dc4756378535d5db3b9c0a07deb607b0f71bcd70
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jun 20 11:02:08 2017 -0500

    Move rsvg_css_parse_number_list() completely to Rust.  Yay!
    
    Unfortunately there is no to_glib_full() for arrays of doubles.  We call
    g_malloc_n() by hand to create an array that C can consume, and fill it
    with the values that we parsed.

 rsvg-css.c          | 38 -------------------------------
 rsvg-css.h          |  3 ++-
 rust/src/lib.rs     |  1 +
 rust/src/parsers.rs | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 4 files changed, 67 insertions(+), 40 deletions(-)

commit 6e1b205de44673e6bd3acb28d3eb1422f46424bc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jun 20 10:36:32 2017 -0500

    Little update to NEWS

 NEWS | 4 ++++
 1 file changed, 4 insertions(+)

commit 78bb1392d3b45ca7ace11aa5de097e4c4d8dd446
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jun 20 09:25:48 2017 -0500

    Make rsvg_css_parse_number_list() correspond to the Rust version
    
    And start turning the callers into using the new API.
    
    Also, this actually makes feConvolveMatrix be rendered.  Apparently they
    weren't working at all before?

 rsvg-css.c    | 25 ++++++++++++++-------
 rsvg-css.h    | 14 +++++++++++-
 rsvg-filter.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++-------------
 3 files changed, 87 insertions(+), 24 deletions(-)

commit 35cca0035a6c75b258e2f4cdc0968d68557d8d50
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jun 19 20:29:08 2017 -0500

    parsers.rs: Add tests for garbage in number lists

 rust/src/parsers.rs | 6 ++++++
 1 file changed, 6 insertions(+)

commit f70d5ea50cb726970cf7b6e5215f09cf2cd37732
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Sat Jun 17 13:11:31 2017 -0500

    parsers::number_list() - New function to replace rsvg_css_parse_number_list()

 rust/src/parsers.rs | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)

commit facef142477c7e13b773254bc7ace683c8096ea5
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Thu Jun 15 20:16:43 2017 +0800

    win32/rsvg-rust.mak: Streamline Rust build process
    
    As the recommended way to setup Rust is via rustup, set the default
    toolchain/target during the NMake build process, so that one will only
    need to have the Rust executables in their PATH and ensure that they
    have the needed toolchains (i686-pc-windows-msvc and/or
    x86_64-pc-windows-msvc) installed via rustup.
    
    Please note that we are being conservative here-we use the stable
    releases of the toolchains only.  If using a beta/nightly toolchain
    release, one needs to update this file for this purpose.

 win32/rsvg-rust.mak | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

commit fd1be778fe90ff5e4c47d8074ee1f44fba7d8e01
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Tue May 9 18:17:29 2017 -0700

    win32/replace.py: Fix replacing items in files with UTF-8 content
    
    Some files that this script will process might have UTF-8 items in
    there, which can cause problems on Python 3.x as it is more strict and
    careful on unicode issues.  Fix this by:
    
    -Doing what we did before on Python 2.x
    -Opening the file with encoding='utf-8' on Python 3.x

 win32/replace.py | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

commit f4a6ccbc54eb8a1f91fb22ea08754f4076e4db1f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jun 13 09:09:08 2017 -0500

    Handle parse errors in all calls to rsvg_css_parse_number_optional_number()

 rsvg-filter.c | 41 +++++++++++++++++++++++++++++++----------
 1 file changed, 31 insertions(+), 10 deletions(-)

commit 2f8629e873cd68856714cedf95379fe60b927981
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jun 13 09:00:23 2017 -0500

    rsvg_css_parse_number_optional_number(): Move to Rust
    
    Also, make it return a gboolean for errors.

 rsvg-css.c          | 19 -------------------
 rsvg-css.h          |  4 +++-
 rust/src/lib.rs     |  4 ++++
 rust/src/parsers.rs | 33 +++++++++++++++++++++++++++++++++
 4 files changed, 40 insertions(+), 20 deletions(-)

commit 12ba8ba37f1e3f5655568889aa3a4e8ad24bd4fc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jun 13 08:51:14 2017 -0500

    transform.rs: Add missing 'extern'
    
    How did this work?

 rust/src/transform.rs | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

commit 0f77b0d160c4f601821b0f36c8bc2c6bd2ff3592
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jun 13 08:40:31 2017 -0500

    parsers::number_optional_number(): New parser
    
    https://www.w3.org/TR/SVG/types.html#DataTypeNumberOptionalNumber

 rust/src/parsers.rs | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

commit 32dd5e66f29a989b1b5df850941acb993260bb01
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jun 6 17:31:09 2017 -0500

    Gradient: Factor out method to add color stops from a Node

 rust/src/gradient.rs | 37 ++++++++++---------------------------
 1 file changed, 10 insertions(+), 27 deletions(-)

commit 7c991a72cecaed2e8252682f5b6e3c1b74694f61
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jun 6 17:16:44 2017 -0500

    gradient.rs: Fully move gradients to Rust.  Yay!
    
    We introduce NodeGradient, and move all the machinery to turn a node
    with children for color stops into our existing Gradient structure.

 rsvg-base.c          |   6 +-
 rsvg-cairo-draw.c    | 100 ++---------------
 rsvg-paint-server.c  | 181 ------------------------------
 rsvg-paint-server.h  |  78 +------------
 rust/src/gradient.rs | 312 +++++++++++++++++++++++++++------------------------
 rust/src/lib.rs      |   6 +-
 6 files changed, 186 insertions(+), 497 deletions(-)

commit 22d1459fd908cea9bf781acd8548355c740a4274
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Jun 5 10:38:32 2017 -0500

    PaintServerSpread: Use this instead of plain cairo::enums::Extend for gradients
    
    We define PaintServerSpread as a newtype on cairo::enums::Extend, so we
    can implement FromStr and Default for it.  This will let us parse the
    "spreadMethod" property in gradients with our usual machinery.

 rust/src/gradient.rs     | 12 ++++++------
 rust/src/paint_server.rs | 39 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+), 6 deletions(-)

commit 48f986a583f4a4d42c9db26c083c92ddf1f55cc2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jun 2 11:49:27 2017 -0500

    *.rs - get rid of unused imports

 rust/src/aspect_ratio.rs |  6 ++----
 rust/src/bbox.rs         |  6 +++---
 rust/src/drawing_ctx.rs  | 12 +++++-------
 rust/src/gradient.rs     | 11 ++++-------
 rust/src/length.rs       | 10 ++++------
 rust/src/lib.rs          | 16 ++++++++--------
 rust/src/marker.rs       | 11 ++++-------
 rust/src/node.rs         | 19 ++++++-------------
 rust/src/parsers.rs      |  3 +--
 rust/src/path_builder.rs | 17 +++++++++--------
 rust/src/path_parser.rs  |  2 --
 rust/src/pattern.rs      | 19 ++++++++-----------
 rust/src/property_bag.rs | 10 +++-------
 rust/src/shapes.rs       |  3 ++-
 rust/src/structure.rs    | 11 +++--------
 rust/src/transform.rs    | 14 ++++++--------
 rust/src/viewbox.rs      |  6 +++---
 17 files changed, 71 insertions(+), 105 deletions(-)

commit 4e7f5e1e8cc497e9293b6ff48181b276ee94ca89
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jun 2 11:01:50 2017 -0500

    pt.rs: Remove auxiliary file for parse_transform.lalrpop
    
    I didn't know that extern creates are conventionally defined in lib.rs,
    and used as "use ::some_extern_create" from actual modules.
    
    Lalrpop doesn't support "extern crate blah"; it assumes the conventional
    usage.

 Makefile.am                      | 1 -
 rust/src/lib.rs                  | 1 -
 rust/src/parse_transform.lalrpop | 4 ++--
 rust/src/pt.rs                   | 1 -
 4 files changed, 2 insertions(+), 5 deletions(-)

commit b09d893f0ac263454021d4a232f16611ac281daf
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jun 2 10:23:23 2017 -0500

    rsvg_state_inherit_run(): When inheriting stop_color, mark the presence of the new color
    
    This makes pservers-grad-18-b.svg pass again.
    
    It makes me nervous that *that* test breaks often, and we have no
    lower-level tests for that kind of gradient/stop inheritance.
    
    Hmm, do we need to do this for *all* the other properties, too?

 rsvg-styles.c | 2 ++
 1 file changed, 2 insertions(+)

commit 59bec0b08d30bb59976d7f2eb6e4277cdf23fb58
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jun 2 09:53:02 2017 -0500

    Move NodeStop over to Rust.  Yay!
    
    This reimplements gradient_add_color_stops_from_node() in Rust based on
    the old C code.

 rsvg-base.c          |   2 +-
 rsvg-cairo-draw.c    |  31 +-----------
 rsvg-paint-server.c  | 140 ---------------------------------------------------
 rsvg-paint-server.h  |  17 ++-----
 rust/src/gradient.rs |  31 ++++++++----
 rust/src/lib.rs      |   2 +-
 rust/src/node.rs     |   4 ++
 rust/src/stop.rs     |   4 +-
 8 files changed, 36 insertions(+), 195 deletions(-)

commit 660d55a5ebf2aa9324488f8e0e612b7ad60bdcf3
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jun 2 09:18:21 2017 -0500

    NodeStop: add get_offset() and get_rgba() functions

 rust/src/stop.rs | 8 ++++++++
 1 file changed, 8 insertions(+)

commit 6253c01b7693f311fd1283d4a1cd724ba7635c6a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed May 31 18:28:55 2017 -0500

    stop.rs: Start porting the gradient stop element to Rust

 Makefile.am      |   1 +
 rust/src/lib.rs  |   5 ++
 rust/src/stop.rs | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 175 insertions(+)

commit eafedf3c202e754fa4514e85c17d58497ba6796e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed May 31 16:22:42 2017 -0500

    drawing_ctx::state_get_current_color() - Promote the u32 result to a full Color value
    
    Although we don't support "inherit" as a value for the "color"
    property (i.e. what is used to specify currentColor), we'll support it
    later --- this is embodied in the Color structure.

 rust/src/color.rs       | 12 ++++++++++++
 rust/src/drawing_ctx.rs |  8 ++++----
 2 files changed, 16 insertions(+), 4 deletions(-)

commit 8b39e54bef7b1d40cf5d72bc04bce31382f59419
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed May 31 16:22:01 2017 -0500

    drawing_ctx::state_free() - Bind rsvg_state_free() for Rust

 rust/src/drawing_ctx.rs | 5 +++++
 1 file changed, 5 insertions(+)

commit b5c440e429db4aad7d9fa4f361fcc6c37abea4df
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed May 31 16:21:27 2017 -0500

    opacity_to_u8(): Make public

 rust/src/opacity.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 1d4643783c1facacfc4ba54a66b3701f36667fbe
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed May 31 16:20:18 2017 -0500

    Length: make the length and unit fields public
    
    We'll need to access them from the Rust code to validate things

 rust/src/length.rs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit f5bccefa472d63f56c26d9186d26a2daa7707dda
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed May 31 13:15:01 2017 -0500

    drawing_ctx::state_get_stop_opacity() - Analogous to ::state_get_stop_color()

 rust/src/drawing_ctx.rs | 13 +++++++++++++
 1 file changed, 13 insertions(+)

commit 8238741217495fa138279d14714a14dbce4bb62e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed May 31 13:12:10 2017 -0500

    Opacity::from_opacity_spec(): New function, to deal only in Result<Opacity, ...>
    
    Instead of dealing with OpacitySpec in the Rust code.  This is analogous
    to Color::from_color_spec().

 rust/src/opacity.rs | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

commit 0112a1e8a1cc50ebd601c22d8e08003f01aefe61
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed May 31 13:02:40 2017 -0500

    drawing_ctx::state_get_stop_color(): Return a Result<Color>, not a ColorSpec
    
    We want to use ColorSpec only for marshalling to/from C.  Inside the
    Rust code we only want to use a Color enum, and indicate a parse error
    thereof by a Result<Color, ...>.

 rust/src/drawing_ctx.rs | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

commit 4fa9b849994a11e0bf53528b19f8dac9373e520b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed May 31 12:59:14 2017 -0500

    Color::from_color_spec() - Turn a ColorSpec from C back into a Result<Color>
    
    We'll use this to think only in Rustic terms, instead of having to piece
    out a ColorSpec which can indicate a ParseError.

 rust/src/color.rs | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

commit b267dca3ca927a06a37fd02b13fd1820e8adfa1c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed May 31 12:58:18 2017 -0500

    rsvg_state_get_stop_opacity(): New function to expose this property to Rust

 rsvg-styles.c | 10 ++++++++++
 rsvg-styles.h |  3 +++
 2 files changed, 13 insertions(+)

commit edb8827d501b75d26e8098bc7899559f1b41fae3
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed May 31 09:41:11 2017 -0500

    Remove unused prototype

 rsvg-css.h | 2 --
 1 file changed, 2 deletions(-)

commit fd0f38b44436af67679335240e797e262b36aa4c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed May 31 08:26:47 2017 -0500

    rsvg_css_parse_opacity(): Move entirely to Rust. Yay!
    
    We also move RsvgOpacitySpec and RsvgOpacityKind to rsvg-css.h, to keep
    them together with RsvgColorSpec/Kind.

 Makefile.am         |  1 +
 rsvg-css.c          | 17 ------------
 rsvg-css.h          | 19 +++++++++++--
 rsvg-styles.c       | 54 ++++++++++++++++++++++++++++---------
 rsvg-styles.h       | 14 ----------
 rust/src/lib.rs     |  6 +++++
 rust/src/opacity.rs | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 7 files changed, 144 insertions(+), 45 deletions(-)

commit ba4c3a96d5ce797fbeb19ab00b52ce46a0112f87
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed May 31 07:32:37 2017 -0500

    StopOpacity: Rename to RsvgOpacitySpec
    
    To be consistent with RsvgColorSpec

 rsvg-paint-server.c |  8 ++++----
 rsvg-styles.c       |  8 ++++----
 rsvg-styles.h       | 14 +++++++-------
 3 files changed, 15 insertions(+), 15 deletions(-)

commit 32477f56bf930e2d2e69edadc16d2f9c76b81c4e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue May 30 19:43:30 2017 -0500

    opacity.rs: Implement an Opacity struct and a parser for it
    
    This can parse
    
      inherit | <number>

 rust/src/lib.rs     |  1 +
 rust/src/opacity.rs | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 90 insertions(+)

commit d644712c05ee2320403ca7cf6e726438355b602e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue May 30 16:32:01 2017 -0500

    StopOpacity: Turn into a struct; put both the "kind" enum and the actual opacity value here
    
    This makes the stop-opacity property be similar to the stop-color one.

 rsvg-paint-server.c |  8 ++++----
 rsvg-styles.c       | 11 +++++------
 rsvg-styles.h       | 15 ++++++++++-----
 3 files changed, 19 insertions(+), 15 deletions(-)

commit 37479d8adfee8675a0c308af6bf54260418b21b2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon May 29 19:17:38 2017 -0500

    rsvg_state_get_current_color(): Expose to Rust

 rsvg-styles.c           | 18 ++++++++++++++----
 rsvg-styles.h           |  3 +++
 rust/src/drawing_ctx.rs |  7 +++++++
 3 files changed, 24 insertions(+), 4 deletions(-)

commit 5c0a332f1af1db35a8e77d2232043268612f0613
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon May 29 19:11:21 2017 -0500

    rsvg_state_get_stop_color(): New helper function to expose state->stop_color to Rust

 rsvg-styles.c           |  9 +++++++++
 rsvg-styles.h           |  3 +++
 rust/src/drawing_ctx.rs | 14 ++++++++++++++
 3 files changed, 26 insertions(+)

commit 2f469fe4e3d262fff766aa0e6c73d57e8d1e09bb
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue May 30 10:26:13 2017 -0500

    Remove redundant STOP_OPACITY_UNSPECIFIED
    
    We use state->has_stop_opacity for that.
    
    I am really not liking the way rsvg_state_inherit_run() has the logic
    for whether a particular attribute is inherited or not.  This should be
    at the "stop" element level --- the attributes *are* cascaded as
    expected for other elements.

 rsvg-paint-server.c | 38 +++++++++++++++++++++++++-------------
 rsvg-styles.c       | 20 +++++++++++++++-----
 rsvg-styles.h       |  1 -
 3 files changed, 40 insertions(+), 19 deletions(-)

commit 863408e5af4a49b51835bbd0ca2a858c4dc143ae
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue May 30 08:48:01 2017 -0500

    StopColor: Remove unused enum

 rsvg-styles.h | 7 -------
 1 file changed, 7 deletions(-)

commit 8e25e05d2ef989bb0d6df6f8df4b3dd9843e8d31
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue May 30 08:26:21 2017 -0500

    rsvg_css_parse_vbox(): Remove unused function

 rsvg-css.c | 39 ---------------------------------------
 rsvg-css.h |  3 +--
 2 files changed, 1 insertion(+), 41 deletions(-)

commit 765512f7d8a456e6874092b86ef3df1219be8cd8
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon May 22 19:58:14 2017 -0500

    Make RsvgState.stop_color be an RsvgCssColorSpec; don't have an auxiliary StopColorMode anymore

 rsvg-paint-server.c | 54 ++++++++++++++++++++++++++++++++++++++---------------
 rsvg-styles.c       | 37 +++++-------------------------------
 rsvg-styles.h       |  5 ++---
 3 files changed, 46 insertions(+), 50 deletions(-)

commit 3cf93f386adb02806c5c0e4a1b88bd2aa7b36ad8
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon May 22 07:54:23 2017 -0500

    pattern.rs: Fully implement NodePattern in Rust. Yay!
    
    We had an auxiliary Pattern structure, which is what the patterns
    machinery used to resolve patterns at rendering time.  However, the SVG
    data for patterns was still being kept in the C code.  Now we have a
    Rust NodePattern, as expected, and the C code does not have any patterns
    machinery anymore (other than RsvgPaintServer's to actually call up the
    pattern.)

 rsvg-base.c         |   2 +-
 rsvg-cairo-draw.c   |  20 +----
 rsvg-paint-server.c | 116 --------------------------
 rsvg-paint-server.h |  48 +----------
 rust/src/lib.rs     |   4 +-
 rust/src/pattern.rs | 236 ++++++++++++++++++++++++++--------------------------
 6 files changed, 122 insertions(+), 304 deletions(-)

commit d0d393ffa0ce98b9dd86ccd428b385a0bfa8dba2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon May 22 07:50:41 2017 -0500

    structure.rs: Fix passing a dangling pointer (!)
    
    If we have "x: Option<String>", and try to pass a C string to a C
    function like
    
      some_c_func (x.map_or (ptr::null (), |s| String::to_glib_none (&s).0));
    
    Then some_c_func() gets a dangling pointer.  The Stash that glib-rs
    creates to store the temporary C string only has the lifetime of the
    closure, so by the time some_c_func() is called, the Stash has already
    been dropped.
    
    I understand that *that* happens; I don't understand why Rust lets us
    get away with it (maybe because we are just passing pointers around, and
    not ownership-tracked references?)
    
    This is the Valgrind log, FWIW:
    
                let class = property_bag::lookup (pbag, "class");
                let id = property_bag::lookup (pbag, "id");
    
                unsafe { rsvg_parse_style_attrs (handle,
                                                 raw_node,
                                                 str::to_glib_none ("svg").0,
                                                 class.map_or (ptr::null (), |s| String::to_glib_none (&s).0),
                                                 id.map_or (ptr::null (), |s| String::to_glib_none (&s).0),
                                                 pbag); }
    
    ==7321== Invalid read of size 1
    ==7321==    at 0x4C2F2A2: strlen (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==7321==    by 0x795DD89: vfprintf (in /lib64/libc-2.25.so)
    ==7321==    by 0x7A0F807: __vasprintf_chk (in /lib64/libc-2.25.so)
    ==7321==    by 0x6E294A8: g_vasprintf (in /usr/lib64/libglib-2.0.so.0.5200.1)
    ==7321==    by 0x6E03FBC: g_strdup_vprintf (in /usr/lib64/libglib-2.0.so.0.5200.1)
    ==7321==    by 0x6E04078: g_strdup_printf (in /usr/lib64/libglib-2.0.so.0.5200.1)
    ==7321==    by 0x4E76221: rsvg_parse_style_attrs (rsvg-styles.c:1493)
    ==7321==    by 0x4F45621: rsvg_internals::structure::rsvg_node_svg_apply_atts::_$u7b$$u7b$closure$u7d$$u7d$::hb7b2d3cd2f7c7d5d (structure.rs:561)
    ==7321==    by 0x4EDB68C: rsvg_internals::node::Node::with_impl::h88684eea38e6e1fd (node.rs:201)
    ==7321==    by 0x4F452D6: rsvg_node_svg_apply_atts (structure.rs:554)
    ==7321==    by 0x4E79BDE: rsvg_end_element (rsvg-base.c:847)
    ==7321==    by 0x57C676C: ??? (in /usr/lib64/libxml2.so.2.9.4)
    ==7321==  Address 0xc313360 is 0 bytes inside a block of size 9 free'd
    ==7321==    at 0x4C2D2DB: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==7321==    by 0x4EBB97C: alloc::heap::deallocate::h6e0d0f9d31bcfa2f (heap.rs:113)
    ==7321==    by 0x4EBBC3B: alloc::heap::box_free::h18dbd884648a8b49 (heap.rs:162)
    ==7321==    by 0x4EB41B2: drop::h4f84cb290e8a5854 (in /home/federico/src/librsvg-latest/.libs/librsvg-2.so.2.41.1)
    ==7321==    by 0x4E867F8: drop_contents::h929e7f93fb30bf14 (in /home/federico/src/librsvg-latest/.libs/librsvg-2.so.2.41.1)
    ==7321==    by 0x4EB4FD6: drop::h929e7f93fb30bf14 (in /home/federico/src/librsvg-latest/.libs/librsvg-2.so.2.41.1)
    ==7321==    by 0x4EB4B4C: drop::h78bf7138ba782926 (in /home/federico/src/librsvg-latest/.libs/librsvg-2.so.2.41.1)
    ==7321==    by 0x4F453E8: rsvg_internals::structure::rsvg_node_svg_apply_atts::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h66dfed3b9ec8f9dc (structure.rs:565)
    ==7321==    by 0x4E8F406: _$LT$core..option..Option$LT$T$GT$$GT$::map_or::h31e2639fe31ed744 (option.rs:404)
    ==7321==    by 0x4F455E9: rsvg_internals::structure::rsvg_node_svg_apply_atts::_$u7b$$u7b$closure$u7d$$u7d$::hb7b2d3cd2f7c7d5d (structure.rs:565)
    ==7321==    by 0x4EDB68C: rsvg_internals::node::Node::with_impl::h88684eea38e6e1fd (node.rs:201)
    ==7321==    by 0x4F452D6: rsvg_node_svg_apply_atts (structure.rs:554)
    ==7321==  Block was alloc'd at
    ==7321==    at 0x4C2E2CF: realloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==7321==    by 0x4FFBED1: reallocate (heap.rs:79)
    ==7321==    by 0x4FFBED1: reserve_exact<u8> (raw_vec.rs:319)
    ==7321==    by 0x4FFBED1: reserve_exact<u8> (vec.rs:479)
    ==7321==    by 0x4FFBED1: std::ffi::c_str::CString::from_vec_unchecked::hb6396f8c4a1f41e5 (c_str.rs:224)
    ==7321==    by 0x4FFBE61: std::ffi::c_str::CString::_new::h4d618af53b7229c0 (c_str.rs:201)
    ==7321==    by 0x4E98318: std::ffi::c_str::CString::new::h12e4003256bfa812 (c_str.rs:195)
    ==7321==    by 0x4E83989: _$LT$collections..string..String$u20$as$u20$glib..translate..ToGlibPtr$LT$$u27$a$C$$u20$$BP$const$u20$i8$GT$$GT$::to_glib_none::h5555f4a2685fe24b (translate.rs:360)
    ==7321==    by 0x4F453BB: rsvg_internals::structure::rsvg_node_svg_apply_atts::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h66dfed3b9ec8f9dc (structure.rs:565)
    ==7321==    by 0x4E8F406: _$LT$core..option..Option$LT$T$GT$$GT$::map_or::h31e2639fe31ed744 (option.rs:404)
    ==7321==    by 0x4F455E9: rsvg_internals::structure::rsvg_node_svg_apply_atts::_$u7b$$u7b$closure$u7d$$u7d$::hb7b2d3cd2f7c7d5d (structure.rs:565)
    ==7321==    by 0x4EDB68C: rsvg_internals::node::Node::with_impl::h88684eea38e6e1fd (node.rs:201)
    ==7321==    by 0x4F452D6: rsvg_node_svg_apply_atts (structure.rs:554)
    ==7321==    by 0x4E79BDE: rsvg_end_element (rsvg-base.c:847)
    ==7321==    by 0x57C676C: ??? (in /usr/lib64/libxml2.so.2.9.4)

 rust/src/structure.rs | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

commit 24d736b58569b4af756f0613c8785e418bc4b65d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon May 22 07:49:55 2017 -0500

    property_bag.rs: New function transform_or_none() to parse transformation matrixes

 rust/src/property_bag.rs | 13 +++++++++++++
 1 file changed, 13 insertions(+)

commit 39779313e9726af1ff6e806ae8df542906631b66
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri May 19 15:02:48 2017 -0500

    Cargo.toml: Turn on link-time optimizations in release mode
    
    Wow, this reduces the library size a lot!
    
    Thanks to Luke Nukem for the tip
    
    http://lukenukem.co.nz/gsoc/2017/05/16/gso_2.html

 rust/Cargo.toml | 3 +++
 1 file changed, 3 insertions(+)

commit 6f3a063a95bbee29886e54e5c38fba3c12951933
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri May 19 17:07:41 2017 -0500

    Makefile.am: Oops, put the target directory under rust
    
    Not directly under the toplevel

 Makefile.am | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

commit 7294c856b9f15f81e7ed95eb2302845032d8023b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri May 19 22:44:01 2017 -0500

    Fully move rsvg_css_parse_color() to Rust.  Yay!
    
    We keep a C function rsvg_css_parse_color_() that just calls the Rust
    one.  This is so that the linker will make the C symbol visible; this is
    the quirky function that gets exported just for the benefit of
    rsvg-convert.c.

 Makefile.am         |   1 +
 rsvg-convert.c      |  10 ++++-
 rsvg-css.c          | 123 +++-------------------------------------------------
 rsvg-css.h          |  34 ++++++++++++++-
 rsvg-filter.c       |  65 +++++++++++++++++++++++++--
 rsvg-paint-server.c |  70 +++++++++++++++++++++---------
 rsvg-styles.c       |  93 ++++++++++++++++++++++++++++++++-------
 7 files changed, 237 insertions(+), 159 deletions(-)

commit c45dd9f2519cc56fc8f57746605a881f2f939336
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri May 19 21:47:07 2017 -0500

    color.rs: Implement the new version of rsvg_css_parse_color() in Rust
    
    The prototype is different from what it was in C.  We'll change it
    so that instead of just returning a guint32 argb and the inherit
    flag (... which is used backwards, anyway), it will return an actual
    struct with all the possible cases.

 rust/src/color.rs | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 rust/src/lib.rs   |   8 ++++
 2 files changed, 123 insertions(+), 8 deletions(-)

commit 267e6f284380461da248b9898b82eeaaea956478
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri May 19 20:21:01 2017 -0500

    color.rs: Convert directly from cssparser's Result to our ColorSpec

 rust/Cargo.lock   |  22 +++++-----
 rust/Cargo.toml   |   3 +-
 rust/src/color.rs | 125 ++++++++++++++++--------------------------------------
 3 files changed, 48 insertions(+), 102 deletions(-)

commit 68f2eee9bbac7903b48cf729b2634d6c876cb001
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri May 19 19:53:57 2017 -0500

    color.rs: Declare ColorKind and ColorSpec that we can represent in C

 rust/src/color.rs | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 rust/src/lib.rs   |  3 +++
 2 files changed, 76 insertions(+)

commit a8f2ef109c71cdbec14b05dc07d1734866a93f8e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri May 19 18:56:16 2017 -0500

    Start using the servo/rust-cssparser crate to parse colors
    
    This is not wired to the real librsvg code yet; it's just a test of
    using that crate.

 rust/Cargo.lock   | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 rust/Cargo.toml   |   5 +++
 rust/src/color.rs |  69 +++++++++---------------------
 rust/src/lib.rs   |   2 +
 4 files changed, 150 insertions(+), 50 deletions(-)

commit 81bbfe8e5a9815bda2f63d694900021a3c3d8a80
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu May 18 13:13:18 2017 -0500

    RawColor: Add new_rgb() and new_argb() constructors to make callers nicer

 rust/src/color.rs | 65 +++++++++++++++++++++++++++++++++----------------------
 1 file changed, 39 insertions(+), 26 deletions(-)

commit 8f56c9048b057081005436f34dda206e55edca84
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu May 18 12:21:46 2017 -0500

    color.rs: Start a parser for color specifications
    
    We want to remove the C version of rsvg_css_parse_color().

 rust/src/color.rs | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 rust/src/lib.rs   |   1 +
 2 files changed, 102 insertions(+)

commit bce3987021fe503bfb620ac9c99b95e36f3476fd
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu May 18 07:07:49 2017 -0500

    Sanitize the indentation specifiers for Emacs/Vim
    
    Tabs are 8 spaces!
    
    Indentantion is 4 spaces!

 rsvg-base-file-util.c | 2 +-
 rsvg-base.c           | 2 +-
 rsvg-cairo-clip.c     | 4 ++--
 rsvg-cairo-clip.h     | 4 ++--
 rsvg-cairo-draw.c     | 4 ++--
 rsvg-cairo-draw.h     | 4 ++--
 rsvg-cairo-render.c   | 4 ++--
 rsvg-cairo-render.h   | 4 ++--
 rsvg-cairo.h          | 4 ++--
 rsvg-cond.c           | 4 ++--
 rsvg-convert.c        | 4 ++--
 rsvg-css.c            | 4 ++--
 rsvg-css.h            | 4 ++--
 rsvg-defs.c           | 4 ++--
 rsvg-defs.h           | 4 ++--
 rsvg-file-util.c      | 4 ++--
 rsvg-filter.c         | 4 ++--
 rsvg-filter.h         | 4 ++--
 rsvg-gobject.c        | 4 ++--
 rsvg-image.c          | 4 ++--
 rsvg-image.h          | 4 ++--
 rsvg-marker.h         | 4 ++--
 rsvg-mask.c           | 4 ++--
 rsvg-mask.h           | 4 ++--
 rsvg-paint-server.c   | 4 ++--
 rsvg-paint-server.h   | 4 ++--
 rsvg-path-builder.h   | 4 ++--
 rsvg-private.h        | 4 ++--
 rsvg-shapes.h         | 4 ++--
 rsvg-structure.h      | 4 ++--
 rsvg-styles.c         | 4 ++--
 rsvg-styles.h         | 4 ++--
 rsvg-text.c           | 4 ++--
 rsvg-text.h           | 4 ++--
 rsvg-view.c           | 4 ++--
 rsvg.c                | 4 ++--
 rsvg.h                | 4 ++--
 37 files changed, 72 insertions(+), 72 deletions(-)

commit 21720f56a7a960c10650a3ba3a983f2f305adb6d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed May 17 21:16:41 2017 -0500

    Replace g_new() with g_new0() throughout
    
    We should not have uninitialized memory!  I'm not confident
    that we are actually initializing every struct field by hand.

 rsvg-base.c         |  2 +-
 rsvg-cairo-draw.c   |  2 +-
 rsvg-cairo-render.c |  3 ++-
 rsvg-css.c          |  4 ++--
 rsvg-defs.c         |  2 +-
 rsvg-filter.c       | 14 +++++++-------
 rsvg-mask.c         |  2 +-
 rsvg-paint-server.c | 10 +++++-----
 rsvg-styles.c       | 10 +++++-----
 9 files changed, 25 insertions(+), 24 deletions(-)

commit 2b1c4020c51015b3d6508e7fb477314db7a25139
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue May 16 18:01:22 2017 -0500

    structure.rs: Completely move NodeUse, NodeSymbol to Rust
    
    rsvg-structure.c is no more.  Yay!

 Makefile.am           |   8 +-
 rsvg-base.c           |   4 +-
 rsvg-cairo-render.c   |   2 +-
 rsvg-defs.h           |   1 +
 rsvg-image.c          |   1 +
 rsvg-structure.c      | 240 --------------------------------------------------
 rsvg-structure.h      |  15 ++--
 rust/src/lib.rs       |   2 +
 rust/src/strtod.rs    | 174 ------------------------------------
 rust/src/structure.rs | 221 ++++++++++++++++++++++++++++++++++++++++++++++
 10 files changed, 240 insertions(+), 428 deletions(-)

commit 573a3ee75630936a8a0f91fb4757cf7af10708a2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue May 16 14:36:02 2017 -0500

    Export rsvg_state_has_overflow() to Rust

 rsvg-styles.c           | 5 +++++
 rsvg-styles.h           | 3 +++
 rust/src/drawing_ctx.rs | 5 +++++
 3 files changed, 13 insertions(+)

commit e050320825fe9572c431c7f79d3db41580f0e6b1
Author: Jeremy Bicha <jbicha@ubuntu.com>
Date:   Fri Apr 7 14:59:59 2017 -0500

    bgo#778666 - Use our own thumbnailer specification file
    
    GNOME 3.24 requires an external thumbnailer program, so define which
    MIME-types we support thumbnailing from within gdk-pixbuf-thumbnailer.
    The relevant commit in gnome-desktop is
    https://git.gnome.org/browse/gnome-desktop/commit/?id=b69fde6
    
    https://bugzilla.gnome.org/show_bug.cgi?id=778666

 gdk-pixbuf-loader/Makefile.am            | 9 +++++++++
 gdk-pixbuf-loader/librsvg.thumbnailer.in | 4 ++++
 2 files changed, 13 insertions(+)

commit 5acb65bb10a429fdfcf429255c3c3a0ce6f21ac1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Apr 26 16:39:44 2017 -0500

    property_bag.rs: Remove unused function

 rust/src/property_bag.rs | 5 -----
 1 file changed, 5 deletions(-)

commit 1d4fa99863d199f80b9c31b82b95dc2a50c21ccc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Apr 26 16:29:59 2017 -0500

    transform.rs: bool -> glib_sys::gboolean

 rust/src/transform.rs | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

commit fd8112168c88e2b84beecfbfd63e6180ed6d5478
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Apr 26 16:29:41 2017 -0500

    pattern.rs: bool -> glib_sys::gboolean

 rust/src/pattern.rs | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

commit 702d7c048556c484b1ecf14a0e2d28a69f326862
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Apr 26 16:12:56 2017 -0500

    Remove a bunch of unused rsvg_path_builder_*() functions
    
    All the callers are now in shapes.rs, so the functions exported from
    RsvgPathBuilder to C can be removed now.
    
    Also, remove rsvg_path_parser_from_str_into_builder() from the Rust
    code; it's also unused.

 rsvg-path-builder.h      | 37 ----------------------
 rust/src/lib.rs          | 11 -------
 rust/src/path_builder.rs | 80 ------------------------------------------------
 rust/src/path_parser.rs  | 16 ----------
 4 files changed, 144 deletions(-)

commit aeed2129bccc924e75d61a2f3c4271aea94ed42c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Apr 26 16:06:54 2017 -0500

    node.rs: bool -> glib_sys::gboolean

 rust/src/node.rs | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

commit 0e78607c59001ac42c33d4542f37d55c073ae211
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Apr 26 15:59:23 2017 -0500

    gradient.rs: bool -> glib_sys::gboolean

 rust/src/gradient.rs | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

commit 403683964947098a0dfc4fa6680605b26b73e66c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Apr 26 15:37:28 2017 -0500

    drawing_ctx.rs: Return values of gboolean map to glib_sys::gboolean, not bool

 rust/src/drawing_ctx.rs | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

commit 35042a16f2de1b8c146580e8d3741e4d58f0811f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Apr 26 15:37:04 2017 -0500

    bbox.rs: Use glib_sys::gboolean, not bool for repr(C) structs

 rust/Cargo.lock       |  1 +
 rust/Cargo.toml       |  4 ++++
 rust/src/bbox.rs      | 29 ++++++++++++++++---------
 rust/src/marker.rs    |  6 +++---
 rust/src/pattern.rs   |  2 +-
 rust/src/structure.rs |  2 +-
 rust/src/viewbox.rs   | 59 ++++++++++++++++++++++++++++++---------------------
 7 files changed, 64 insertions(+), 39 deletions(-)

commit 28227ae6decbac86efefc74ce2bffbbc2c34ddfd
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Apr 26 14:27:10 2017 -0500

    viewbox.rs: Use gboolean, not bool for field in a repr(C) struct
    
    See https://github.com/rust-lang/rfcs/issues/992 - bool in Rust does not
    repr(C) as any C type in particular.  I was naively assuming that it
    would repr(C) as int, which is equivalent to gboolean.
    
    This makes tests/fixtures/dimensions/bug612951.svg pass again.  We were
    calling rsvg_node_svg_get_view_box() and getting a garbage value inside
    vbox.active - the low byte actually set as expected, and the high bits
    set to garbage.

 rust/src/viewbox.rs | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

commit f11fd6c5ce55ea9fba831b47ab0a75178f87bd96
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Apr 21 21:32:44 2017 -0500

    Shorten filenames so tar can grok them, sigh

 ...sform-ref.png => 634324-blur-negative-transform-ref.png} | Bin
 ...ing-transform.svg => 634324-blur-negative-transform.svg} |   0
 2 files changed, 0 insertions(+), 0 deletions(-)

commit 3506ff8ab14dd47a3565b719aeffe76138fe8619
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Apr 18 11:29:10 2017 -0500

    Add test files for the previous commit

 ...aussian-blur-with-negative-scaling-transform-ref.png | Bin 0 -> 14003 bytes
 ...24-gaussian-blur-with-negative-scaling-transform.svg |  14 ++++++++++++++
 2 files changed, 14 insertions(+)

commit f7ccfbff857b5ec8d7ace494e20f28d97f1c91f1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Apr 18 11:22:18 2017 -0500

    bgo#634324 - Gaussian blur with negative-scaling transformation matrix is not rendered
    
    When we figure out the standard deviations for Gaussian blurs, we were
    simply multiplying the given values by the scaling factors in the current
    transformation.  But if this is a negative-scaling matrix, we'd get
    negative values, and we would not do a blur at all.
    
    Take the absolute value of the scaled factors instead.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=634324

 rsvg-filter.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

commit f7e0d256c9b07bd7c34b1bd213e50fd9481120ab
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Mar 31 14:05:05 2017 -0600

    Update .gitignore

 .gitignore | 3 +++
 1 file changed, 3 insertions(+)

commit 7c42644d1664a219c9f84dbbbf0551364e822ce5
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 30 10:48:13 2017 -0600

    parse_transform.lalrpop: Use a maybe_comma construct instead of Num2
    
    This makes the generated parser smaller.  Thanks to Niko Matsakis for the
    suggestions!

 rust/src/parse_transform.lalrpop | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)

commit fdbbca254e260d9089ed63336f6617c666ea14fb
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 18:11:47 2017 -0600

    Node: new function Node::is_ancestor()

 rust/src/node.rs | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

commit d1d11ffbec7ebae92f2e41f0effeece4f7f2faf5
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 16:02:19 2017 -0600

    NodeSvg: validate the width and height attributes

 rust/src/structure.rs | 29 +++++++++++++++++++++++++++--
 1 file changed, 27 insertions(+), 2 deletions(-)

commit 8962d89d0f08b0b32ad72b25dd6125d1819a5e0e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 16:01:35 2017 -0600

    Make NodeError::value_error() take two &str arguments, for convenience

 rust/src/error.rs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit 4ec908b71f9f19d0d37c98879188a72308c00433
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 15:18:27 2017 -0600

    Add struct-use-04-b.svg from the SVG 1.1 test suite
    
    This file modified to look for includes in the "resources" subdirectory.
    
    Also, rename the "images" directory to "resources", and modify
    rsvg-test.c to ignore that directory as well.  This is because
    struct-use-04-b.svg includes another SVG file inside resources/, and if
    that directory weren't ignored, rsvg-test would look inside it for SVG
    files to try rendering as tests.

 .../svg1.1/{images => resources}/20x20.png         | Bin
 .../{images => resources}/struct-symbol-01.png     | Bin
 .../fixtures/reftests/svg1.1/resources/svgRef4.css |   4 ++
 .../fixtures/reftests/svg1.1/resources/svgRef4.svg |  41 +++++++++++++
 .../reftests/svg1.1/struct-symbol-01-b.svg         |   2 +-
 tests/fixtures/reftests/svg1.1/struct-use-01-t.svg |   2 +-
 .../reftests/svg1.1/struct-use-04-b-ref.png        | Bin 0 -> 19927 bytes
 tests/fixtures/reftests/svg1.1/struct-use-04-b.svg |  65 +++++++++++++++++++++
 tests/rsvg-test.c                                  |   2 +-
 9 files changed, 113 insertions(+), 3 deletions(-)

commit 1c3c23fd024a61e4bfd7eadb9522f42833acba16
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 15:00:04 2017 -0600

    Add struct-use-03-t.svg from the SVG 1.1 test suite

 .../reftests/svg1.1/struct-use-03-t-ref.png        | Bin 0 -> 7785 bytes
 tests/fixtures/reftests/svg1.1/struct-use-03-t.svg |  76 +++++++++++++++++++++
 2 files changed, 76 insertions(+)

commit f51f24535c36a290432ad50ac16dee9c1c58ac5a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 14:57:33 2017 -0600

    Add struct-use-01-t.svg from the SVG 1.1 test suite
    
    We modify this file to include 20x20.png from a subdirectory.

 tests/fixtures/reftests/svg1.1/images/20x20.png    | Bin 0 -> 1038 bytes
 .../reftests/svg1.1/struct-use-01-t-ref.png        | Bin 0 -> 15253 bytes
 tests/fixtures/reftests/svg1.1/struct-use-01-t.svg | 112 +++++++++++++++++++++
 3 files changed, 112 insertions(+)

commit 8386ecb10ebe9674db364dfd5f5d3906c9498201
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 14:48:46 2017 -0600

    Add struct-symbol-01-b.svg from the SVG 1.1 test suite
    
    We modify this file to include the struct-symbol-01.png image in a
    subdirectory of the dir where the SVG file resides, instead of looking
    for it in an "unrelated" directory.

 .../reftests/svg1.1/images/struct-symbol-01.png    | Bin 0 -> 71497 bytes
 .../reftests/svg1.1/struct-symbol-01-b-ref.png     | Bin 0 -> 52263 bytes
 .../reftests/svg1.1/struct-symbol-01-b.svg         |  89 +++++++++++++++++++++
 3 files changed, 89 insertions(+)

commit e91e03239e05a6d7d9f3ee81a7c9937c5186ac33
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 14:05:26 2017 -0600

    parse_transform.lalrpop: Don't use "comma?" everywhere; use a helper production
    
    This shrinks the generated parse_transform.rs from 800652 bytes to
    417847 bytes.

 rust/src/parse_transform.lalrpop | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

commit 9d0b8f48831088c8defc120be9d061721bc85cfe
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 11:08:45 2017 -0600

    Remove unused rsvg_css_parse_frequency() function.

 rsvg-css.c | 29 -----------------------------
 rsvg-css.h |  2 --
 2 files changed, 31 deletions(-)

commit dc06dad7941024a877c0cfe9ebd307eeacf4142a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 11:07:51 2017 -0600

    Remove unused rsvg_css_parse_time() function.

 rsvg-css.c | 27 ---------------------------
 rsvg-css.h |  2 --
 2 files changed, 29 deletions(-)

commit 0584ecef87b05588efdfff2792c5966cfd4c0c79
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 11:07:01 2017 -0600

    Remove unused rsvg_css_parse_angle() function.

 rsvg-css.c | 34 ----------------------------------
 rsvg-css.h |  2 --
 2 files changed, 36 deletions(-)

commit fe148d81bd76d3df79017108cef33a1303ad2981
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 11:04:32 2017 -0600

    rsvg-filter.c: "azimuth", "elevation", "limitingConeAngle" are numbers, not angles
    
    Per the spec, these attributes specity plain numbers, which are
    interpreted as degrees.  They are not CSS/SVG angle values with
    deg/rad/grad units.

 rsvg-filter.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

commit ef6d3b7ef53e6395d2f92d08be6c5417d3feb944
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 08:25:06 2017 -0600

    Oops, list all the new Rust files in the toplevel Makefile.am
    
    While Cargo does its own dependency tracking, autotools needs to know
    about the source files so it will call Cargo when necessary.

 Makefile.am | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

commit 5ecce07b482d5b991a47d16ba03a51f80ad7cbb5
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 07:31:54 2017 -0600

    NodeSvg: Don't inline the computation of the SVG's affine
    
    Make it more clear by actually performing each step separately.

 rust/src/structure.rs | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

commit 6c3ea8ee997b5e2ea3d40387c45b9a1ef2b3e847
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 23 08:25:54 2017 -0600

    NodeSvg: Only access self.atts if it is non-null
    
    The contents of self.atts will be null if an <svg> element has no
    attributes.  This is because node_set_atts() in the C code will not call
    a Node.set_atts() method if the property bag is empty.
    
    While that is an optimization to avoid a bunch of hash lookups on empty
    hash tables, it does mean that node implementations cannot assume that
    their set_atts() method is always called.  I'm not sure that I like
    this.  Maybe we should just profile things with/without the extra hash
    lookups and see if they make a difference.

 rust/src/structure.rs | 28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

commit 91ef809cb41fcf7b20f53bd236053b3a39f336a9
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 16:29:33 2017 -0600

    structure.rs: Finish moving NodeSvg over to Rust.  Yay!

 rsvg-base.c           |   8 +-
 rsvg-structure.c      | 193 ------------------------------------------------
 rsvg-structure.h      |  11 ++-
 rust/src/lib.rs       |   4 +
 rust/src/structure.rs | 201 ++++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 214 insertions(+), 203 deletions(-)

commit 11e32a86153deb16501a55490dd391650e5bef96
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 16:28:51 2017 -0600

    Node.get_parent() - new method; returns a strong Rc<Node>
    
    Reimplement rsvg_node_get_parent() in terms of it.

 rust/src/node.rs | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

commit 101186586f1915b2e020ad1cea31573448c64dbb
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 16:28:14 2017 -0600

    property_bag.rs: Wrap rsvg_property_bag_dup() and rsvg_property_bag_free() in Rust

 rust/src/property_bag.rs | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

commit 7def4117c63f12ffef9d22be1639d5614a783815
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 16:27:24 2017 -0600

    property_bag.rs: New functions length_or_value(), parse_or_value()
    
    For callers who want to specify an explicit value instead of just using
    the default value for a type.

 rust/src/property_bag.rs | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

commit db81b26045d20b92c667347447c82e6873d7693b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 13:55:05 2017 -0600

    rsvg-structure: Make RsvgNodeSvg an opaque structure
    
    Add accessor functions rsvg_node_svg_get_size(),
    rsvg_node_svg_get_view_box().

 rsvg-base.c      | 17 ++++++++++-------
 rsvg-structure.c | 30 ++++++++++++++++++++++++++++++
 rsvg-structure.h | 11 +++++------
 3 files changed, 45 insertions(+), 13 deletions(-)

commit a394b7fc1ee56081268718bce0396c40288776f5
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 16:26:16 2017 -0600

    Oops, add the build file for lalrpop

 rust/build.rs  | 5 +++++
 rust/src/pt.rs | 1 +
 2 files changed, 6 insertions(+)

commit 18e8526227ddc6d3d963eaf36ba2a458ff7fef3b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 13:35:57 2017 -0600

    rsvg_parse_style_pairs(): remove unused "ctx" argument

 rsvg-paint-server.c | 2 +-
 rsvg-styles.c       | 4 ++--
 rsvg-styles.h       | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

commit 7ae3b046c74bbdc2a277ce92c6a623aab43d7e18
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 13:31:58 2017 -0600

    rsvg_lookup_parse_style_pair(): remove unused "ctx" argument

 rsvg-styles.c | 92 +++++++++++++++++++++++++++++------------------------------
 1 file changed, 46 insertions(+), 46 deletions(-)

commit 440db4d63f7e9f5a74bb2cd5d4d15165da3aad20
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 13:29:50 2017 -0600

    rsvg_parse_style_pair(): remove unused "ctx" argument

 rsvg-styles.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

commit b9dbe3bdfde71899af9f090b923ad35513006670
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 11:01:18 2017 -0600

    transform.rs: Implement rsvg_parse_transform() fully in Rust
    
    And remove it from rsvg-styles.c.  Yay!

 rsvg-styles.c         | 157 --------------------------------------------------
 rsvg-styles.h         |   1 +
 rust/src/lib.rs       |   4 ++
 rust/src/transform.rs |  24 ++++++++
 4 files changed, 29 insertions(+), 157 deletions(-)

commit c06fbc77e32212d8563599cddce76d53c8391c59
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 10:44:55 2017 -0600

    transform.rs: New public function parse_transform()
    
    This wraps parse_TransformList as generated by lalrpop.  It converts
    lalrpop errors into our own AttributeError, and validates the resulting
    transformation matrix.

 rust/src/transform.rs | 95 +++++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 81 insertions(+), 14 deletions(-)

commit 40bc9477dcce9a73884823f7543b63e45a85b59c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 09:50:56 2017 -0600

    transform.rs: Move the transform parsing tests from parsers.rs to here
    
    We'll need to wrap the raw parsers from lalrpop to validate the
    generated transformation matrices, so we'll put those functions in this
    file as well.

 rust/src/lib.rs       |   1 +
 rust/src/parsers.rs   | 129 +-------------------------------------------------
 rust/src/transform.rs | 127 +++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 130 insertions(+), 127 deletions(-)

commit 03138e684e09130747293a0e7a2946a2c311000c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 09:20:45 2017 -0600

    parse_transform.lalrpop: Parse chained transform lists

 rust/src/parse_transform.lalrpop | 27 +++++++++++++++++++++------
 rust/src/parsers.rs              | 17 +++++++++++++++++
 2 files changed, 38 insertions(+), 6 deletions(-)

commit 426c583568beac561bd8d6665f9b069d844f84b7
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 08:56:16 2017 -0600

    parse_transform.lalrpop: Parse the "skewX" and "skewY" transforms

 rust/src/parse_transform.lalrpop | 18 ++++++++++++++++++
 rust/src/parsers.rs              | 24 ++++++++++++++++++++++++
 2 files changed, 42 insertions(+)

commit 1f74649e75e36065e1f4349d7a3ee595d7557e9e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 08:46:43 2017 -0600

    parse_transform.lalrpop: Parse the "rotate" transform

 rust/src/parse_transform.lalrpop | 19 +++++++++++++++++++
 rust/src/parsers.rs              | 20 ++++++++++++++++++++
 2 files changed, 39 insertions(+)

commit fa7548f03d375ac7697359eb8bfc41053a51b5e4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 08:09:14 2017 -0600

    parse_transform.lalrpop: Point to the correct section of the spec

 rust/src/parse_transform.lalrpop | 4 ++++
 1 file changed, 4 insertions(+)

commit 368b887bd98b498e60f54585035fc9df7dd12b8f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 08:08:07 2017 -0600

    parse_transform.lalrpop: Parse the "scale" transform

 rust/src/parse_transform.lalrpop |  5 +++++
 rust/src/parsers.rs              | 12 ++++++++++++
 2 files changed, 17 insertions(+)

commit c82d223bb5d6016284b806e7611e872157b9c15a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 08:02:21 2017 -0600

    parse_transform.lalrpop: Parse the "translate" transform

 rust/src/parse_transform.lalrpop |  5 +++++
 rust/src/parsers.rs              | 12 ++++++++++++
 2 files changed, 17 insertions(+)

commit ba8264a7fc85bf448f23a0809d86b3f99c7eb2db
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 22 07:30:54 2017 -0600

    parse_transform.lalrpop: Parse the "matrix" transform

 rust/Cargo.lock                  | 52 ++++++++++++++++++++--------------------
 rust/Cargo.toml                  | 10 ++++----
 rust/src/lib.rs                  |  1 +
 rust/src/parse_transform.lalrpop | 20 +++++++++++++++-
 rust/src/parsers.rs              | 18 ++++++++++++++
 5 files changed, 70 insertions(+), 31 deletions(-)

commit 121cdb556b53b6b807aa58afca62b9eef7564b09
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Mar 21 20:40:42 2017 -0600

    parse_transform.rs: Start a lalrpop parser for the "transform" attribute

 rust/Cargo.lock                  | 321 +++++++++++++++++++++++++++++++++++++++
 rust/Cargo.toml                  |  10 ++
 rust/src/lib.rs                  |   1 +
 rust/src/parse_transform.lalrpop |   7 +
 rust/src/parsers.rs              |  24 +++
 5 files changed, 363 insertions(+)

commit d9315d14847f7d3d5e2c8634a4f2b765a3c84dbe
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Mar 21 16:56:20 2017 -0600

    pattern.rs: Organize the used modules a bit

 rust/src/pattern.rs | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

commit 691cd35ea83f35c4c7bd460b0a88fb53b364b0ff
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Mar 21 16:54:30 2017 -0600

    property_bag.rs: Implement parse_or_none(), length_or_none()
    
    And reimplement length_or_default()/parse_or_default() in terms of
    those.
    
    These parse a value from a string, or return None as an Option.

 rust/src/property_bag.rs | 42 ++++++++++++++++++++++++++++++++++--------
 1 file changed, 34 insertions(+), 8 deletions(-)

commit 08cd6c8ba763cb58b486ce80d54d22454d68a17e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Mar 21 16:54:00 2017 -0600

    paint_server.rs: Fix errors

 rust/src/paint_server.rs | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

commit c7d4ad44f1651c9d8f0c87c99ed0f5121a0e7371
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Mar 21 16:53:29 2017 -0600

    pattern.rs: Implement FromStr for PatternContentUnits

 rust/src/pattern.rs | 8 ++++++++
 1 file changed, 8 insertions(+)

commit adaa39a1b2ed148cd79801623b9cb5d54b539b0e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Mar 21 14:46:31 2017 -0600

    pattern.rs: Use PatternContentUnits instead of obj_cbbox boolean values

 rust/src/pattern.rs | 27 ++++++++++++++-------------
 1 file changed, 14 insertions(+), 13 deletions(-)

commit 8000fcf7c293c7b2da505d7f3e484b9cba7ad83b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Mar 21 14:37:41 2017 -0600

    pattern.rs: Use PaintServerUnits instead of obj_bbox boolean values

 rust/src/pattern.rs | 58 ++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 37 insertions(+), 21 deletions(-)

commit 83311d90ffdbe736b0b42f74b370b1fa309cc87a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Mar 21 14:32:49 2017 -0600

    pattern.rs: Define a PatternContentUnits newtype
    
    This is the same as a PaintServerUnits, but with a different default value.

 rust/src/pattern.rs | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

commit a8673e04851a65b7b9abff48dd2d3a68943ea389
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Mar 21 14:22:14 2017 -0600

    gradient.rs: Use PaintServerUnits instead of obj_bbox boolean values

 rust/src/gradient.rs | 60 +++++++++++++++++++++++++++++-----------------------
 1 file changed, 33 insertions(+), 27 deletions(-)

commit d47b875bd6575f42addea9fa2436e8b2129d30b4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Mar 21 14:13:11 2017 -0600

    Implement Default for PaintServerUnits, to yield ObjectBoundingBox

 rust/src/paint_server.rs | 6 ++++++
 1 file changed, 6 insertions(+)

commit 69903c259ec2f52538ef9b5e4f044afb9a3f9b62
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Mar 21 14:06:54 2017 -0600

    paint_server.rs: New file with a PaintServerUnits enum
    
    This has the userSpaceOnUse and objectBoundingBox values from the SVG
    spec.  We'll use this enum instead of boolean values for obj_bbox and
    similar.

 rust/src/lib.rs          |  1 +
 rust/src/paint_server.rs | 42 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+)

commit 1165cc80a0712c41904b3e6b3f09755736c67392
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Mar 21 13:43:29 2017 -0600

    Check the result on all uses of rsvg_parse_transform() and propagate errors

 rsvg-paint-server.c | 27 +++++++++++++++++++++------
 rsvg-styles.h       |  2 +-
 2 files changed, 22 insertions(+), 7 deletions(-)

commit 15825e361380984d3be1d46052980a7321ff6948
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 21:44:03 2017 -0600

    structure.rs: Port NodeGroup, NodeDefs, NodeSwitch to Rust
    
    They need to be done in a single step, since they all shared
    bits of implementation with RsvgNodeGroup.  Now they are
    independent of each other.

 rsvg-base.c           |  14 +++---
 rsvg-structure.c      | 106 --------------------------------------------
 rsvg-structure.h      |  12 +++--
 rust/src/lib.rs       |   8 ++++
 rust/src/structure.rs | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 143 insertions(+), 116 deletions(-)

commit 1652fdd81b9d2f653f9a5859d89f5e767d344449
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 21:43:25 2017 -0600

    Add a C getter for rsvg_state_get_cond_true()
    
    ... and wrap it in Rust; we'll need it there.

 rsvg-styles.c           | 5 +++++
 rsvg-styles.h           | 3 +++
 rust/src/drawing_ctx.rs | 5 +++++
 3 files changed, 13 insertions(+)

commit 88ce4366de6dc072f2ddf31b331d1f73c18f1af6
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 20:20:56 2017 -0600

    Add struct-svg-03-f.svg from the SVG 1.1 test suite
    
    This tests nested SVG elements.

 .../reftests/svg1.1/struct-svg-03-f-ref.png        | Bin 0 -> 5890 bytes
 tests/fixtures/reftests/svg1.1/struct-svg-03-f.svg |  68 +++++++++++++++++++++
 2 files changed, 68 insertions(+)

commit e594049adcb84fe89758e6e3d26dbb4f011f2ad9
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 19:58:46 2017 -0600

    marker.rs: Don't convert from *const RsvgNode to RsvgNode twice
    
    This is still a bit ugly, since for convenience we pass both the node
    and the cnode to Marker::render().  Hopefully this will go away
    eventually.

 rust/src/marker.rs | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

commit e1dcf6dd77f020107f8eff7fb6d549e66928d65d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 19:53:00 2017 -0600

    Wrap Node::draw_children() with rsvg_node_draw_children() and use that
    
    ... instead of the old _rsvg_node_draw_children().

 rsvg-cairo-clip.c       |  2 +-
 rsvg-cairo-draw.c       |  2 +-
 rsvg-private.h          |  5 +++++
 rsvg-structure.c        | 20 ++------------------
 rsvg-structure.h        |  3 ---
 rust/src/drawing_ctx.rs |  8 --------
 rust/src/lib.rs         |  1 +
 rust/src/marker.rs      |  3 ++-
 rust/src/node.rs        |  8 ++++++++
 rust/src/pattern.rs     |  3 ++-
 10 files changed, 22 insertions(+), 33 deletions(-)

commit 4762790f83d6eef8aa444d3ad21c81dc271edfa1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 19:34:54 2017 -0600

    node.rs: new method Node::draw_children()
    
    This will replace _rsvg_node_draw_children()

 rust/src/node.rs | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

commit 1c9ed2b6e9987fa9bc867616bc3842a1420083ac
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 19:31:50 2017 -0600

    drawing_ctx.rs: Wrap rsvg_drawing_ctx_draw_node_from_stack()

 rust/src/drawing_ctx.rs | 10 ++++++++++
 1 file changed, 10 insertions(+)

commit 4e8de80c75930ddaf124804106efdc740b2b6615
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 19:21:42 2017 -0600

    Factor out a function to add a node and its ancestors to the RsvgDrawingCtx's stack
    
    This bit of code was duplicated in three places; move it to a single
    function.

 rsvg-base.c         | 28 +++++++++++++++-------------
 rsvg-cairo-render.c |  9 +--------
 rsvg-private.h      |  4 +++-
 3 files changed, 19 insertions(+), 22 deletions(-)

commit 6d993e990fcadeec6d52e5997178c2e3fe57dfa1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 19:05:10 2017 -0600

    rsvg_handle_render_cairo_sub(): Traverse and ref ancestors correctly
    
    We get a new reference from rsvg_node_get_parent(); this wasn't being
    used correctly.

 rsvg-cairo-render.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

commit 8411039335cb6b26b581fa8ce680cbe4877c60fc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 19:00:04 2017 -0600

    Rename rsvg_node_draw_from_stack() to rsvg_drawing_ctx_draw_node_from_stack()
    
    This is really the concern of RsvgDrawingCtx, since it has
    the drawing stack in question.
    
    Moved this function from rsvg-structure.c to rsvg-base.c, which is where
    most of the other RsvgDrawingCtx functions are.

 rsvg-base.c         | 33 +++++++++++++++++++++++++++++++--
 rsvg-cairo-draw.c   |  2 +-
 rsvg-cairo-render.c |  2 +-
 rsvg-private.h      |  3 +++
 rsvg-structure.c    | 35 +++--------------------------------
 rsvg-structure.h    |  2 --
 6 files changed, 39 insertions(+), 38 deletions(-)

commit 3b118396dded327e1b7bce43dfe37ed518a19e65
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 08:39:42 2017 -0600

    bgo#776932: Don't render nodes whose "transform" attribute is invalid
    
    In the SVG 1.1 test suite, coords-trans-09-t.svg comes with this transform:
    
        <g transform="matrix(0 0 0 0 0 0)">
    
    which is invalid.  Now we detect whether transforms are in fact invalid,
    and propagate this info so that the corresponding nodes are not rendered.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=776932

 rsvg-styles.c                                      |  36 +++++---
 .../reftests/svg1.1/coords-trans-09-t-ref.png      | Bin 0 -> 17268 bytes
 .../fixtures/reftests/svg1.1/coords-trans-09-t.svg | 102 +++++++++++++++++++++
 3 files changed, 127 insertions(+), 11 deletions(-)

commit edd363a090ea477cf5f2e4b4151e2b5ea6191d18
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 08:08:21 2017 -0600

    rsvg-styles.c: Set a node's error when the transform can't be parsed

 rsvg-styles.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

commit 1d2a4fc8e924d960ad51c95b2a2b1590f60e805a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 08:05:41 2017 -0600

    Remove unused imports

 rust/src/viewbox.rs | 2 --
 1 file changed, 2 deletions(-)

commit 80dbfe0bad0e24379058a4220ed240a94d101ae4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 08:04:28 2017 -0600

    node.rs: New function rsvg_node_set_attribute_parse_error()
    
    We will use this from the C code to set a node as being in error, for
    example, when failing to parse an attribute value.

 rsvg-private.h   |  4 ++++
 rust/src/lib.rs  |  1 +
 rust/src/node.rs | 25 +++++++++++++++++++++++++
 3 files changed, 30 insertions(+)

commit 5ae4a79781beeee268e65ab92bf60110480ce19e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 07:48:20 2017 -0600

    NodeError: use a String for the attr_name, not a &'static str
    
    For now, we'll need to keep around attr_names that come from the C
    code.  We don't know if the pointers we are passed are to
    statically-allocated strings or not, so we'll just use full Strings on
    the heap for NodeError.

 rust/src/error.rs | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

commit 882265e5bfccf0d8227ee3d2cfe3fb3fef374fcc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 07:37:10 2017 -0600

    rsvg_parse_style_attrs(): Take a full RsvgNode, not an RsvgState

 rsvg-base.c      | 2 +-
 rsvg-structure.c | 2 +-
 rsvg-styles.c    | 9 ++++++---
 rsvg-styles.h    | 2 +-
 4 files changed, 9 insertions(+), 6 deletions(-)

commit d54c0ea585299ec3b8d85f0f7df7dffa4b98187f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 16 07:21:15 2017 -0600

    tests: Add the coords-trans-{01-08} tests from the SVG 1.1 test suite
    
    These are basic tests for affine transformations.

 .../reftests/svg1.1/coords-trans-01-b-ref.png      | Bin 0 -> 11819 bytes
 .../fixtures/reftests/svg1.1/coords-trans-01-b.svg | 239 +++++++++++++++++++++
 .../reftests/svg1.1/coords-trans-02-t-ref.png      | Bin 0 -> 8349 bytes
 .../fixtures/reftests/svg1.1/coords-trans-02-t.svg | 176 +++++++++++++++
 .../reftests/svg1.1/coords-trans-03-t-ref.png      | Bin 0 -> 7902 bytes
 .../fixtures/reftests/svg1.1/coords-trans-03-t.svg |  99 +++++++++
 .../reftests/svg1.1/coords-trans-04-t-ref.png      | Bin 0 -> 6655 bytes
 .../fixtures/reftests/svg1.1/coords-trans-04-t.svg |  88 ++++++++
 .../reftests/svg1.1/coords-trans-05-t-ref.png      | Bin 0 -> 8140 bytes
 .../fixtures/reftests/svg1.1/coords-trans-05-t.svg |  88 ++++++++
 .../reftests/svg1.1/coords-trans-06-t-ref.png      | Bin 0 -> 8526 bytes
 .../fixtures/reftests/svg1.1/coords-trans-06-t.svg |  82 +++++++
 .../reftests/svg1.1/coords-trans-07-t-ref.png      | Bin 0 -> 11482 bytes
 .../fixtures/reftests/svg1.1/coords-trans-07-t.svg |  70 ++++++
 .../reftests/svg1.1/coords-trans-08-t-ref.png      | Bin 0 -> 13265 bytes
 .../fixtures/reftests/svg1.1/coords-trans-08-t.svg |  76 +++++++
 16 files changed, 918 insertions(+)

commit ef8fd91518f96f449aba4900104dd055ed0e968a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 15 23:04:51 2017 -0600

    property_bag.rs: Remove unused lookup_and_parse()
    
    This is the one that didn't propagate errors.
    
    Now, the only public function left that doesn't propagate errors is lookup().

 rust/src/property_bag.rs | 17 -----------------
 1 file changed, 17 deletions(-)

commit 665a71f17c78f229e0d209a25bcd0ed18790fa18
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 15 23:00:48 2017 -0600

    marker.rs: Implement error handling for parsing MarkerUnits and MarkerOrient
    
    Simplify by using an AttributeError instead of a custom error type.
    
    Errors for the "markerUnits" and "orient" attributes get propagated now.
    
    Also, add tests for those parsers.

 rust/src/marker.rs | 70 +++++++++++++++++++++++++++++-------------------------
 1 file changed, 37 insertions(+), 33 deletions(-)

commit 61c355cb22064e331228dc389500da447be6a900
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 15 22:42:57 2017 -0600

    property_bag.rs: Turn lookup_length() into length_or_default(); return errors
    
    We used to return an RsvgLength with a default value in case of error.
    
    Now we actually return a Result.

 rust/src/marker.rs       |  4 ++--
 rust/src/property_bag.rs |  8 +++-----
 rust/src/shapes.rs       | 30 +++++++++++++++---------------
 3 files changed, 20 insertions(+), 22 deletions(-)

commit 9452ba089960926cd8475f73e7c19d8dc97cfa15
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 15 22:22:29 2017 -0600

    property_bag.rs: Make parse_or_default() know only about AttributeError, not ParseError
    
    Now the parsing step must yield an AttributeError, not a low-level
    ParseError.
    
    Make aspect_ratio.rs, length.rs, viewbox.rs emit an AttributeError, not
    a ParseError.
    
    Use parse_or_default() for the "vbox" property of marker.rs.

 rust/src/aspect_ratio.rs |  9 +++++----
 rust/src/error.rs        |  7 +++++++
 rust/src/length.rs       | 24 +++++++++++++++++++++---
 rust/src/marker.rs       |  2 +-
 rust/src/property_bag.rs |  4 ++--
 rust/src/viewbox.rs      | 43 +++++++++++--------------------------------
 6 files changed, 47 insertions(+), 42 deletions(-)

commit 69cebc0e6a83c5bb27da7da39a70837ec01b1608
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 15 21:52:10 2017 -0600

    length.rs: Make Length::parse()'s Result have a ParseError
    
    And fix some leftover cut&paste in shapes.rs

 rust/src/length.rs | 14 +++++++++-----
 rust/src/shapes.rs |  2 --
 2 files changed, 9 insertions(+), 7 deletions(-)

commit d2e4e1fde4debb6c5ed577322df7e218e906f916
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 15 21:39:42 2017 -0600

    error.rs: Remove unused argument

 rust/src/error.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit d483d93f838ba0c3eafc155d3bfc9f516bc5f675
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 15 21:37:27 2017 -0600

    property_bag.rs: New function parse_or_default()
    
    This looks up a key in the property bag.  If the key is not found,
    returns a default value.
    
    If the key is found, then the string value is parsed.  If the parse is
    successful, that value is returned.  Otherwise, we turn that into a
    NodeError with a parse error inside.
    
    Make marker.rs use that for the "aspect" attribute.

 rust/src/aspect_ratio.rs | 46 +++++++++++++++++++++-------------------------
 rust/src/marker.rs       |  1 +
 rust/src/property_bag.rs | 14 ++++++++++++++
 3 files changed, 36 insertions(+), 25 deletions(-)

commit d5391b91c42ff823c9d669d8f03106eb12e3f674
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 15 20:59:10 2017 -0600

    error.rs: Fix is_parse_error() and is_value_error()

 rust/src/error.rs | 24 ++++++++----------------
 1 file changed, 8 insertions(+), 16 deletions(-)

commit bbea658427ff3d3b693fb46f07ea17d4b70c0618
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 15 20:42:32 2017 -0600

    error.rs: Implement From<ParseError> for AttributeError
    
    This lets us convert a low-level ParseError implicitly to a higher-level
    AttributeError.

 rust/src/error.rs | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

commit a8175940714b68751a74e0c32fd2f4cffeba4c06
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Mar 15 19:30:01 2017 -0600

    lib.rs: Remove exports that don't need to be exported

 rust/src/lib.rs | 5 -----
 1 file changed, 5 deletions(-)

commit 148612df7886df5b7763f5cfee3445af2162fa91
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Mar 3 16:07:53 2017 -0600

    parsers.rs: New helper ParseError::new() which duplicates the description string itself
    
    Since these are error structures for long-term storage, we can't keep
    slices into the parsed buffers or anything like that.  So, we store
    a plain String.

 rust/src/parsers.rs | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

commit 371ba76abd2f972d0b13f189827beb96cb4b87f3
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Mar 3 15:59:59 2017 -0600

    ParseError: Remove the description field; only leave the display field
    
    All descriptions were basically "parse error"; so leave only the
    human-readable meaningful text.

 rust/src/parsers.rs | 22 +++++++---------------
 1 file changed, 7 insertions(+), 15 deletions(-)

commit 7c8ddd0017321d966cbc9c27357babc31c10e144
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Mar 3 15:52:00 2017 -0600

    error.rs: Move the NodeError machinery here, so other files can use it
    
    ... also, we renamed our struct from Error to NodeError, avoid getting
    it confused with std::error::Error.

 rust/src/error.rs  | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++
 rust/src/lib.rs    |  1 +
 rust/src/node.rs   | 65 ++++--------------------------------------------------
 rust/src/shapes.rs |  3 ++-
 4 files changed, 68 insertions(+), 62 deletions(-)

commit d44b0ec3765f7aa5080edfd5f8e3b1296a278fa7
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Mar 3 14:14:24 2017 -0600

    node.rs: Only drop the RsvgState if *not* in testing mode
    
    We don't have rsvg_state_free() available if we are linking in testing
    mode.  Conditionally compile the Drop trait then; there are no leaks
    because in testing mode we don't create RsvgState objects anyway.
    
    The effect of this commit is to actually free the states in release mode!

 rust/src/node.rs | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

commit 4cea62cacbf9b433ac53aa842184fc453342a73f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Mar 3 14:13:19 2017 -0600

    Shuffle around node::Error and AttributeError
    
    Now Error has the attr_name and an AttributeError, which actually has
    Parse and Value matches.

 rust/src/node.rs    | 59 +++++++++++++++++++++++--------------
 rust/src/parsers.rs | 83 +++++++++++++++++++++++++++++++++++------------------
 rust/src/shapes.rs  | 19 ++++++------
 3 files changed, 103 insertions(+), 58 deletions(-)

commit 0697d8f35b8fcd2561617c62aa8353047b5929d2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Mar 3 14:11:50 2017 -0600

    Remove unused imports

 rust/src/marker.rs | 1 -
 1 file changed, 1 deletion(-)

commit 4a12cf685beae89c3aa22887d395719200241e89
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Mar 3 12:14:59 2017 -0600

    parsers.rs: Removed example code
    
    Thanks again to Sebastian for this.

 rust/src/parsers.rs | 62 -----------------------------------------------------
 1 file changed, 62 deletions(-)

commit 673b0f5b6390f25a9c6cd8cf572c93f13995abf5
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Mar 3 10:47:52 2017 -0600

    Node::draw(): Don't draw nodes that are in error

 rust/src/node.rs | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

commit 657182c210416c627232dcce4d370c7f268e37ee
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Mar 3 10:46:43 2017 -0600

    Make NodeTrait::set_atts() return a NodeResult
    
    Set this on node.result from the toplevel Node::set_atts() that calls
    into NodeTrait::set_atts().
    
    For now, just return Ok from all the set_atts() implementations; we'll
    propagate errors later.

 rust/src/cnode.rs  |  4 +++-
 rust/src/marker.rs |  4 +++-
 rust/src/node.rs   |  7 ++++---
 rust/src/shapes.rs | 24 ++++++++++++++++++------
 4 files changed, 28 insertions(+), 11 deletions(-)

commit 28bb98cfb493e7f5c294ccd53faea5f78f9acfa1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Mar 3 10:23:15 2017 -0600

    node.rs: Implement fmt::Display and error::Error for node::Error
    
    We have an AttributeError struct that we use to hold an attribute's
    name, and the actual error which that attribute caused.
    
    node::Error in turn is an enum for parse errors, invalid values, etc.,
    that each hold an AttributeError to describe the attribute in question.

 rust/src/node.rs | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

commit 356cfdf8dddfd4054c4d8308410ba0c19f848f1a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Mar 3 09:23:24 2017 -0600

    node.rs: Start defining node::Error type
    
    This in the context of https://bugzilla.gnome.org/show_bug.cgi?id=776932
    
    A "transform (0, 0, 0, 0, 0, 0)" attribute ripples down the code, so
    that we try to invert that matrix and panic.
    
    We'll keep a "result" field inside struct Node.  When a node
    parses/validates its attributes, it will set that result to Err if it
    finds a problem.  This is how we'll remember that a node "is in error",
    to use the SVG spec's terminology.
    
    Later, Node::draw() will not render a node that is in error.  We can
    also do optimizations in the call stack above Node::draw(); for example,
    making rsvg_node_draw_from_stack() ignore nodes that are in error so
    that it can avoid doing a state inheritance for a node in error.

 rust/src/node.rs | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

commit 5dffb6de39a6520bf5d120f0a92273e829c69216
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Mon Mar 6 15:04:20 2017 +0800

    Visual Studio builds: Generate .pc files upon "install"
    
    This makes it easier for build systems that demand for the presence of .pc
    files (such as Meson) to find packages.

 win32/vs12/Makefile.am                  |  1 +
 win32/vs12/rsvg-install.propsin         | 10 ++++++++++
 win32/vs12/rsvg-install.vcxproj         | 14 ++++++++++++--
 win32/vs12/rsvg-install.vcxproj.filters | 21 +++++++++++++++++++++
 win32/vs12/rsvg-version-paths.props.in  |  4 ++++
 win32/vs14/Makefile.am                  |  1 +
 win32/vs15/Makefile.am                  |  1 +
 7 files changed, 50 insertions(+), 2 deletions(-)

commit 9b56f3f7dcfbca6a0fd491ef17aa301fdf5457ed
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Fri Mar 3 17:19:43 2017 +0800

    Visual Studio builds: Add scripts to generate .pc files
    
    Integration into the Visual Studio process will follow, this uses Python
    to generate librsvg-2.0.pc.

 win32/Makefile.am |   3 ++
 win32/pc_base.py  | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 win32/replace.py  | 109 +++++++++++++++++++++++++++++++++++++++++++++++
 win32/rsvgpc.py   |  33 +++++++++++++++
 4 files changed, 269 insertions(+)

commit da0cd7b2ccf2ffc0b5a4b709cfe356b821665e35
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Fri Mar 3 15:43:01 2017 +0800

    Visual Studio builds: Include package version in property sheets
    
    This is done so that we can use this info to generate .pc files for Visual
    Studio builds.

 configure.ac                                                 |  1 +
 ...{rsvg-version-paths.props => rsvg-version-paths.props.in} | 12 ++++++++++++
 2 files changed, 13 insertions(+)

commit 8bf4354fdc3703c0ea6ecec86ce2f3583933c03a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 2 18:50:39 2017 -0600

    bgo#777834: Don't try to render text whose PangoLayout has zero extents
    
    Text elements sometimes have children with empty strings for their
    contents, so PangoLayout returns an ink_rect with (width, height) = (0, 0).
    
    In this case, we would set a bbox's size to (0, 0), then use that in an
    affine matrix, and try to invert it, and kaboom.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777834

 rsvg-cairo-draw.c                                        |   8 ++++++--
 .../reftests/bugs/777834-empty-text-children-ref.png     | Bin 0 -> 9653 bytes
 .../reftests/bugs/777834-empty-text-children.svg}        |   0
 3 files changed, 6 insertions(+), 2 deletions(-)

commit 215ddf63e04708fcd8de006cfe0c477d9f0dd4d2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 2 15:08:03 2017 -0600

    marker.rs: Add initial tests for the generated markers and their angles
    
    The test for a closed subpath passes:  we are not generating the correct
    direction for the end marker in a closed subpath.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777854

 rust/src/marker.rs | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 57 insertions(+), 3 deletions(-)

commit 772f1e13bbc59193728199399606aeadd3bd95f3
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 2 14:51:43 2017 -0600

    marker.rs: Split tests into modules for parser tests and directionality tests

 rust/src/marker.rs | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

commit ace7de082695c494e196a01399760df147f7f528
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 2 14:43:02 2017 -0600

    marker.rs: Use a single emit_marker() function, not one for each endpoint

 rust/src/marker.rs | 46 +++++++++++++++++++++++++---------------------
 1 file changed, 25 insertions(+), 21 deletions(-)

commit 3ae42ec3b16fc80da06f228262fb415aa945efa9
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 2 14:37:07 2017 -0600

    marker.rs: Inline a couple of functions that only get used once

 rust/src/marker.rs | 28 ++++++++++------------------
 1 file changed, 10 insertions(+), 18 deletions(-)

commit 9c78cacc7b8c6641da2a949bc93adf6128cb8544
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 2 14:28:50 2017 -0600

    marker.rs: Implement render_markers_for_path_builder() in terms of an emitter
    
    Also, fix the syntax for our function pointer; the helpers need to
    be generic on a Fn().

 rust/src/marker.rs | 71 +++++++++++++++++++++++++-----------------------------
 1 file changed, 33 insertions(+), 38 deletions(-)

commit 8af629cf948c74121ada87f16ca9eb1279efb9ab
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 2 13:23:39 2017 -0600

    marker.rs: Pass around MarkerType values, not marker names
    
    Figure out the marker names only at rendering time

 rust/src/marker.rs | 49 +++++++++++++++++++++++++++++++++++--------------
 1 file changed, 35 insertions(+), 14 deletions(-)

commit 1756c70e1eb81e7048cfcd63682e7fe11687f3fc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 2 13:10:56 2017 -0600

    marker.rs: Extract marker positions from segments in separate functions

 rust/src/marker.rs | 50 ++++++++++++++++++++------------------------------
 1 file changed, 20 insertions(+), 30 deletions(-)

commit 717a9d141d8abee9847c2e381e36b21f297a4058
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 2 13:02:56 2017 -0600

    marker.rs: Add a type definition for a MarkerRenderFn
    
    This will take a marker type (start/middle/end) and all the parameters
    for rendering a marker.

 rust/src/marker.rs | 13 +++++++++++++
 1 file changed, 13 insertions(+)

commit a829ddd6cb1c4ff43bfb3eeb5b26ccff875b4109
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 2 12:55:20 2017 -0600

    marker.rs: Rename the render_marker_*() functions to emit_marker_()
    
    We'll move to a model where those functions take a lambda to actually
    render the marker or otherwise use its final position/angle/etc.
    
    This way we can have tests for the generated markers without going to
    the rendering step.

 rust/src/marker.rs | 46 +++++++++++++++++++++++-----------------------
 1 file changed, 23 insertions(+), 23 deletions(-)

commit 57372a4808e7bbc7d85606d7c7de43767550cd28
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Mar 2 12:48:47 2017 -0600

    marker.rs: Move declarations closer to their use

 rust/src/marker.rs | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

commit 9a3be46109973fbe585ec998b13f6a4caeb88346
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Thu Mar 2 11:11:06 2017 +0800

    Visual Studio builds: Add facilities to build with FontConfig
    
    PangoFT2 (and thus FontConfig) are not required portions of the GTK+ stack
    on Windows, but since the tests currently rely on this, make it easier for
    people who want to build with FontConfig to build the tests.

 win32/vs12/rsvg-build-defines.props | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

commit a6243bac418102db9af0c9a092f5d118f617b61c
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Thu Mar 2 01:09:28 2017 +0800

    Visual Studio builds: Fix Cargo output path
    
    The previous move of the projects to win32/ missed updating this part.
    Fix this.

 win32/rsvg-rust.mak | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 7861db7b19e14c1c081aef43d6f8320d15514689
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 28 19:08:57 2017 -0600

    lib.rs: Don't include strtod.rs for now
    
    We are using nom for the parsers instead of our own strtod().  Just keep
    it around for its tests.

 rust/src/lib.rs | 1 -
 1 file changed, 1 deletion(-)

commit e440ddfd00ee8ffb2810e441a3eb618afb37199a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 28 19:08:20 2017 -0600

    pattern.rs: Remove rsvg_pattern_node_has_children(); implement in Rust
    
    node.rs: Make Node.children public

 rsvg-paint-server.c | 27 ---------------------------
 rsvg-paint-server.h |  3 ---
 rust/src/node.rs    | 10 +++++-----
 rust/src/pattern.rs | 14 ++++++++++----
 4 files changed, 15 insertions(+), 39 deletions(-)

commit d15c379ad7c5d32da181bed57f9011c86970ce83
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 28 15:33:12 2017 -0600

    Make the get_c_impl() implementations unreachable for nodes implemented in Rust
    
    They used to return a ptr::null(), but this value should really never
    get used, and the get_c_impl() method should not be called for nodes
    that are implemented in Rust.  Assert that this is so.

 rust/src/marker.rs |  3 +--
 rust/src/node.rs   |  2 +-
 rust/src/shapes.rs | 13 ++++++-------
 3 files changed, 8 insertions(+), 10 deletions(-)

commit e299ef0e285f7d1267528a38d8c41596b89da526
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 27 22:12:15 2017 -0600

    RsvgLength::parse() - return a Result, not an RsvgLength
    
    The callers now deal with errors from parsing.  In reality we ignore
    the errors and fall back to default values, but the parsing machinery
    is there now to detect errors.

 rust/src/gradient.rs     |  14 ++--
 rust/src/length.rs       | 198 +++++++++++++++++++++++------------------------
 rust/src/marker.rs       |   6 +-
 rust/src/parsers.rs      |   6 +-
 rust/src/pattern.rs      |   8 +-
 rust/src/property_bag.rs |   4 +-
 rust/src/shapes.rs       |  20 ++++-
 7 files changed, 133 insertions(+), 123 deletions(-)

commit 48f48648d1db5735f257f60915ae463cf1a35e58
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 27 21:18:22 2017 -0600

    parsers.rs: make the angle() nom parser number_and_units() instead
    
    It can really extract any combination of a floating point number plus a
    unit-like string.  We'll use this for other purposes, too.

 rust/src/parsers.rs | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

commit 2f4ed2e3c140c9d925254be8f4a91fa21bcf0696
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 27 21:02:36 2017 -0600

    length.rs: Be more explicit about what we match for default units

 rust/src/length.rs | 5 +++++
 1 file changed, 5 insertions(+)

commit acbd87449144473ceddce8c419616e61cf25063d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 27 20:16:01 2017 -0600

    property_bag.rs: New functions lookup_and_parse(), lookup_length()
    
    The former does T::from_str() and uses T::default() for the parsing and
    default values.
    
    The latter parses an RsvgLength, and lets the caller specify a
    LengthDir.
    
    This makes the set_atts() functions a bit less verbose.

 rust/src/marker.rs       | 20 ++++++-----------
 rust/src/property_bag.rs | 31 +++++++++++++++++++++++++++
 rust/src/shapes.rs       | 56 +++++++++++++-----------------------------------
 3 files changed, 52 insertions(+), 55 deletions(-)

commit 6dd4ffd62f9d68799d1b2372a05422440fa0d279
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 27 16:37:59 2017 -0600

    marker.rs: Fully implement markers in Rust.  rsvg-marker.c is gone!

 Makefile.am        |   1 -
 rsvg-marker.c      | 214 -----------------------------------------------------
 rsvg-marker.h      |   8 --
 rust/src/marker.rs | 140 ++++++++++++++++++++++++++++++-----
 4 files changed, 123 insertions(+), 240 deletions(-)

commit 1112a20c355043cb962b0f3d4c89ee4c0e3978ae
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 27 16:35:46 2017 -0600

    node.rs: Add a Node::with_impl() method, to access the NodeTrait impl out of band
    
    This is a bit sketchy, because we use the downcast-rs crate to actually
    be able to downcast a our "node_impl: Box<NodeTrait>" field into the
    concrete implementation type.  At first we'll use this in the marker.rs
    implementation, as markers are not rendered from the normal ::draw()
    method.  Maybe we'll find a way to make this cleaner at some point.

 rust/Cargo.lock  |  7 +++++++
 rust/Cargo.toml  |  4 ++++
 rust/src/lib.rs  |  7 +++++++
 rust/src/node.rs | 14 +++++++++++++-
 4 files changed, 31 insertions(+), 1 deletion(-)

commit 70f390d8692442ba1ec1df0c33b0725920e78a23
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 27 16:34:15 2017 -0600

    drawing_ctx.rs: Import rsvg_drawing_ctx_acquire_node_of_type()

 rust/src/drawing_ctx.rs | 11 +++++++++++
 1 file changed, 11 insertions(+)

commit 63b7e671f81edb532790d2c0642a6b0333a07172
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 27 12:46:29 2017 -0600

    Rename and export rsvg_drawing_ctx_add_clipping_rect() to Rust

 rsvg-base.c             |  2 +-
 rsvg-image.c            |  2 +-
 rsvg-marker.c           | 10 +++++-----
 rsvg-private.h          |  2 +-
 rsvg-structure.c        |  6 +++---
 rust/src/drawing_ctx.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 57 insertions(+), 11 deletions(-)

commit c73e54122b94e73bf7e4bf2eba405a88ff85501e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 27 12:43:40 2017 -0600

    New helper function rsvg_state_is_overflow()
    
    To be used from the Rust code.

 rsvg-styles.c | 5 +++++
 rsvg-styles.h | 3 +++
 2 files changed, 8 insertions(+)

commit fc90f896b813d711964ab289940f574ee5ecf44f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 27 11:15:17 2017 -0600

    Unfinished: Move the rest of rsvg-marker.c to Rust

 rsvg-base.c        |   2 +-
 rsvg-marker.c      |   4 +-
 rsvg-marker.h      |   6 ++
 rust/src/marker.rs | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 4 files changed, 179 insertions(+), 4 deletions(-)

commit c624f17f1605bbb3319229d7040602e1e07ba4ee
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 27 10:38:37 2017 -0600

    parsers.rs: Add parser for angle_degrees()

 rust/src/parsers.rs | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 49 insertions(+), 1 deletion(-)

commit 58585772e6b0852a2b4a7fb65477e2cbe7f0f18d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 27 07:42:21 2017 -0600

    Remove unused rsvg_render_markers()
    
    This is handled from within the Rust code now.

 rsvg-marker.h      |  4 ----
 rust/src/lib.rs    |  4 ----
 rust/src/marker.rs | 10 ----------
 3 files changed, 18 deletions(-)

commit 67b7c18666ccaca80bb56c0acb42d4ee5b401e84
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 27 07:32:11 2017 -0600

    shapes.rs: Trim whitespace from the list-of-points string before parsing it

 rust/src/shapes.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 98f21cd6a33879df078d141b98055472bd2e66b9
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 27 07:20:59 2017 -0600

    viewbox.rs: Trim whitespace before parsing the viewBox string
    
    It seems like it will be easier to trim surrounding whitespace before
    calling nom, than doing it in nom itself.

 rust/src/viewbox.rs | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

commit 0dc61d3b499dd4e180e4dac2685f1f21140cc35c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Feb 24 08:37:50 2017 -0600

    rsvg-shapes.c is gone now; all the basic shapes are in shapes.rs now

 Makefile.am         |   1 -
 rsvg-base.c         |   4 +-
 rsvg-cairo-clip.c   |   1 +
 rsvg-shapes.c       | 165 ----------------------------------------------------
 rsvg-shapes.h       |  17 +++---
 rust/src/lib.rs     |   2 +
 rust/src/shapes.rs  |  61 ++++++++++++++++---
 rust/src/viewbox.rs |   2 -
 8 files changed, 68 insertions(+), 185 deletions(-)

commit 6cfbc00b400fbad789671162514084063c6184c3
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 23 17:27:04 2017 -0600

    parsers.rs: Start a parser for SVG's list-of-points
    
    Thanks to Sebastian Köln in #rust for the help with nom.
    
    We are still missing optional whitespace at the beginning
    and end of the list-of-points, but I can't get nom to do that.

 rust/src/parsers.rs | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 144 insertions(+), 4 deletions(-)

commit 1bfa2d7b0e85b8c31d7bf9fd55cdfbd0455ca5eb
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Thu Feb 23 11:59:29 2017 +0800

    Visual Studio builds: Move projects to win32/
    
    Move the projects to win32/ from build/win32/, so that one will need to go down
    one less level down the tree to reach the project files, and will allow the
    autotools modules (Makefile.msvcproj, Makefile-newvs.am,
    Makefile.msvc-introspection) to be in sync with the ones in GLib and G-I master.
    
    This also makes the support of Visual Studio 2017 complete by allowing it in the
    NMake Makefiles, which is a must for this package since NMake Makefiles are used
    to build the Rust bits on Visual Studio, as well as for introspection builds.

 Makefile.am                                        |  18 +--
 build/Makefile-newvs.am                            |  57 --------
 build/Makefile.am                                  |   1 -
 build/Makefile.msvcproj                            | 149 --------------------
 configure.ac                                       |   9 +-
 win32/Makefile-newvs.am                            |  55 ++++++++
 {build/win32 => win32}/Makefile.am                 |   2 +-
 {build => win32}/Makefile.msvc-introspection       |  70 +++++-----
 win32/Makefile.msvcproj                            | 153 +++++++++++++++++++++
 {build/win32 => win32}/detectenv-msvc.mak          |   4 +-
 {build/win32 => win32}/introspection-msvc.mak      |   4 +-
 {build/win32 => win32}/rsvg-introspection-msvc.mak |   0
 {build/win32 => win32}/rsvg-rust.mak               |  10 +-
 {build/win32 => win32}/vs12/Makefile.am            |   8 +-
 {build/win32 => win32}/vs12/README.txt             |   0
 .../vs12/libpixbufloader-svg.vcxproj               |  16 +--
 .../vs12/libpixbufloader-svg.vcxproj.filters       |   2 +-
 {build/win32 => win32}/vs12/librsvg.sln            |   0
 .../win32 => win32}/vs12/rsvg-build-defines.props  |   2 +-
 .../vs12/rsvg-convert.vcxproj.filtersin            |   0
 {build/win32 => win32}/vs12/rsvg-convert.vcxprojin |  14 +-
 {build/win32 => win32}/vs12/rsvg-gen-srcs.props    |   4 +-
 {build/win32 => win32}/vs12/rsvg-install.propsin   |   0
 {build/win32 => win32}/vs12/rsvg-install.vcxproj   |  18 +--
 {build/win32 => win32}/vs12/rsvg-rust.vcxproj      |   0
 .../win32 => win32}/vs12/rsvg-version-paths.props  |   2 +-
 {build/win32 => win32}/vs12/rsvg-view-3.vcxproj    |  16 +--
 .../vs12/rsvg-view-3.vcxproj.filters               |   2 +-
 {build/win32 => win32}/vs12/rsvg.vcxproj.filtersin |   4 +-
 {build/win32 => win32}/vs12/rsvg.vcxprojin         |  54 +++-----
 {build/win32 => win32}/vs14/Makefile.am            |   5 +-
 {build/win32 => win32}/vs15/Makefile.am            |   5 +-
 32 files changed, 315 insertions(+), 369 deletions(-)

commit 9a927252b2a4d7e81aa12b3201d5757deb571560
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 21 21:19:59 2017 -0600

    viewbox.rs: Implement FromStr for RsvgViewBox based on the parsers
    
    parsers.rs: Don't validate the viewBox's width and height here; do it upstream

 rust/src/parsers.rs | 26 +++++++++-----
 rust/src/viewbox.rs | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 115 insertions(+), 10 deletions(-)

commit 8aa9b069315f57102eb471d69f2675f28076a3e8
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 21 20:32:56 2017 -0600

    node.rs: New utility function boxed_node_new() for the node creators
    
    Factor its code out of the rsvg_node_foo_new() from shapes.rs.

 rust/src/cnode.rs  | 11 +----------
 rust/src/node.rs   | 19 +++++++++++++++++++
 rust/src/shapes.rs | 37 +++++++++++++++----------------------
 3 files changed, 35 insertions(+), 32 deletions(-)

commit c6d8a57928534b4eb0e7e95fea6e7ec2b757d549
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 21 20:18:15 2017 -0600

    parsers.rs: New parser for the viewBox attribute
    
    It just returns whatever default errors there are in Nom.  We should
    translate them to meaningful errors at some point.

 rust/Cargo.lock     |  4 ++--
 rust/Cargo.toml     |  4 +++-
 rust/src/parsers.rs | 29 ++++++++++++++++++++++++++++-
 3 files changed, 33 insertions(+), 4 deletions(-)

commit 112ce31aa0193de9601f90c3316e6ecb66cae48d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 21 20:03:21 2017 -0600

    rust/src: Remove unused muts, modules, etc.

 rust/src/node.rs        | 33 ++++++++++++++++-----------------
 rust/src/path_parser.rs |  1 -
 2 files changed, 16 insertions(+), 18 deletions(-)

commit 5941032d1d547defb30c629b23a75a9b6d55421a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 21 20:02:02 2017 -0600

    Update Cargo.toml for cairo-rs upstream
    
    Now that it has my fixes for SurfacePattern.create(), we can use it.

 rust/Cargo.lock | 16 ++++++++--------
 rust/Cargo.toml |  8 ++++----
 2 files changed, 12 insertions(+), 12 deletions(-)

commit 41b944569917d1c316bc12297a07e18ac3b29ee0
Author: Sebastian Dröge <sebastian@centricular.com>
Date:   Tue Feb 21 10:05:57 2017 -0600

    Add the start of a nom-based parser for floating-point numbers

 rust/Cargo.lock     |  7 ++++++
 rust/Cargo.toml     |  3 +++
 rust/src/lib.rs     |  4 +++
 rust/src/parsers.rs | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 84 insertions(+)

commit 7a56919ff83c4e214527f9b7c7a4d6d83c44a148
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 20 18:28:36 2017 -0600

    shapes.rs: NodeEllipse fully implemented in Rust!
    
    Factor out the function to draw ellipses and circles, too.

 rsvg-base.c        |   2 +-
 rsvg-shapes.c      | 100 ---------------------------------------------
 rsvg-shapes.h      |   6 ++-
 rust/src/lib.rs    |   1 +
 rust/src/shapes.rs | 118 +++++++++++++++++++++++++++++++++++++++++------------
 5 files changed, 99 insertions(+), 128 deletions(-)

commit e36a432082d2e6c281891c9b5832c30ac3f7089d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 20 18:07:04 2017 -0600

    shapes.rs: NodeCircle fully implemented in Rust!

 rsvg-base.c        |  2 +-
 rsvg-shapes.c      | 94 ------------------------------------------------------
 rsvg-shapes.h      |  6 ++--
 rust/src/lib.rs    |  1 +
 rust/src/shapes.rs | 83 +++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 89 insertions(+), 97 deletions(-)

commit 489cd04ea075b78821bbfdc01292855968ed30c2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 20 17:30:18 2017 -0600

    shapes.rs: NodeRect completely implemented in Rust!

 rsvg-base.c        |   2 +-
 rsvg-shapes.c      | 194 +-------------------------------------------------
 rsvg-shapes.h      |   6 +-
 rust/src/lib.rs    |   1 +
 rust/src/shapes.rs | 205 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 5 files changed, 210 insertions(+), 198 deletions(-)

commit 987b611d32e4038d04668a3c4ea305ea3e1502df
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 20 17:28:44 2017 -0600

    node.rs: Remove unused mut

 rust/src/node.rs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit 4ba0fef19bff5542b7ca9ad2857dd4ae7ef896bf
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 20 16:06:16 2017 -0600

    shapes.rs: NodeLine completely implemented in Rust.  Yay!

 rsvg-base.c        |  2 +-
 rsvg-shapes.c      | 73 ----------------------------------------
 rsvg-shapes.h      |  6 ++--
 rust/src/lib.rs    |  1 +
 rust/src/shapes.rs | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 104 insertions(+), 76 deletions(-)

commit 458c7ff1e51ee730380c50690591c38207ad4b54
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 20 16:04:24 2017 -0600

    length.rs: Implement trait Default for RsvgLength

 rust/src/length.rs | 10 ++++++++++
 1 file changed, 10 insertions(+)

commit df252a8409a30985b7b75afd20e540dfc67f60c4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 20 16:03:39 2017 -0600

    Remove an unused unsafe block

 rust/src/node.rs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit ee07e154453b05776c3594f648932bad43606d38
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 20 15:27:46 2017 -0600

    shapes.rs: Factor out function to render a path builder

 rust/src/shapes.rs | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

commit f7593e3b802afa4971db80c373dcfec1c8f4b8c5
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 20 14:01:02 2017 -0600

    shapes.rs: Fully implement NodePath in Rust.  Yay!

 rsvg-base.c        |  2 +-
 rsvg-shapes.c      | 61 ------------------------------------------------------
 rsvg-shapes.h      |  4 +++-
 rust/src/lib.rs    | 51 ++++++++++++++++++++++++---------------------
 rust/src/shapes.rs | 25 +++++++++++++++-------
 5 files changed, 49 insertions(+), 94 deletions(-)

commit 608b05a1e24f321a072d3c8b699efdec36a56717
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 20 13:59:44 2017 -0600

    cnode.rs: Factor out function to convert a *const RsvgNode into an Option<Weak<Node>>
    
    We'll need this throughout the code to bring in the parent nodes from C

 rust/src/cnode.rs | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

commit 917499fd86be5e135f83edc03d0fa2c5e19f47ac
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 20 13:49:10 2017 -0600

    drawing_ctx.rs: Bring in rsvg_state_new()

 rust/src/drawing_ctx.rs | 5 +++++
 1 file changed, 5 insertions(+)

commit 8e824c8eb682edb134c85955f88c23ea58f83909
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Feb 20 08:01:16 2017 -0600

    shapes.rs: Render the path's markers

 rust/src/marker.rs | 56 +++++++++++++++++++++++++++++-------------------------
 rust/src/shapes.rs |  5 +++--
 2 files changed, 33 insertions(+), 28 deletions(-)

commit 0d82f0a783c216b03330264db85deae5ef9f7497
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Feb 17 10:33:57 2017 -0600

    find_last_chars_node(): Unref the last chars node we found if a tspan overrides it

 rsvg-base.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 66ee4b61dd84ca945f45272d5122318b70e74a1e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Feb 17 10:29:47 2017 -0600

    test-utils.c: Fix a string leak

 tests/test-utils.c | 2 ++
 1 file changed, 2 insertions(+)

commit 7035711b7eaf60a7ac06e9e0854f7834cc07df40
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Feb 17 10:24:18 2017 -0600

    rsvg-test.c: Fix a couple of leaked strings

 tests/rsvg-test.c | 3 +++
 1 file changed, 3 insertions(+)

commit f8c3891851296926c3695b1abb9cc9cb67cf840f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Feb 17 10:19:15 2017 -0600

    Don't leak the PangoFontMap we create only for tests
    
    We weren't storing that fontmap at all, so it was re-created an leaked
    for every text item (!).
    
    Now we create the fontmap for testing, use it throughout the
    duration of the render, and free it when the render is done.

 rsvg-cairo-draw.c   | 11 ++++++-----
 rsvg-cairo-render.c |  6 ++++++
 rsvg-cairo-render.h |  1 +
 3 files changed, 13 insertions(+), 5 deletions(-)

commit 551a3a1cceabd7678cb65b3e71c121a09e492776
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Feb 17 10:06:52 2017 -0600

    rsvg_characters_impl(): Unref the chars node we just created
    
    It didn't leak before the addition of refcounting because the node would
    be freed along with the handle->all_nodes.
    
    Now that handle->all_nodes stores its own ref to the chars node, we
    discard ours here.

 rsvg-base.c | 2 ++
 1 file changed, 2 insertions(+)

commit 3a5f8a3c50799468794a0076dac0d699eff21841
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Feb 17 09:56:06 2017 -0600

    Remove unused import.

 rust/src/node.rs | 1 -
 1 file changed, 1 deletion(-)

commit 21b181b948433cae9477541b74479a08f386ee65
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 16 23:17:31 2017 -0600

    Ref the found node when iterating through children to find a specific node
    
    The callback from rsvg_node_foreach_child() does not get to keep the
    child reference anymore; it has to ref() it.

 rsvg-base.c   | 3 ++-
 rsvg-filter.c | 9 +++++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

commit 6c36a2fdf268e715da2636b4bf201816a2cf7cd9
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 16 23:10:24 2017 -0600

    Oops, don't assert on null nodes

 rsvg-base.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

commit ca5cb86d1756c2864121a69b1a67bb87b663a712
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 16 22:07:14 2017 -0600

    Disable tests/styles for now, as rsvg_node_get_state() is not exported
    
    ... and the test uses that internal function.  Ugh.

 tests/Makefile.am | 3 ++-
 tests/styles.c    | 8 ++++----
 2 files changed, 6 insertions(+), 5 deletions(-)

commit 739c73cfe8c3c9f3a328cf24592faa0945834477
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 16 21:47:55 2017 -0600

    Don't use node1 == node2; use rsvg_node_is_same()
    
    The former is invalid now.

 rsvg-base.c   |  2 +-
 rsvg-styles.c | 12 +++---------
 2 files changed, 4 insertions(+), 10 deletions(-)

commit 4853f512a67dbabfe3285d7e5a3cca51949b7003
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 16 23:09:54 2017 -0600

    fix: implement rsvg_node_add_child()

 rust/src/node.rs | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

commit f3c0ff0b523ef4f9eadf8a362b8e548058c3493b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 16 21:39:17 2017 -0600

    Unref the parent node after calling rsvg_node_get_parent()
    
    This function now returns a new strong reference to the parent, so we
    must unref() it when we are done with it.

 rsvg-base.c         | 20 +++++++++++++-------
 rsvg-cairo-render.c |  8 +++++---
 rsvg-defs.c         |  2 +-
 rsvg-gobject.c      |  2 +-
 rsvg-structure.c    | 41 +++++++++++++++++++++++++++++------------
 rsvg-styles.c       | 20 +++++++++++++++++---
 6 files changed, 66 insertions(+), 27 deletions(-)

commit 2fca04ad9e3bf3850b287b76267d7a3059f505ab
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 16 21:09:21 2017 -0600

    Ref/unref the nodes at the toplevel rsvg-base

 rsvg-base.c    | 14 ++++++++++----
 rsvg-defs.c    |  4 ++--
 rsvg-gobject.c |  3 +++
 3 files changed, 15 insertions(+), 6 deletions(-)

commit aec1ceac95759cdea7330d51c4e877e6edc93347
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 16 21:08:16 2017 -0600

    node.rs: New function rsvg_node_is_same() to compare node pointers
    
    On the C side, two RsvgNode* can be different and yet refer to the same
    Node in the Rust code.  This function can be used to test for that.
    
    That is,
    
      if (node_a == node_b)
    
    is no longer valid in the C code.  Instead, use this:
    
      if (rsvg_node_is_same (node_a, node_b))

 rsvg-private.h   |  4 ++++
 rust/src/lib.rs  |  1 +
 rust/src/node.rs | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 70 insertions(+), 2 deletions(-)

commit 2477434b4c8ec179b372817d464104ba06f20b30
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 15 19:44:40 2017 -0600

    node.rs: Implement rsvg_node_ref() and rsvg_node_unref()
    
    In Rust, we have Rc<Node> for the main refcounted node struct.
    
    We export that to C by boxing as Box<Rc<Node>>, since an Rc<Node>
    normally lives in the stack - that is, the Rc is in the stack, and the
    Node and its refcount are in the heap.
    
    When we ref() a node, we return a new Box:
    
      Box::into_raw (Box::new (node.clone ()))
    
    This means that in C, "x = rsvg_node_ref (y)" gives you back a pointer x
    that is different from y!  Both refer to the same Node in the Rust
    world, and after that the node has one more refcount, as expected.
    
    When we unref() a node, we expect you to call "x = rsvg_node_unref (x)".
    This returns NULL, so your x=NULL after that, i.e. the node that was in
    x is not accessible anymore.

 rsvg-base.c       |  2 +-
 rsvg-private.h    | 15 ++++++++----
 rust/src/cnode.rs |  8 +++----
 rust/src/lib.rs   |  1 +
 rust/src/node.rs  | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 5 files changed, 84 insertions(+), 13 deletions(-)

commit efcbb9c933286c1b729e08df038e350923699239
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 14 19:39:59 2017 -0600

    Use rsvg_node_unref() to get rid of the nodes

 rsvg-gobject.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

commit c29590058adf3269e716e49296ea0efbb45a19d2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 14 19:39:35 2017 -0600

    Don't try to access a node->state directly, use rsvg_node_get_state() instead

 rsvg-cairo-clip.c |  9 ++++++---
 rsvg-cairo-draw.c | 15 ++++++++++-----
 2 files changed, 16 insertions(+), 8 deletions(-)

commit 190b9c271ea2e45b3c7d92a7cfc9bfcc0b541164
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 14 19:26:00 2017 -0600

    Audit casts in callers of rsvg_drawing_ctx_acquire_node_of_type()
    
    The pattern was
    
      RsvgNodeFoo *foo = (RsvgNodeFoo *) rsvg_drawing_ctx_acquire_node_of_type (ctx, FOO);
    
    This is wrong now, since RsvgNode is a Rust structure.
    
    Instead, do
    
      RsvgNode *node;
      RsvgNodeFoo *foo;
    
      node = rsvg_drawing_ctx_acquire_node_of_type (ctx, FOO);
      foo = rsvg_rust_cnode_get_impl (node);

 rsvg-cairo-clip.c   |  8 ++++--
 rsvg-cairo-clip.h   |  2 +-
 rsvg-cairo-draw.c   | 82 ++++++++++++++++++++++++++++++++++-------------------
 rsvg-filter.c       |  8 +++---
 rsvg-filter.h       |  2 +-
 rsvg-paint-server.c |  2 +-
 6 files changed, 66 insertions(+), 38 deletions(-)

commit 0256e231b33213bd3a913ac6695e09c8a83766a3
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 14 18:47:33 2017 -0600

    rsvg-text.[ch]: Move over to rsvg_rust_cnode_new()

 rsvg-text.c | 166 +++++++++++++++++++++++++++++++++---------------------------
 rsvg-text.h |   6 +--
 2 files changed, 95 insertions(+), 77 deletions(-)

commit 935af237ddee0df61b5257aa5e5e87d34c567f88
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 14 18:28:10 2017 -0600

    rsvg-mask.[ch]: Move over to rsvg_rust_cnode_new()

 rsvg-mask.c | 62 ++++++++++++++++++++++++++++++++++---------------------------
 rsvg-mask.h |  6 ++----
 2 files changed, 37 insertions(+), 31 deletions(-)

commit 1b0bc79ec58f46e4a2bdd925ecef18efbe4f4dfe
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 14 18:09:16 2017 -0600

    rsvg-marker.[ch]: Move over to rsvg_rust_cnode_new()

 rsvg-marker.c | 46 ++++++++++++++++++++++++++--------------------
 rsvg-marker.h |  2 +-
 2 files changed, 27 insertions(+), 21 deletions(-)

commit 4164381a3aecd3a76e5673fea8bb1f62208f28a4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 14 17:46:08 2017 -0600

    Move the RsvgNodeChars implementation over to rsvg_rust_cnode_new()

 rsvg-base.c | 60 ++++++++++++++++++++++++++++++++++++++++--------------------
 1 file changed, 40 insertions(+), 20 deletions(-)

commit 75166d4e90e6a243281c23270fd44e21d2923719
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 14 17:45:47 2017 -0600

    rsvg-image.[ch]: Move over to rsvg_rust_cnode_new()

 rsvg-image.c | 47 +++++++++++++++++++++++++----------------------
 rsvg-image.h |  3 +--
 2 files changed, 26 insertions(+), 24 deletions(-)

commit 58cdd65496f15bf926539847504d1072bf639d72
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Feb 10 17:15:20 2017 -0600

    rsvg-paint-server.[ch]: Move over to rsvg_rust_cnode_new()

 rsvg-paint-server.c | 138 +++++++++++++++++++++++++++-------------------------
 rsvg-paint-server.h |  12 ++---
 rsvg-private.h      |   1 -
 rsvg-structure.h    |   1 -
 4 files changed, 75 insertions(+), 77 deletions(-)

commit 3794a2aac624b20ac5f710d40bdd18f026cef2d2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Feb 10 11:30:46 2017 -0600

    rsvg-filter.[ch]: Move over to rsvg_rust_cnode_new()

 rsvg-cairo-draw.c |   2 +-
 rsvg-filter.c     | 905 +++++++++++++++++++++++++-----------------------------
 rsvg-filter.h     |  43 ++-
 3 files changed, 438 insertions(+), 512 deletions(-)

commit a971a55ab5920ebd7ca0426839ca137e0fa26f06
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Feb 10 11:16:30 2017 -0600

    pattern.rs: Remove unused imports

 rust/src/pattern.rs | 4 ----
 1 file changed, 4 deletions(-)

commit 5d524850efaa21ca84706977da2c2fa0f8d74e55
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 9 21:00:22 2017 -0600

    cnode.rs: New function rsvg_rust_cnode_get_impl() to fetch the C-side implementation
    
    We need this for a couple of special cases that are *not*
    implementations of node methods and yet want to use the impl structures.
    For example, rsvg_handle_get_dimensions_sub() wants to peek at the
    toplevel svg->vbox.
    
    We add a Node.get_c_impl() method, and a NodeTrait.get_c_impl().  The
    CNode actually implements this last one by returning its stored
    c_node_impl.  Nodes implemented fully in Rust will return just a null
    pointer.
    
    We can hopefully remove that method once everything is implemented in Rust.
    
    * Move rsvg-structure.[ch] over to rsvg_rust_cnode_new()
    
    The new rsvg_foo_node_new() functions use rsvg_rust_cnode_new()
    internally instead of the old _rsvg_node_init().  Also, the RsvgFooNode
    structs don't have a "super" field anymore, since RsvgNode is now an
    opaque struct from the Rust code.
    
    We re-do the virtual methods for all of rsvg-structure.c.  Other files
    will follow.
    
    * Move rsvg-shapes.[ch] over to rsvg_rust_cnode_new().

 rsvg-base.c        |  25 +--
 rsvg-private.h     |  26 ++-
 rsvg-shapes.c      | 271 ++++++++++++++++--------------
 rsvg-shapes.h      |  14 +-
 rsvg-structure.c   | 483 +++++++++++++++++++++++++----------------------------
 rsvg-structure.h   |  27 +--
 rust/src/cnode.rs  |  17 +-
 rust/src/lib.rs    |   1 +
 rust/src/node.rs   |  24 ++-
 rust/src/shapes.rs |   6 +
 10 files changed, 466 insertions(+), 428 deletions(-)

commit 3cb68cdb73261d2b1df69c9a71aa5bdce89d75d8
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 9 20:59:16 2017 -0600

    node.rs: Free the node.state in our Drop impl
    
    The RsvgState is a C-managed resource, so we need to free it by hand.

 rust/src/node.rs | 10 ++++++++++
 1 file changed, 10 insertions(+)

commit df2f97707e703afa3af7252df878a1df0f2236f5
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 9 17:15:57 2017 -0600

    Remove RsvgNode's declaration from the C code
    
    And make RsvgNodeGroup / RsvgNodeUse / RsvgNodeSymbol private.

 rsvg-private.h   |  8 --------
 rsvg-structure.c | 20 ++++++++++++++++++++
 rsvg-structure.h | 19 -------------------
 3 files changed, 20 insertions(+), 27 deletions(-)

commit 0d0069d364ca8dc6f16f7710527f4f4eebf4ebbd
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 9 16:56:14 2017 -0600

    Implement more generic RsvgNode methods in Rust to replace the C functions
    
    We use the new rsvg_node_get_type() throughout.

 rsvg-base.c         | 63 ++++++-----------------------------------------------
 rsvg-cairo-draw.c   | 12 +++++-----
 rsvg-filter.c       |  8 +++----
 rsvg-paint-server.c |  4 ++--
 rsvg-private.h      | 18 ++++++++++++++-
 rsvg-shapes.c       |  2 +-
 rsvg-structure.c    |  2 +-
 rsvg-text.c         |  4 ++--
 rust/src/lib.rs     |  3 +++
 rust/src/node.rs    | 36 ++++++++++++++++++++++++++++--
 10 files changed, 77 insertions(+), 75 deletions(-)

commit a7ae2be3ee40a9560f1ad571a65a7c608a3f9726
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 9 15:42:46 2017 -0600

    The C-side representation of Nodes is a Box<Rc<Node>>
    
    A refcounted node, in the heap.  Just like a GObject.
    
    The rest of the code doesn't compile yet; this just fixes cnode.rs and
    node.rs to hopefully their semi-final versions.

 rust/src/cnode.rs   | 38 +++++++++++++++++------------------
 rust/src/node.rs    | 58 +++++++++++++++++++++++++----------------------------
 rust/src/pattern.rs |  2 +-
 rust/src/shapes.rs  |  4 ++--
 4 files changed, 48 insertions(+), 54 deletions(-)

commit df6eb69fe45f6d8dfe5fa04ae583aa9603276edc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Jan 26 13:11:14 2017 -0600

    cnode.rs: New stub for having a node implemented in C, accessible from Rust
    
    node.rs: The node_impl needs to be a Box<NodeTrait>, as the actual
    implementation will live in the heap:  can't have a lifetime specifier
    there.
    
    We also have a new rsvg_rust_cnode_new() to create nodes from C and wrap
    the C structures that will actually implement them.

 rust/src/cnode.rs  | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 rust/src/lib.rs    |  9 +++++++
 rust/src/node.rs   | 67 ++++++++++++++++++++++++++----------------------
 rust/src/shapes.rs |  4 +--
 4 files changed, 122 insertions(+), 32 deletions(-)

commit 08748372d923de65ab6df0c2940ecdc81fae5433
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Dec 2 10:00:11 2016 -0600

    node.rs: Start implementing the basic Node struct in Rust

 rsvg-private.h          |   1 +
 rust/src/drawing_ctx.rs |   5 +-
 rust/src/gradient.rs    |   2 +-
 rust/src/lib.rs         |   4 ++
 rust/src/node.rs        | 147 ++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 155 insertions(+), 4 deletions(-)

commit 190cd386c5572f93abede09500b763e59b530b4a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jan 24 21:27:49 2017 -0600

    New function rsvg_node_draw() just to call the vmethod

 rsvg-base.c      | 6 ++++++
 rsvg-private.h   | 3 +++
 rsvg-structure.c | 2 +-
 3 files changed, 10 insertions(+), 1 deletion(-)

commit 8a528b61e42fb55baf40364ffb4e9cfa2eb2a86b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jan 24 21:24:45 2017 -0600

    Rename rsvg_node_draw() to rsvg_node_draw_from_stack()
    
    The new name indicates that we are drawing from the stack of
    nodes-to-draw.
    
    The name rsvg_node_draw() will be used just to call the vmethod.

 rsvg-base.c         | 4 ++--
 rsvg-cairo-draw.c   | 2 +-
 rsvg-cairo-render.c | 2 +-
 rsvg-marker.c       | 2 +-
 rsvg-structure.c    | 8 ++++----
 rsvg-structure.h    | 2 +-
 6 files changed, 10 insertions(+), 10 deletions(-)

commit db7ce753772df059aad2cee1853af19440d24a75
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jan 24 21:12:05 2017 -0600

    New function rsvg_node_set_atts()
    
    It will be called from the Rust code.

 rsvg-base.c    | 8 +++++++-
 rsvg-private.h | 3 +++
 2 files changed, 10 insertions(+), 1 deletion(-)

commit bb4c37bfb016add32e1a90091174d5ca0e7b0fbb
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Wed Feb 15 14:48:27 2017 +0800

    Visual Studio builds: Support Visual Studio 2017
    
    Update the autotools scripts so that we can support Visual Studio 2017 by
    copying the 2013 projects and update items as necessary to produce the
    2017 projects
    
    Note that the toolset version string format changed for Visual Studio 2017, so allow
    one to use a custom toolset version string, otherwise a default toolset version string
    string will be generated as it was before.
    
    Note also that Visual Studio 2017 aims to be compatible with Visual Studio 2015 on the
    CRT level, so it should be possible to use 2017-built binaries with 2015-built binaries.

 build/Makefile-newvs.am      | 14 ++++++++++++--
 build/win32/Makefile.am      |  2 +-
 build/win32/vs12/Makefile.am |  1 +
 build/win32/vs15/Makefile.am | 28 ++++++++++++++++++++++++++++
 configure.ac                 |  8 ++++++++
 5 files changed, 50 insertions(+), 3 deletions(-)

commit b591609e05849f43448b0b4e653c4edbccb9e11c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Feb 9 10:34:53 2017 -0600

    gradient.rs, pattern.rs: Do the fallbacks with a macro for less verbosity
    
    Instead of a bunch of
    
      if self.foo.is_none () { self.foo = Some (default_value); }
    
    for defaults, or instead of
    
      if self.foo.is_none () { self.foo = fallback.foo; }
    
    for fallbacks, we now have a macro that can be invoked as
    
      fallback_to! (self.foo, some_value);
    
    which seems easier to read.
    
    The macro is duplicated for both gradient.rs and pattern.rs, but we will
    refactor those two files into a single thing anyway.

 rust/src/gradient.rs | 76 +++++++++++++++++++++++++++++++++-------------------
 rust/src/pattern.rs  | 67 +++++++++++++++++++++++++++------------------
 2 files changed, 90 insertions(+), 53 deletions(-)

commit 11d530b57a929ca948489d0984ab0c617aa446b3
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 8 13:58:49 2017 -0600

    Test pservers-pattern-09-f.svg from the official test suite
    
    I believe the official reference image is wrong.  The test SVG says that
    both cases in the file should render the fallback color (green), and
    that is indeed what we do.  However, the official reference image only
    renders the first case in green, and doesn't render the second case at
    all.

 .../reftests/svg1.1/pservers-pattern-09-f-ref.png  | Bin 0 -> 5840 bytes
 .../reftests/svg1.1/pservers-pattern-09-f.svg      |  70 +++++++++++++++++++++
 2 files changed, 70 insertions(+)

commit 8a81a5aa8af4ec0e799d0359ae121959f41863b2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 8 13:50:07 2017 -0600

    More test files for patterns

 .../reftests/svg1.1/pservers-pattern-06-f-ref.png  | Bin 0 -> 6103 bytes
 .../reftests/svg1.1/pservers-pattern-06-f.svg      |  65 ++++++++++++++++++++
 .../reftests/svg1.1/pservers-pattern-07-f-ref.png  | Bin 0 -> 7651 bytes
 .../reftests/svg1.1/pservers-pattern-07-f.svg      |  65 ++++++++++++++++++++
 .../reftests/svg1.1/pservers-pattern-08-f-ref.png  | Bin 0 -> 7654 bytes
 .../reftests/svg1.1/pservers-pattern-08-f.svg      |  66 +++++++++++++++++++++
 6 files changed, 196 insertions(+)

commit 0da1da04567336bbf2c76afc754b32e474db3f89
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 8 13:47:47 2017 -0600

    Oops, actually allow recursive fallbacks for patterns and gradients.
    
    Include a new test file for this in patterns.

 rust/src/gradient.rs                               |   4 +-
 rust/src/pattern.rs                                |   4 +-
 .../reftests/svg1.1/pservers-pattern-05-f-ref.png  | Bin 0 -> 7148 bytes
 .../reftests/svg1.1/pservers-pattern-05-f.svg      |  64 +++++++++++++++++++++
 4 files changed, 66 insertions(+), 6 deletions(-)

commit 5936677f710adb54618c79aa7a8bd45cca9ec2e3
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 8 13:27:18 2017 -0600

    Add more test files for patterns

 .../reftests/svg1.1/pservers-pattern-04-f-ref.png  | Bin 0 -> 6160 bytes
 .../reftests/svg1.1/pservers-pattern-04-f.svg      |  70 +++++++++++++++++++++
 2 files changed, 70 insertions(+)

commit 5804c73d0e7ef249a3c5e7c32947b565d7eba036
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 8 12:50:21 2017 -0600

    Use the alternate solid color if a pattern cannot be acquired
    
    This fixes the last case in pservers-pattern-03-f.svg, which has a fill
    with an invalid URI and an alternate color for the fill.

 rsvg-cairo-draw.c                                  |  21 +++--
 .../reftests/svg1.1/pservers-pattern-03-f-ref.png  | Bin 0 -> 6074 bytes
 .../reftests/svg1.1/pservers-pattern-03-f.svg      |  91 +++++++++++++++++++++
 3 files changed, 105 insertions(+), 7 deletions(-)

commit 16ae767a8c43bb35d180923c5a3caad73859e04d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 8 12:38:42 2017 -0600

    Allow pattern specifications to have a fallback color, per the spec
    
    See here: https://www.w3.org/TR/SVG/painting.html#SpecifyingPaint
    
    A paint specification can be a color, or "<funciri> [somecolor]".  If
    the optional color is specified, it will be used in case the paint
    server specified by the IRI is not valid (not found, doesn't have enough
    parameters, or somehow doesn't manage to paint anything).

 rsvg-cairo-draw.c   | 105 ++++++++++++++++++++++++++++++++--------------------
 rsvg-paint-server.c |  63 ++++++++++++++++++++++++-------
 rsvg-paint-server.h |  17 ++++++---
 rust/src/pattern.rs |  17 ++++++---
 4 files changed, 137 insertions(+), 65 deletions(-)

commit 0eb00115efa034c1dfd1f920bcfa76b985b6f9ff
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 8 11:34:57 2017 -0600

    rsvg_get_url_string(): Add argument to return the rest of the string after the IRI
    
    Also, move rsvg_get_url_string() to a more reasonable place than
    rsvg-mask.c (?).

 rsvg-base.c         | 26 ++++++++++++++++++++++++++
 rsvg-mask.c         | 17 -----------------
 rsvg-paint-server.c |  2 +-
 rsvg-private.h      |  2 +-
 rsvg-styles.c       | 18 +++++++++---------
 5 files changed, 37 insertions(+), 28 deletions(-)

commit b4dfdddd34776b514d298886a67b776243a51ecb
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 8 09:25:19 2017 -0600

    Add two tests of SVG patterns

 .../reftests/svg1.1/pservers-pattern-01-b-ref.png  | Bin 0 -> 20788 bytes
 .../reftests/svg1.1/pservers-pattern-01-b.svg      | 108 +++++++++++++++++++++
 .../reftests/svg1.1/pservers-pattern-02-f-ref.png  | Bin 0 -> 35135 bytes
 .../reftests/svg1.1/pservers-pattern-02-f.svg      |  61 ++++++++++++
 4 files changed, 169 insertions(+)

commit 198103a59c208a1562e101d89d90e7068d0018dd
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 8 08:22:38 2017 -0600

    pattern.rs: New file; resolution of pattern fallbacks is now done in Rust

 rsvg-cairo-draw.c       | 178 +++++++++---------------------------------------
 rsvg-cairo-draw.h       |   2 +
 rsvg-paint-server.c     | 140 +++++++++----------------------------
 rsvg-paint-server.h     |  40 ++++++++++-
 rust/Cargo.toml         |   2 +
 rust/src/drawing_ctx.rs |  32 +++++++++
 rust/src/lib.rs         |   7 ++
 rust/src/pattern.rs     | 178 +++++++++++++++++++++++++++++++++++++-----------
 8 files changed, 286 insertions(+), 293 deletions(-)

commit e4a637ae9120217b7750b7e15dc55f57261669ad
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 7 16:25:19 2017 -0600

    Oops, update Cargo.lock

 rust/Cargo.lock | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

commit b6fda463b2a95611d069bfa649cf9afae7c8e1db
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 7 16:21:22 2017 -0600

    marker.rs: Remove unused mut

 rust/src/marker.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 2272e80ceb6890a5e705289a85d0b764e7cb2e18
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 7 14:59:45 2017 -0600

    Remove unused prototypes

 rsvg-paint-server.h | 6 ------
 1 file changed, 6 deletions(-)

commit 6964d9c4aa2df03cbb174adde6a8e442b662f435
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Feb 7 14:22:59 2017 -0600

    Cargo.toml: oops, don't point to files in my homedir...
    
    Right now we depend on a few unmerged features to cairo-rs, hence the
    link to my fork cairo-rs on Github.

 rust/Cargo.toml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

commit bf7c14c34a680cf6b8e96ca547e02b5977063ed2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 1 22:46:47 2017 -0600

    aspect_ratio.rs: Add test for parsing "none"

 rust/src/aspect_ratio.rs | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

commit 5432ad4ec6501737db969a1d894bfe151817591a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 1 22:26:31 2017 -0600

    AspectRatio: make to_u32() and from_u32() methods of AspectRatio

 rust/src/aspect_ratio.rs | 146 +++++++++++++++++++++++------------------------
 1 file changed, 73 insertions(+), 73 deletions(-)

commit 728466f88ce7fe27e357d528ee4c4d07cd0682bb
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 1 21:53:05 2017 -0600

    pattern.rs: Beginning of the Pattern code in Rust

 rust/src/pattern.rs | 328 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 328 insertions(+)

commit d9f178fb710d44d49fa1fed8804857074e2a0d28
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 1 21:59:04 2017 -0600

    Fix: cargo.lock

 rust/Cargo.lock | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

commit 1f2af214e50162f044e33b1f29de02ec954d0e13
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 1 21:52:38 2017 -0600

    Update Cargo.toml and Cargo.lock

 rust/Cargo.lock | 29 +++++++++++++++++------------
 rust/Cargo.toml |  6 ++++--
 2 files changed, 21 insertions(+), 14 deletions(-)

commit fbfdc927ad81705f61cd06719fc60ebf84c29399
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 1 21:52:14 2017 -0600

    util.rs: Move clone_fallback_name() here
    
    We'll use it in the patterns code as well

 rust/src/gradient.rs | 10 ++--------
 rust/src/util.rs     | 12 +++++++++++-
 2 files changed, 13 insertions(+), 9 deletions(-)

commit 4e8b8b848678d756d200448825af4c111e85a24b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jan 27 18:37:14 2017 -0600

    draw_ctx.rs: New functions to get/set the current state's affine
    
    Eventually we'll have a big-hammer function to get the whole current
    state and smaller functions to operate on *that*.  But for now,
    this solves our need to have access to the current affine in pattern.rs.

 rsvg-base.c             | 13 +++++++++++++
 rsvg-private.h          |  6 ++++++
 rust/src/drawing_ctx.rs | 23 +++++++++++++++++++----
 3 files changed, 38 insertions(+), 4 deletions(-)

commit c9f2b2965951f08171be89ae6c12c8d4939236e0
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jan 27 18:43:42 2017 -0600

    util.rs: Move double_equals() and the renamed DBL_EPSILON here

 rust/src/marker.rs | 10 +++-------
 rust/src/util.rs   |  6 ++++++
 2 files changed, 9 insertions(+), 7 deletions(-)

commit 6417cc6df3d52265db7506ceb341a45cdc9dd8ed
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jan 27 15:17:15 2017 -0600

    viewbox.rs: Rust equivalent to RsvgViewBox

 rsvg-private.h      |  1 +
 rust/src/lib.rs     |  6 ++++++
 rust/src/viewbox.rs | 21 +++++++++++++++++++++
 3 files changed, 28 insertions(+)

commit 6dde4f80ed4f99484bb0949b2daa59e334b2e311
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 1 21:18:26 2017 -0600

    Use rsvg_aspect_ratio_compute() from Rust throughout; remove rsvg_preserve_aspect_ratio()

 rsvg-cairo-draw.c        |  7 ++++---
 rsvg-css.h               | 10 ++++++++++
 rsvg-image.c             | 47 ++++-------------------------------------------
 rsvg-image.h             |  3 ---
 rsvg-marker.c            |  8 ++++----
 rsvg-structure.c         | 15 ++++++++-------
 rust/src/aspect_ratio.rs | 16 ++++++++++++++++
 rust/src/lib.rs          |  3 ++-
 8 files changed, 48 insertions(+), 61 deletions(-)

commit 8aaaf38ee194a76a479cc4ce9699e9a74ff243b7
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 1 21:06:51 2017 -0600

    aspect_ratio.rs: New method AspectRatio.compute() to do the actual fitting

 rust/src/aspect_ratio.rs | 93 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 93 insertions(+)

commit 26c2dc2be6b28294100b215ba53438ce823c80bf
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 1 14:54:46 2017 -0600

    Removed rsvg_css_parse_aspect_ratio(); use the Rust rsvg_aspect_ratio_parse() instead

 rsvg-css.c          | 44 --------------------------------------------
 rsvg-css.h          |  4 ++++
 rsvg-image.c        |  4 ++--
 rsvg-image.h        |  4 ++--
 rsvg-marker.c       |  4 ++--
 rsvg-paint-server.c |  2 +-
 rsvg-paint-server.h |  2 +-
 rsvg-structure.c    |  4 ++--
 rsvg-structure.h    |  4 ++--
 9 files changed, 16 insertions(+), 56 deletions(-)

commit 0cde6ad587116931d6039936b42e893a9322d5b1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 1 14:33:17 2017 -0600

    aspect_ratio.rs: New function for the C code, rsvg_aspect_ratio_parse()

 rust/src/aspect_ratio.rs | 29 +++++++++++++++++++++++++++++
 rust/src/lib.rs          |  1 +
 2 files changed, 30 insertions(+)

commit bb55551f632ae1cee5fbb44e8ed8509d703a3fc8
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 1 14:18:00 2017 -0600

    Make aspect_ratio.rs's types public

 rust/src/aspect_ratio.rs | 4 ++--
 rust/src/lib.rs          | 8 ++++++++
 2 files changed, 10 insertions(+), 2 deletions(-)

commit fd24f04c061412325ed4c0d13dff675090baf75b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 1 14:12:01 2017 -0600

    aspect_ratio.rs: Initial docs

 rust/src/aspect_ratio.rs | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

commit 6c02c64d0a1597ea99d20c1292c4ff9755e15c59
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 1 13:55:36 2017 -0600

    aspect_ratio.rs: New module to parse preserveAspectRatio attributes
    
    Per https://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute

 rust/Cargo.lock          |  55 ++++++---
 rust/Cargo.toml          |   1 +
 rust/src/aspect_ratio.rs | 309 +++++++++++++++++++++++++++++++++++++++++++++++
 rust/src/lib.rs          |   5 +
 4 files changed, 350 insertions(+), 20 deletions(-)

commit 41a847e21826bdc839d42956d5ab5a22cab6e32f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Feb 1 09:41:20 2017 -0600

    Add RSVG_ASPECT_RATIO_DEFER even if it is not supported right now
    
    This is for the "defer" flag used in preserveAspectRatio values for
    image elements.

 rsvg-css.c   | 2 ++
 rsvg-css.h   | 3 ++-
 rsvg-image.c | 2 +-
 3 files changed, 5 insertions(+), 2 deletions(-)

commit 11d99a03757473c6bd10ca6837cf027975131d45
Author: Massimo <sixtysix@inwind.it>
Date:   Fri Jan 27 09:22:02 2017 -0600

    marker.rs: New tests for angle bisection, and fix larger-than-half-turn angles
    
    https://bugzilla.gnome.org/show_bug.cgi?id=776297#c3

 rust/src/marker.rs | 109 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 102 insertions(+), 7 deletions(-)

commit 968e4e86c6958d7f7f7f0434a383c023dedba5d4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Jan 27 09:10:37 2017 -0600

    marker.rs: Factor out function to bisect the incoming/outgoing angles
    
    We'll use a separate test for this, as it is still causing trouble.

 rust/src/marker.rs | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

commit 3449c93c7fbb696d4217fd74cfbe68cc43f4353f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Jan 26 20:28:13 2017 -0600

    pattern_apply_fallback(): Don't access node->children->len directly
    
    Use a helper function to see if a node has any children at all.

 rsvg-paint-server.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

commit 1e5a51cf4f58f6d297123c53339b3f9a89a6a869
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Jan 26 20:14:51 2017 -0600

    rsvg-filter.c: Iterate the children of nodes with rsvg_node_foreach_child()

 rsvg-filter.c | 177 +++++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 112 insertions(+), 65 deletions(-)

commit cfc4a514f3a0a548ea200de312f62b809db9c9e4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Jan 26 19:38:13 2017 -0600

    rsvg-filter: Remove the 'upself' nonsense
    
    Rename those variables for their actual purpose

 rsvg-filter.c | 200 +++++++++++++++++++++++++++++-----------------------------
 1 file changed, 100 insertions(+), 100 deletions(-)

commit b795df9bc6d483427846fd4829f7bd0e0ac641d7
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Jan 11 17:53:24 2017 -0600

    Add Cargo.lock to git
    
    Per https://blog.ometer.com/2017/01/10/dear-package-managers-dependency-resolution-results-should-be-in-version-control/
    
    Okay, this is not everything we should do, but it's a start.

 rust/Cargo.lock | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 98 insertions(+)

commit 45d855f82ba6ddaa534f42ee22783a90955bb160
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Jan 11 15:33:31 2017 -0600

    bgo#777155 - Ignore patterns that have close-to-zero dimensions
    
    A fuzzed file yielded a pattern that had (0, 0) for a pattern's width
    and height.  We try to invert a scaling matrix based on those
    dimensions; this would fail for such a pattern.  Now we ignore patterns
    that have unspecified dimensions, or that are very close to zero.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777155

 rsvg-cairo-draw.c                                  | 13 ++++--
 .../render-crash/777155-zero-sized-pattern.svg     | 50 ++++++++++++++++++++++
 2 files changed, 59 insertions(+), 4 deletions(-)

commit 3a3becd2045ed6b5e264bdfbd7c53c799e5abe7c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Jan 11 15:50:26 2017 -0600

    tests/render-crash: New test for things that crash the rendering code
    
    Sometimes we don't have rendering bugs in the generated image, but SVG
    files that just crash the rendering code.  Add a test for this.  If you
    put a SVG under tests/fixtures/render-crash, that file is expected to
    render and *not* crash.  The actual rendered image is ignored.

 tests/Makefile.am    |  6 +++++
 tests/render-crash.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 74 insertions(+)

commit ec3353e89a0dc0063c74c61483ed894cc96341ae
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Jan 4 15:00:00 2017 -0600

    Use a hard-coded font file to render test images, for predictable font rendering
    
    If we depend on whatever Fontconfig finds on the system (or the user's
    configuration, or any number of variables not under our control), "make
    distcheck" will certainly fail.
    
    Now we ship a specific font file (LiberationSans-Regular.ttf) that is
    used only for the reftests.  We use that in addition to explicitly
    setting font rendering options for tests.
    
    Also, re-normalize all the reference images to this new font.
    
    Thanks to Vlad Vukicevic for the idea to use a hard-coded font file, and
    to Christian Hergert for the Fontconfig / Pango incantations.

 Makefile.am                                        |   1 +
 rsvg-cairo-draw.c                                  |  37 +++++++++++++++++++--
 rsvg-cairo-render.c                                |   6 ++++
 rsvg-cairo-render.h                                |   3 ++
 tests/Makefile.am                                  |   1 +
 tests/fixtures/reftests/bugs/340047-ref.png        | Bin 4707 -> 4779 bytes
 tests/fixtures/reftests/bugs/749415-ref.png        | Bin 21402 -> 21862 bytes
 tests/fixtures/reftests/bugs/760180-ref.png        | Bin 8698 -> 8640 bytes
 .../reftests/svg1.1/filters-color-02-b-ref.png     | Bin 6066 -> 6231 bytes
 .../reftests/svg1.1/filters-composite-02-b-ref.png | Bin 15899 -> 16647 bytes
 .../reftests/svg1.1/painting-marker-01-f-ref.png   | Bin 8581 -> 8454 bytes
 .../reftests/svg1.1/painting-marker-02-f-ref.png   | Bin 9237 -> 9172 bytes
 .../reftests/svg1.1/painting-marker-03-f-ref.png   | Bin 28067 -> 29006 bytes
 .../reftests/svg1.1/painting-marker-04-f-ref.png   | Bin 26711 -> 27598 bytes
 .../reftests/svg1.1/painting-marker-06-f-ref.png   | Bin 8698 -> 8640 bytes
 .../reftests/svg1.1/painting-marker-07-f-ref.png   | Bin 5001 -> 5158 bytes
 .../svg1.1/painting-marker-properties-01-f-ref.png | Bin 6097 -> 6175 bytes
 .../reftests/svg1.1/paths-data-01-t-ref.png        | Bin 25377 -> 25436 bytes
 .../reftests/svg1.1/paths-data-02-t-ref.png        | Bin 32835 -> 32917 bytes
 .../reftests/svg1.1/paths-data-03-f-ref.png        | Bin 30742 -> 30956 bytes
 .../reftests/svg1.1/paths-data-04-t-ref.png        | Bin 17951 -> 18160 bytes
 .../reftests/svg1.1/paths-data-05-t-ref.png        | Bin 15946 -> 16048 bytes
 .../reftests/svg1.1/paths-data-06-t-ref.png        | Bin 7143 -> 7255 bytes
 .../reftests/svg1.1/paths-data-07-t-ref.png        | Bin 6473 -> 6646 bytes
 .../reftests/svg1.1/paths-data-08-t-ref.png        | Bin 18934 -> 19314 bytes
 .../reftests/svg1.1/paths-data-09-t-ref.png        | Bin 17284 -> 17595 bytes
 .../reftests/svg1.1/paths-data-10-t-ref.png        | Bin 20633 -> 20995 bytes
 .../reftests/svg1.1/paths-data-12-t-ref.png        | Bin 9603 -> 9704 bytes
 .../reftests/svg1.1/paths-data-13-t-ref.png        | Bin 4400 -> 4526 bytes
 .../reftests/svg1.1/paths-data-14-t-ref.png        | Bin 12393 -> 12525 bytes
 .../reftests/svg1.1/paths-data-15-t-ref.png        | Bin 5862 -> 6001 bytes
 .../reftests/svg1.1/paths-data-16-t-ref.png        | Bin 7651 -> 7879 bytes
 .../reftests/svg1.1/paths-data-17-f-ref.png        | Bin 4287 -> 4464 bytes
 .../reftests/svg1.1/paths-data-18-f-ref.png        | Bin 4644 -> 4781 bytes
 .../reftests/svg1.1/paths-data-19-f-ref.png        | Bin 23376 -> 23515 bytes
 .../reftests/svg1.1/paths-data-20-f-ref.png        | Bin 8996 -> 9144 bytes
 .../reftests/svg1.1/pservers-grad-01-b-ref.png     | Bin 9241 -> 9758 bytes
 .../reftests/svg1.1/pservers-grad-02-b-ref.png     | Bin 22010 -> 22622 bytes
 .../reftests/svg1.1/pservers-grad-03-b-ref.png     | Bin 9534 -> 9805 bytes
 .../reftests/svg1.1/pservers-grad-04-b-ref.png     | Bin 23348 -> 24018 bytes
 .../reftests/svg1.1/pservers-grad-05-b-ref.png     | Bin 63786 -> 65037 bytes
 .../reftests/svg1.1/pservers-grad-06-b-ref.png     | Bin 20711 -> 21260 bytes
 .../reftests/svg1.1/pservers-grad-07-b-ref.png     | Bin 10707 -> 11051 bytes
 .../reftests/svg1.1/pservers-grad-08-b-ref.png     | Bin 37401 -> 38874 bytes
 .../reftests/svg1.1/pservers-grad-09-b-ref.png     | Bin 5885 -> 6207 bytes
 .../reftests/svg1.1/pservers-grad-10-b-ref.png     | Bin 8955 -> 9229 bytes
 .../reftests/svg1.1/pservers-grad-11-b-ref.png     | Bin 56219 -> 56357 bytes
 .../reftests/svg1.1/pservers-grad-12-b-ref.png     | Bin 23336 -> 23747 bytes
 .../reftests/svg1.1/pservers-grad-13-b-ref.png     | Bin 93256 -> 93434 bytes
 .../reftests/svg1.1/pservers-grad-14-b-ref.png     | Bin 24421 -> 24537 bytes
 .../reftests/svg1.1/pservers-grad-15-b-ref.png     | Bin 10028 -> 10180 bytes
 .../reftests/svg1.1/pservers-grad-16-b-ref.png     | Bin 4619 -> 4738 bytes
 .../reftests/svg1.1/pservers-grad-18-b-ref.png     | Bin 4613 -> 4733 bytes
 .../reftests/svg1.1/pservers-grad-21-b-ref.png     | Bin 11389 -> 11549 bytes
 .../reftests/svg1.1/pservers-grad-22-b-ref.png     | Bin 7414 -> 7605 bytes
 .../reftests/svg1.1/pservers-grad-23-f-ref.png     | Bin 6130 -> 6129 bytes
 .../reftests/svg1.1/pservers-grad-24-f-ref.png     | Bin 7252 -> 7313 bytes
 .../svg1.1/pservers-grad-stops-01-f-ref.png        | Bin 6353 -> 6356 bytes
 tests/resources/LiberationSans-Regular.ttf         | Bin 0 -> 139764 bytes
 59 files changed, 46 insertions(+), 2 deletions(-)

commit d55767e71bc87de3304e386665011c4c77881c0c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Jan 4 14:08:26 2017 -0600

    Use a separate function to set PangoContext font options for testing

 rsvg-cairo-draw.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

commit 9cf196542f8fe58580a5566df2bba9406824a78a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Jan 4 15:04:20 2017 -0600

    Post-release version bump to 2.41.1

 configure.ac | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)