[librsvg/tests-for-gobject-introspection] Add test to compare the generated GIR file to a reference
- From: Sven Neumann <sneumann src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg/tests-for-gobject-introspection] Add test to compare the generated GIR file to a reference
- Date: Wed, 27 Jan 2021 16:13:08 +0000 (UTC)
commit 3888315ed132db812399265df63c336da1f2e053
Author: Sven Neumann <sven svenfoo org>
Date: Wed Jan 27 17:10:09 2021 +0100
Add test to compare the generated GIR file to a reference
Work in progress
Should fix #647
.gitignore | 1 +
Cargo.lock | 27 +
Cargo.toml | 2 +
tests/Makefile.am | 1 +
tests/fixtures/gir/Rsvg-2.0-ref.gir | 2385 +++++++++++++++++++++++++++++++++++
tests/src/gir.rs | 62 +
tests/src/main.rs | 3 +
7 files changed, 2481 insertions(+)
---
diff --git a/.gitignore b/.gitignore
index 8e626b78..807b02cf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -80,6 +80,7 @@ po/boldquot.sed
po/en@boldquot.header
po/en@quot.header
po/insert-header.sin
+po/notexist
po/quot.sed
po/remove-potcdate.sin
po/stamp-po
diff --git a/Cargo.lock b/Cargo.lock
index 2349a295..b2a4cc88 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -733,6 +733,20 @@ dependencies = [
"libc",
]
+[[package]]
+name = "html5ever"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aafcf38a1a36118242d29b92e1b08ef84e67e4a5ed06e0a80be20e6a32bfed6b"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever",
+ "proc-macro2 1.0.24",
+ "quote 1.0.7",
+ "syn 1.0.48",
+]
+
[[package]]
name = "idna"
version = "0.2.0"
@@ -820,6 +834,7 @@ dependencies = [
"locale_config",
"lopdf",
"markup5ever",
+ "markup5ever_rcdom",
"matches",
"nalgebra",
"num-traits",
@@ -929,6 +944,18 @@ dependencies = [
"tendril",
]
+[[package]]
+name = "markup5ever_rcdom"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f015da43bcd8d4f144559a3423f4591d69b8ce0652c905374da7205df336ae2b"
+dependencies = [
+ "html5ever",
+ "markup5ever",
+ "tendril",
+ "xml5ever",
+]
+
[[package]]
name = "matches"
version = "0.1.8"
diff --git a/Cargo.toml b/Cargo.toml
index e9557480..ccf738e2 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -57,6 +57,7 @@ criterion = "0.3"
glib = "0.9.0"
libc = "0.2"
lopdf = "0.26.0"
+markup5ever_rcdom = "0.1.0"
matches = "0.1"
pkg-config = "0.3.14"
pango = "0.8.0"
@@ -67,6 +68,7 @@ predicates = "1.0.2"
proptest = "0.10.1"
tempfile = "3"
test-generator = "0.3"
+xml5ever = "0.16.1"
yeslogic-fontconfig-sys = "2.11.1"
[build-dependencies]
diff --git a/tests/Makefile.am b/tests/Makefile.am
index a74e5ae8..82ea38f3 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -49,6 +49,7 @@ test_fixtures = \
$(wildcard $(srcdir)/fixtures/crash/*.svg) \
$(wildcard $(srcdir)/fixtures/crash/*.png) \
$(wildcard $(srcdir)/fixtures/errors/*) \
+ $(wildcard $(srcdir)/fixtures/gir/*.gir) \
$(wildcard $(srcdir)/fixtures/loading/*) \
$(wildcard $(srcdir)/fixtures/reftests/*.css) \
$(wildcard $(srcdir)/fixtures/reftests/*.svg) \
diff --git a/tests/fixtures/gir/Rsvg-2.0-ref.gir b/tests/fixtures/gir/Rsvg-2.0-ref.gir
new file mode 100644
index 00000000..4fdea0c3
--- /dev/null
+++ b/tests/fixtures/gir/Rsvg-2.0-ref.gir
@@ -0,0 +1,2385 @@
+<?xml version="1.0"?>
+<!-- This file was automatically generated from C sources - DO NOT EDIT!
+To affect the contents of this file, edit the original C definitions,
+and/or use gtk-doc annotations. -->
+<repository version="1.2"
+ xmlns="http://www.gtk.org/introspection/core/1.0"
+ xmlns:c="http://www.gtk.org/introspection/c/1.0"
+ xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
+ <include name="GLib" version="2.0"/>
+ <include name="GObject" version="2.0"/>
+ <include name="GdkPixbuf" version="2.0"/>
+ <include name="Gio" version="2.0"/>
+ <include name="cairo" version="1.0"/>
+ <package name="librsvg-2.0"/>
+ <c:include name="librsvg/rsvg.h"/>
+ <namespace name="Rsvg"
+ version="2.0"
+ shared-library="librsvg-2.so.2"
+ c:identifier-prefixes="Rsvg"
+ c:symbol-prefixes="rsvg,librsvg">
+ <function-macro name="CHECK_VERSION"
+ c:identifier="LIBRSVG_CHECK_VERSION"
+ introspectable="0">
+ <doc xml:space="preserve"
+ filename="rsvg-features.h"
+ line="106">This C macro returns #TRUE if the the version of librsvg being
+compiled against is the same or newer than the specified version.
+
+Note that this a compile-time check for C programs. If you want a
+run-time check for the version of librsvg being used, or if you are
+using another programming language, see the variables
+@rsvg_major_version, @rsvg_minor_version, @rsvg_micro_version
+instead.</doc>
+ <source-position filename="rsvg-features.h" line="121"/>
+ <parameters>
+ <parameter name="major">
+ <doc xml:space="preserve"
+ filename="rsvg-features.h"
+ line="108">component for the major version to check</doc>
+ </parameter>
+ <parameter name="minor">
+ <doc xml:space="preserve"
+ filename="rsvg-features.h"
+ line="109">component for the minor version to check</doc>
+ </parameter>
+ <parameter name="micro">
+ <doc xml:space="preserve"
+ filename="rsvg-features.h"
+ line="110">component for the micro version to check</doc>
+ </parameter>
+ </parameters>
+ </function-macro>
+ <function-macro name="DEPRECATED_FOR"
+ c:identifier="RSVG_DEPRECATED_FOR"
+ introspectable="0">
+ <source-position filename="rsvg.h" line="47"/>
+ <parameters>
+ <parameter name="f">
+ </parameter>
+ </parameters>
+ </function-macro>
+ <record name="DimensionData"
+ c:type="RsvgDimensionData"
+ deprecated="1"
+ deprecated-version="2.46.">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="409">Dimensions of an SVG image from rsvg_handle_get_dimensions(), or an
+individual element from rsvg_handle_get_dimensions_sub(). Please see
+the deprecation documentation for those functions.</doc>
+ <doc-deprecated xml:space="preserve">FIXME: point to deprecation documentation.</doc-deprecated>
+ <source-position filename="rsvg.h" line="427"/>
+ <field name="width" writable="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="411">SVG's width, in pixels</doc>
+ <type name="gint" c:type="int"/>
+ </field>
+ <field name="height" writable="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="412">SVG's height, in pixels</doc>
+ <type name="gint" c:type="int"/>
+ </field>
+ <field name="em" writable="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="413">SVG's original width, unmodified by #RsvgSizeFunc</doc>
+ <type name="gdouble" c:type="gdouble"/>
+ </field>
+ <field name="ex" writable="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="414">SVG's original height, unmodified by #RsvgSizeFunc</doc>
+ <type name="gdouble" c:type="gdouble"/>
+ </field>
+ </record>
+ <enumeration name="Error"
+ glib:type-name="RsvgError"
+ glib:get-type="rsvg_error_get_type"
+ c:type="RsvgError"
+ glib:error-domain="rsvg-error-quark">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="55">An enumeration representing possible errors</doc>
+ <member name="failed"
+ value="0"
+ c:identifier="RSVG_ERROR_FAILED"
+ glib:nick="failed">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="57">the request failed</doc>
+ </member>
+ <function name="quark" c:identifier="rsvg_error_quark">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="67">The error domain for RSVG</doc>
+ <return-value transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="72">The error domain</doc>
+ <type name="GLib.Quark" c:type="GQuark"/>
+ </return-value>
+ </function>
+ </enumeration>
+ <function-macro name="HANDLE"
+ c:identifier="RSVG_HANDLE"
+ introspectable="0">
+ <source-position filename="rsvg.h" line="368"/>
+ <parameters>
+ <parameter name="obj">
+ </parameter>
+ </parameters>
+ </function-macro>
+ <function-macro name="HANDLE_CLASS"
+ c:identifier="RSVG_HANDLE_CLASS"
+ introspectable="0">
+ <source-position filename="rsvg.h" line="369"/>
+ <parameters>
+ <parameter name="klass">
+ </parameter>
+ </parameters>
+ </function-macro>
+ <function-macro name="HANDLE_GET_CLASS"
+ c:identifier="RSVG_HANDLE_GET_CLASS"
+ introspectable="0">
+ <source-position filename="rsvg.h" line="372"/>
+ <parameters>
+ <parameter name="obj">
+ </parameter>
+ </parameters>
+ </function-macro>
+ <class name="Handle"
+ c:symbol-prefix="handle"
+ c:type="RsvgHandle"
+ parent="GObject.Object"
+ glib:type-name="RsvgHandle"
+ glib:get-type="rsvg_handle_get_type"
+ glib:type-struct="HandleClass">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="396">Lets you load SVG data and render it.</doc>
+ <source-position filename="rsvg.h" line="394"/>
+ <constructor name="new" c:identifier="rsvg_handle_new">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="541">Returns a new rsvg handle. Must be freed with @g_object_unref. This
+handle can be used to load an image.
+
+The preferred way of loading SVG data into the returned #RsvgHandle is with
+rsvg_handle_read_stream_sync().
+
+The deprecated way of loading SVG data is with rsvg_handle_write() and
+rsvg_handle_close(); note that these require buffering the entire file
+internally, and for this reason it is better to use the stream functions:
+rsvg_handle_new_from_stream_sync(), rsvg_handle_read_stream_sync(), or
+rsvg_handle_new_from_gfile_sync().
+
+After loading the #RsvgHandle with data, you can render it using Cairo or get
+a GdkPixbuf from it. When finished, free the handle with g_object_unref(). No
+more than one image can be loaded with one handle.
+
+Note that this function creates an #RsvgHandle with no flags set. If you
+require any of #RsvgHandleFlags to be set, use any of
+rsvg_handle_new_with_flags(), rsvg_handle_new_from_stream_sync(), or
+rsvg_handle_new_from_gfile_sync().</doc>
+ <source-position filename="rsvg.h" line="568"/>
+ <return-value transfer-ownership="full">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="565">A new #RsvgHandle with no flags set.</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </return-value>
+ </constructor>
+ <constructor name="new_from_data"
+ c:identifier="rsvg_handle_new_from_data"
+ version="2.14"
+ throws="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1106">Loads the SVG specified by @data. Note that this function creates an
+#RsvgHandle without a base URL, and without any #RsvgHandleFlags. If you
+need these, use rsvg_handle_new_from_stream_sync() instead by creating
+a #GMemoryInputStream from your data.</doc>
+ <source-position filename="rsvg.h" line="1121"/>
+ <return-value transfer-ownership="full">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1117">A #RsvgHandle or %NULL if an error occurs.</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </return-value>
+ <parameters>
+ <parameter name="data" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1108">The SVG data</doc>
+ <array length="1" zero-terminated="0" c:type="const guint8*">
+ <type name="guint8" c:type="guint8"/>
+ </array>
+ </parameter>
+ <parameter name="data_len" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1109">The length of @data, in bytes</doc>
+ <type name="gsize" c:type="gsize"/>
+ </parameter>
+ </parameters>
+ </constructor>
+ <constructor name="new_from_file"
+ c:identifier="rsvg_handle_new_from_file"
+ version="2.14"
+ throws="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1123">Loads the SVG specified by @file_name. Note that this function, like
+rsvg_handle_new(), does not specify any loading flags for the resulting
+handle. If you require the use of #RsvgHandleFlags, use
+rsvg_handle_new_from_gfile_sync().</doc>
+ <source-position filename="rsvg.h" line="1137"/>
+ <return-value transfer-ownership="full">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1133">A #RsvgHandle or %NULL if an error occurs.</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </return-value>
+ <parameters>
+ <parameter name="filename" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1125">The file name to load, or a URI.</doc>
+ <type name="utf8" c:type="const gchar*"/>
+ </parameter>
+ </parameters>
+ </constructor>
+ <constructor name="new_from_gfile_sync"
+ c:identifier="rsvg_handle_new_from_gfile_sync"
+ version="2.32"
+ throws="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1048">Creates a new #RsvgHandle for @file.
+
+This function sets the "base file" of the handle to be @file itself, so SVG
+elements like <literal>&lt;image&gt;</literal> which reference external
+resources will be resolved relative to the location of @file.
+
+If @cancellable is not %NULL, then the operation can be cancelled by
+triggering the cancellable object from another thread. If the
+operation was cancelled, the error %G_IO_ERROR_CANCELLED will be
+returned in @error.</doc>
+ <source-position filename="rsvg.h" line="1071"/>
+ <return-value transfer-ownership="full">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1066">a new #RsvgHandle on success, or %NULL with @error filled in</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </return-value>
+ <parameters>
+ <parameter name="file" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1050">a #GFile</doc>
+ <type name="Gio.File" c:type="GFile*"/>
+ </parameter>
+ <parameter name="flags" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1051">flags from #RsvgHandleFlags</doc>
+ <type name="HandleFlags" c:type="RsvgHandleFlags"/>
+ </parameter>
+ <parameter name="cancellable"
+ transfer-ownership="none"
+ nullable="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1052">a #GCancellable, or %NULL</doc>
+ <type name="Gio.Cancellable" c:type="GCancellable*"/>
+ </parameter>
+ </parameters>
+ </constructor>
+ <constructor name="new_from_stream_sync"
+ c:identifier="rsvg_handle_new_from_stream_sync"
+ version="2.32"
+ throws="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1076">Creates a new #RsvgHandle for @stream.
+
+This function sets the "base file" of the handle to be @base_file if
+provided. SVG elements like <literal>&lt;image&gt;</literal> which reference
+external resources will be resolved relative to the location of @base_file.
+
+If @cancellable is not %NULL, then the operation can be cancelled by
+triggering the cancellable object from another thread. If the
+operation was cancelled, the error %G_IO_ERROR_CANCELLED will be
+returned in @error.</doc>
+ <source-position filename="rsvg.h" line="1100"/>
+ <return-value transfer-ownership="full">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1095">a new #RsvgHandle on success, or %NULL with @error filled in</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </return-value>
+ <parameters>
+ <parameter name="input_stream" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1078">a #GInputStream</doc>
+ <type name="Gio.InputStream" c:type="GInputStream*"/>
+ </parameter>
+ <parameter name="base_file"
+ transfer-ownership="none"
+ nullable="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1079">a #GFile, or %NULL</doc>
+ <type name="Gio.File" c:type="GFile*"/>
+ </parameter>
+ <parameter name="flags" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1080">flags from #RsvgHandleFlags</doc>
+ <type name="HandleFlags" c:type="RsvgHandleFlags"/>
+ </parameter>
+ <parameter name="cancellable"
+ transfer-ownership="none"
+ nullable="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1081">a #GCancellable, or %NULL</doc>
+ <type name="Gio.Cancellable" c:type="GCancellable*"/>
+ </parameter>
+ </parameters>
+ </constructor>
+ <constructor name="new_with_flags"
+ c:identifier="rsvg_handle_new_with_flags"
+ version="2.36">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="986">Creates a new #RsvgHandle with flags @flags. After calling this function,
+you can feed the resulting handle with SVG data by using
+rsvg_handle_read_stream_sync().</doc>
+ <source-position filename="rsvg.h" line="999"/>
+ <return-value transfer-ownership="full">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="994">a new #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </return-value>
+ <parameters>
+ <parameter name="flags" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="988">flags from #RsvgHandleFlags</doc>
+ <type name="HandleFlags" c:type="RsvgHandleFlags"/>
+ </parameter>
+ </parameters>
+ </constructor>
+ <method name="close"
+ c:identifier="rsvg_handle_close"
+ deprecated="1"
+ deprecated-version="2.46."
+ throws="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="600">Closes @handle, to indicate that loading the image is complete. This will
+return %TRUE if the loader closed successfully and the SVG data was parsed
+correctly. Note that @handle isn't freed until @g_object_unref is called.</doc>
+ <doc-deprecated xml:space="preserve">Use rsvg_handle_read_stream_sync() or the constructor
+functions rsvg_handle_new_from_gfile_sync() or
+rsvg_handle_new_from_stream_sync(). See the deprecation notes for
+rsvg_handle_write() for more information.</doc-deprecated>
+ <source-position filename="rsvg.h" line="617"/>
+ <return-value transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="609">%TRUE on success, or %FALSE on error.</doc>
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="602">a #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ </parameters>
+ </method>
+ <method name="get_base_uri"
+ c:identifier="rsvg_handle_get_base_uri"
+ version="2.8">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="670">Gets the base uri for this #RsvgHandle.</doc>
+ <source-position filename="rsvg.h" line="680"/>
+ <return-value transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="676">the base uri, possibly null</doc>
+ <type name="utf8" c:type="const char*"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="672">A #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ </parameters>
+ </method>
+ <method name="get_dimensions"
+ c:identifier="rsvg_handle_get_dimensions"
+ version="2.14">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="697">Get the SVG's size. Do not call from within the size_func callback, because
+an infinite loop will occur.
+
+This function depends on the #RsvgHandle's DPI to compute dimensions in
+pixels, so you should call rsvg_handle_set_dpi() beforehand.</doc>
+ <source-position filename="rsvg.h" line="711"/>
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="699">A #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="dimension_data"
+ direction="out"
+ caller-allocates="1"
+ transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="700">A place to store the SVG's size</doc>
+ <type name="DimensionData" c:type="RsvgDimensionData*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="get_dimensions_sub"
+ c:identifier="rsvg_handle_get_dimensions_sub"
+ version="2.22"
+ deprecated="1"
+ deprecated-version="2.46.">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="713">Get the size of a subelement of the SVG file. Do not call from within the
+size_func callback, because an infinite loop will occur.
+
+This function depends on the #RsvgHandle's DPI to compute dimensions in
+pixels, so you should call rsvg_handle_set_dpi() beforehand.
+
+Element IDs should look like an URL fragment identifier; for example, pass
+"##foo" (hash <literal>foo</literal>) to get the geometry of the element that
+has an <literal>id="foo"</literal> attribute.</doc>
+ <doc-deprecated xml:space="preserve">Use rsvg_handle_get_geometry_for_layer()
instead.</doc-deprecated>
+ <source-position filename="rsvg.h" line="736"/>
+ <return-value transfer-ownership="none">
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="715">A #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="dimension_data"
+ direction="out"
+ caller-allocates="1"
+ transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="716">A place to store the SVG's size</doc>
+ <type name="DimensionData" c:type="RsvgDimensionData*"/>
+ </parameter>
+ <parameter name="id"
+ transfer-ownership="none"
+ nullable="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="717">An element's id within the SVG, starting with "##" (a single
+hash character), for example, "##layer1". This notation corresponds to a
+URL's fragment ID. Alternatively, pass %NULL to use the whole SVG.</doc>
+ <type name="utf8" c:type="const char*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="get_geometry_for_element"
+ c:identifier="rsvg_handle_get_geometry_for_element"
+ version="2.46"
+ throws="1">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="292">Computes the ink rectangle and logical rectangle of a single SVG element.
+
+While `rsvg_handle_get_geometry_for_layer` computes the geometry of an SVG element subtree with
+its transformation matrix, this other function will compute the element's geometry
+as if it were being rendered under an identity transformation by itself. That is,
+the resulting geometry is as if the element got extracted by itself from the SVG.
+
+This function is the counterpart to `rsvg_handle_render_element`.
+
+Element IDs should look like an URL fragment identifier; for example, pass
+"##foo" (hash <literal>foo</literal>) to get the geometry of the element that
+has an <literal>id="foo"</literal> attribute.
+
+The "ink rectangle" is the bounding box that would be painted
+for fully- stroked and filled elements.
+
+The "logical rectangle" just takes into account the unstroked
+paths and text outlines.
+
+Note that these bounds are not minimum bounds; for example,
+clipping paths are not taken into account.
+
+You can pass #NULL for the @id if you want to measure all
+the elements in the SVG, i.e. to measure everything from the
+root element.
+
+This operation is not constant-time, as it involves going through all
+the child elements.
+
+API ordering: This function must be called on a fully-loaded @handle. See
+the section <ulink url="#API-ordering">API ordering</ulink> for details.
+
+Panics: this function will panic if the @handle is not fully-loaded.</doc>
+ <source-position filename="rsvg-cairo.h" line="340"/>
+ <return-value transfer-ownership="none">
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="294">An #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="id"
+ transfer-ownership="none"
+ nullable="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="295">An element's id within the SVG, starting with "##" (a single
+hash character), for example, "##layer1". This notation corresponds to a
+URL's fragment ID. Alternatively, pass %NULL to compute the geometry for the
+whole SVG.</doc>
+ <type name="utf8" c:type="const char*"/>
+ </parameter>
+ <parameter name="out_ink_rect"
+ direction="out"
+ caller-allocates="1"
+ transfer-ownership="none"
+ optional="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="299">Place to store the ink rectangle of the element.</doc>
+ <type name="Rectangle" c:type="RsvgRectangle*"/>
+ </parameter>
+ <parameter name="out_logical_rect"
+ direction="out"
+ caller-allocates="1"
+ transfer-ownership="none"
+ optional="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="300">Place to store the logical rectangle of the element.</doc>
+ <type name="Rectangle" c:type="RsvgRectangle*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="get_geometry_for_layer"
+ c:identifier="rsvg_handle_get_geometry_for_layer"
+ version="2.46"
+ throws="1">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="197">Computes the ink rectangle and logical rectangle of an SVG element, or the
+whole SVG, as if the whole SVG were rendered to a specific viewport.
+
+Element IDs should look like an URL fragment identifier; for example, pass
+"##foo" (hash <literal>foo</literal>) to get the geometry of the element that
+has an <literal>id="foo"</literal> attribute.
+
+The "ink rectangle" is the bounding box that would be painted
+for fully- stroked and filled elements.
+
+The "logical rectangle" just takes into account the unstroked
+paths and text outlines.
+
+Note that these bounds are not minimum bounds; for example,
+clipping paths are not taken into account.
+
+You can pass #NULL for the @id if you want to measure all
+the elements in the SVG, i.e. to measure everything from the
+root element.
+
+This operation is not constant-time, as it involves going through all
+the child elements.
+
+API ordering: This function must be called on a fully-loaded @handle. See
+the section <ulink url="#API-ordering">API ordering</ulink> for details.
+
+Panics: this function will panic if the @handle is not fully-loaded.</doc>
+ <source-position filename="rsvg-cairo.h" line="240"/>
+ <return-value transfer-ownership="none">
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="199">An #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="id"
+ transfer-ownership="none"
+ nullable="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="200">An element's id within the SVG, starting with "##" (a single
+hash character), for example, "##layer1". This notation corresponds to a
+URL's fragment ID. Alternatively, pass %NULL to compute the geometry for the
+whole SVG.</doc>
+ <type name="utf8" c:type="const char*"/>
+ </parameter>
+ <parameter name="viewport" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="204">Viewport size at which the whole SVG would be fitted.</doc>
+ <type name="Rectangle" c:type="const RsvgRectangle*"/>
+ </parameter>
+ <parameter name="out_ink_rect"
+ direction="out"
+ caller-allocates="1"
+ transfer-ownership="none"
+ optional="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="205">Place to store the ink rectangle of the element.</doc>
+ <type name="Rectangle" c:type="RsvgRectangle*"/>
+ </parameter>
+ <parameter name="out_logical_rect"
+ direction="out"
+ caller-allocates="1"
+ transfer-ownership="none"
+ optional="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="206">Place to store the logical rectangle of the element.</doc>
+ <type name="Rectangle" c:type="RsvgRectangle*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="get_intrinsic_dimensions"
+ c:identifier="rsvg_handle_get_intrinsic_dimensions"
+ version="2.46">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="839">Queries the <literal>width</literal>,
<literal>height</literal>, and
+<literal>viewBox</literal> attributes in an SVG document.
+
+If you are calling this function to compute a scaling factor to render the SVG,
+consider simply using rsvg_handle_render_document() instead; it will do the
+scaling computations automatically.
+
+As an example, the following SVG element has a <literal>width</literal> of 100 pixels and a
<literal>height</literal> of 400 pixels, but no <literal>viewBox</literal>:
+
+|[
+<svg xmlns="http://www.w3.org/2000/svg" width="100" height="400">
+]|
+
+Conversely, the following element has a <literal>viewBox</literal>, but no
<literal>width</literal> or <literal>height</literal>:
+
+|[
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 400">
+]|
+
+Note that the #RsvgLength return values have #RsvgUnits in them; you should
+not assume that they are always in pixels. For example, the following SVG element
+will return a width value whose <literal>units</literal> field is RSVG_UNIT_MM.
+
+|[
+<svg xmlns="http://www.w3.org/2000/svg" width="210mm" height="297mm">
+]|
+
+API ordering: This function must be called on a fully-loaded @handle. See
+the section <ulink url="#API-ordering">API ordering</ulink> for details.
+
+Panics: this function will panic if the @handle is not fully-loaded.</doc>
+ <source-position filename="rsvg.h" line="884"/>
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="841">An #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="out_has_width"
+ direction="out"
+ caller-allocates="0"
+ transfer-ownership="full"
+ optional="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="842">Will be set to #TRUE if the toplevel SVG has a
<literal>width</literal> attribute</doc>
+ <type name="gboolean" c:type="gboolean*"/>
+ </parameter>
+ <parameter name="out_width"
+ direction="out"
+ caller-allocates="1"
+ transfer-ownership="none"
+ optional="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="843">Will be set to the value of the <literal>width</literal> attribute
in the toplevel SVG</doc>
+ <type name="Length" c:type="RsvgLength*"/>
+ </parameter>
+ <parameter name="out_has_height"
+ direction="out"
+ caller-allocates="0"
+ transfer-ownership="full"
+ optional="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="844">Will be set to #TRUE if the toplevel SVG has a
<literal>height</literal> attribute</doc>
+ <type name="gboolean" c:type="gboolean*"/>
+ </parameter>
+ <parameter name="out_height"
+ direction="out"
+ caller-allocates="1"
+ transfer-ownership="none"
+ optional="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="845">Will be set to the value of the <literal>height</literal> attribute
in the toplevel SVG</doc>
+ <type name="Length" c:type="RsvgLength*"/>
+ </parameter>
+ <parameter name="out_has_viewbox"
+ direction="out"
+ caller-allocates="0"
+ transfer-ownership="full"
+ optional="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="846">Will be set to #TRUE if the toplevel SVG has a
<literal>viewBox</literal> attribute</doc>
+ <type name="gboolean" c:type="gboolean*"/>
+ </parameter>
+ <parameter name="out_viewbox"
+ direction="out"
+ caller-allocates="1"
+ transfer-ownership="none"
+ optional="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="847">Will be set to the value of the <literal>viewBox</literal> attribute
in the toplevel SVG</doc>
+ <type name="Rectangle" c:type="RsvgRectangle*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="get_intrinsic_size_in_pixels"
+ c:identifier="rsvg_handle_get_intrinsic_size_in_pixels"
+ version="2.52">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="892">Converts an SVG document's intrinsic dimensions to pixels, and returns the result.
+
+This function is able to extract the size in pixels from an SVG document if the
+document has both <literal>width</literal> and <literal>height</literal> attributes
+with physical units (px, in, cm, mm, pt, pc) or font-based units (em, ex). For
+physical units, the dimensions are normalized to pixels using the dots-per-inch (DPI)
+value set previously with rsvg_handle_set_dpi(). For font-based units, this function
+uses the computed value of the `font-size` property for the toplevel
+<literal>&lt;svg&gt;</literal> element. In those cases, this function returns %TRUE.
+
+This function is not able to extract the size in pixels directly from the intrinsic
+dimensions of the SVG document if the <literal>width</literal> or
+<literal>height</literal> are in percentage units (or if they do not exist, in which
+case the SVG spec mandates that they default to 100%), as these require a
+<firstterm>viewport</firstterm> to be resolved to a final size. In this case, the
+function returns %FALSE.
+
+For example, the following document fragment has intrinsic dimensions that will resolve
+to 20x30 pixels.
+
+|[
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="30"/>
+]|
+
+Similarly, if the DPI is set to 96, this document will resolve to 192x288 pixels (i.e. 96*2 x 96*3).
+
+|[
+<svg xmlns="http://www.w3.org/2000/svg" width="2in" height="3in"/>
+]|
+
+The dimensions of the following documents cannot be resolved to pixels directly, and
+this function would return %FALSE for them:
+
+|[
+<!-- Needs a viewport against which to compute the percentages. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%"/>
+
+<!-- Does not have intrinsic width/height, just a 1:2 aspect ratio which
+ needs to be fitted within a viewport. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 200"/>
+]|</doc>
+ <source-position filename="rsvg.h" line="948"/>
+ <return-value transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="941">%TRUE if the dimensions could be converted directly to pixels; in this case
+@out_width and @out_height will be set accordingly. If the dimensions cannot be converted
+to pixels, returns %FALSE and puts 0.0 in both @out_width and @out_height.</doc>
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="894">An #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="out_width"
+ direction="out"
+ caller-allocates="0"
+ transfer-ownership="full"
+ optional="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="895">Will be set to the computed width</doc>
+ <type name="gdouble" c:type="gdouble*"/>
+ </parameter>
+ <parameter name="out_height"
+ direction="out"
+ caller-allocates="0"
+ transfer-ownership="full"
+ optional="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="896">Will be set to the computed height</doc>
+ <type name="gdouble" c:type="gdouble*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="get_pixbuf" c:identifier="rsvg_handle_get_pixbuf">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="619">Returns the pixbuf loaded by @handle. The pixbuf returned will be reffed, so
+the caller of this function must assume that ref. If insufficient data has
+been read to create the pixbuf, or an error occurred in loading, then %NULL
+will be returned. Note that the pixbuf may not be complete until
+@rsvg_handle_close has been called.
+
+This function depends on the #RsvgHandle's DPI to compute dimensions in
+pixels, so you should call rsvg_handle_set_dpi() beforehand.</doc>
+ <source-position filename="rsvg.h" line="635"/>
+ <return-value transfer-ownership="full" nullable="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="632">the pixbuf loaded by @handle, or %NULL.</doc>
+ <type name="GdkPixbuf.Pixbuf" c:type="GdkPixbuf*"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="621">An #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ </parameters>
+ </method>
+ <method name="get_pixbuf_sub"
+ c:identifier="rsvg_handle_get_pixbuf_sub"
+ version="2.14">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="637">Creates a #GdkPixbuf the same size as the entire SVG loaded into @handle, but
+only renders the sub-element that has the specified @id (and all its
+sub-sub-elements recursively). If @id is #NULL, this function renders the
+whole SVG.
+
+This function depends on the #RsvgHandle's DPI to compute dimensions in
+pixels, so you should call rsvg_handle_set_dpi() beforehand.
+
+If you need to render an image which is only big enough to fit a particular
+sub-element of the SVG, consider using rsvg_handle_render_cairo_sub(), upon a
+surface that is just the size returned by rsvg_handle_get_dimensions_sub().
+You will need to offset the rendering by the amount returned in
+rsvg_handle_get_position_sub().
+
+Element IDs should look like an URL fragment identifier; for example, pass
+"##foo" (hash <literal>foo</literal>) to get the geometry of the element that
+has an <literal>id="foo"</literal> attribute.</doc>
+ <source-position filename="rsvg.h" line="668"/>
+ <return-value transfer-ownership="full" nullable="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="662">a pixbuf, or %NULL if an error occurs
+during rendering.</doc>
+ <type name="GdkPixbuf.Pixbuf" c:type="GdkPixbuf*"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="639">An #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="id"
+ transfer-ownership="none"
+ nullable="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="640">An element's id within the SVG, starting with "##" (a single
+hash character), for example, "##layer1". This notation corresponds to a
+URL's fragment ID. Alternatively, pass %NULL to use the whole SVG.</doc>
+ <type name="utf8" c:type="const char*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="get_position_sub"
+ c:identifier="rsvg_handle_get_position_sub"
+ version="2.22"
+ deprecated="1"
+ deprecated-version="2.46.">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="740">Get the position of a subelement of the SVG file. Do not call from within
+the size_func callback, because an infinite loop will occur.
+
+This function depends on the #RsvgHandle's DPI to compute dimensions in
+pixels, so you should call rsvg_handle_set_dpi() beforehand.
+
+Element IDs should look like an URL fragment identifier; for example, pass
+"##foo" (hash <literal>foo</literal>) to get the geometry of the element that
+has an <literal>id="foo"</literal> attribute.</doc>
+ <doc-deprecated xml:space="preserve">Use rsvg_handle_get_geometry_for_layer()
instead.</doc-deprecated>
+ <source-position filename="rsvg.h" line="763"/>
+ <return-value transfer-ownership="none">
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="742">A #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="position_data"
+ direction="out"
+ caller-allocates="1"
+ transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="743">A place to store the SVG fragment's position.</doc>
+ <type name="PositionData" c:type="RsvgPositionData*"/>
+ </parameter>
+ <parameter name="id"
+ transfer-ownership="none"
+ nullable="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="744">An element's id within the SVG, starting with "##" (a single
+hash character), for example, "##layer1". This notation corresponds to a
+URL's fragment ID. Alternatively, pass %NULL to use the whole SVG.</doc>
+ <type name="utf8" c:type="const char*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="has_sub" c:identifier="rsvg_handle_has_sub" version="2.22">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="767">Checks whether the element @id exists in the SVG document.
+
+Element IDs should look like an URL fragment identifier; for example, pass
+"##foo" (hash <literal>foo</literal>) to get the geometry of the element that
+has an <literal>id="foo"</literal> attribute.</doc>
+ <source-position filename="rsvg.h" line="785"/>
+ <return-value transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="780">%TRUE if @id exists in the SVG document, %FALSE otherwise.</doc>
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="769">a #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="id" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="770">An element's id within the SVG, starting with "##" (a single hash
+character), for example, "##layer1". This notation corresponds to a URL's
+fragment ID.</doc>
+ <type name="utf8" c:type="const char*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="internal_set_testing"
+ c:identifier="rsvg_handle_internal_set_testing">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1167">Do not call this function. This is intended for librsvg's internal
+test suite only.</doc>
+ <source-position filename="rsvg.h" line="1176"/>
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1169">a #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="testing" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1170">Whether to enable testing mode</doc>
+ <type name="gboolean" c:type="gboolean"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="read_stream_sync"
+ c:identifier="rsvg_handle_read_stream_sync"
+ version="2.32"
+ throws="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1017">Reads @stream and writes the data from it to @handle.
+
+Before calling this function, you may need to call rsvg_handle_set_base_uri()
+or rsvg_handle_set_base_gfile() to set the "base file" for resolving
+references to external resources. SVG elements like
+<literal>&lt;image&gt;</literal> which reference external resources will be
+resolved relative to the location you specify with those functions.
+
+If @cancellable is not %NULL, then the operation can be cancelled by
+triggering the cancellable object from another thread. If the
+operation was cancelled, the error %G_IO_ERROR_CANCELLED will be
+returned.</doc>
+ <source-position filename="rsvg.h" line="1043"/>
+ <return-value transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1037">%TRUE if reading @stream succeeded, or %FALSE otherwise
+ with @error filled in</doc>
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1019">a #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="stream" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1020">a #GInputStream</doc>
+ <type name="Gio.InputStream" c:type="GInputStream*"/>
+ </parameter>
+ <parameter name="cancellable"
+ transfer-ownership="none"
+ nullable="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1021">a #GCancellable, or %NULL</doc>
+ <type name="Gio.Cancellable" c:type="GCancellable*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="render_cairo"
+ c:identifier="rsvg_handle_render_cairo"
+ version="2.14"
+ deprecated="1"
+ deprecated-version="2.52.">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="36">Draws a loaded SVG handle to a Cairo context. Please try to use
+rsvg_handle_render_document() instead, which allows you to pick the size
+at which the document will be rendered.
+
+Historically this function has picked a size by itself, based on the following rules:
+
+<itemizedlist>
+ <listitem>
+ If the SVG document has both <literal>width</literal> and
<literal>height</literal>
+ attributes with physical units (px, in, cm, mm, pt, pc) or font-based units (em,
+ ex), the function computes the size directly based on the dots-per-inch (DPI) you
+ have configured with rsvg_handle_set_dpi(). This is the same approach as
+ rsvg_handle_get_intrinsic_size_in_pixels().
+ </listitem>
+ <listitem>
+ Otherwise, if there is a <literal>viewBox</literal> attribute and both
+ <literal>width</literal> and <literal>height</literal> are set to
+ <literal>100%</literal> (or if they don't exist at all and thus default to 100%),
+ the function uses the width and height of the viewBox as a pixel size. This
+ produces a rendered document with the correct aspect ratio.
+ </listitem>
+ <listitem>
+ Otherwise, this function computes the extents of every graphical object in the SVG
+ document to find the total extents. This is moderately expensive, but no more expensive
+ than rendering the whole document, for example.
+ </listitem>
+ <listitem>
+ This function cannot deal with percentage-based units for <literal>width</literal>
+ and <literal>height</literal> because there is no viewport against which they could
+ be resolved; that is why it will compute the extents of objects in that case. This
+ is why we recommend that you use rsvg_handle_render_document() instead, which takes
+ in a viewport and follows the sizing policy from the web platform.
+ </listitem>
+</itemizedlist>
+
+Drawing will occur with respect to the @cr's current transformation: for example, if
+the @cr has a rotated current transformation matrix, the whole SVG will be rotated in
+the rendered version.
+
+This function depends on the #RsvgHandle's DPI to compute dimensions in
+pixels, so you should call rsvg_handle_set_dpi() beforehand.
+
+Note that @cr must be a Cairo context that is not in an error state, that is,
+cairo_status() must return #CAIRO_STATUS_SUCCESS for it. Cairo can set a
+context to be in an error state in various situations, for example, if it was
+passed an invalid matrix or if it was created for an invalid surface.</doc>
+ <doc-deprecated xml:space="preserve">Please use rsvg_handle_render_document() instead; that function
lets
+you pass a viewport and obtain a good error message.</doc-deprecated>
+ <source-position filename="rsvg-cairo.h" line="95"/>
+ <return-value transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="88">%TRUE if drawing succeeded; %FALSE otherwise.</doc>
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="38">A #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="cr" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="39">A Cairo context</doc>
+ <type name="cairo.Context" c:type="cairo_t*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="render_cairo_sub"
+ c:identifier="rsvg_handle_render_cairo_sub"
+ version="2.14"
+ deprecated="1"
+ deprecated-version="2.52.">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="97">Renders a single SVG element in the same place as for a whole SVG document (a "subset"
+of the document). Please try to use rsvg_handle_render_layer() instead, which allows
+you to pick the size at which the document with the layer will be rendered.
+
+This is equivalent to rsvg_handle_render_cairo(), but it renders only a single
+element and its children, as if they composed an individual layer in the SVG.
+
+Historically this function has picked a size for the whole document by itself, based
+on the following rules:
+
+<itemizedlist>
+ <listitem>
+ If the SVG document has both <literal>width</literal> and
<literal>height</literal>
+ attributes with physical units (px, in, cm, mm, pt, pc) or font-based units (em,
+ ex), the function computes the size directly based on the dots-per-inch (DPI) you
+ have configured with rsvg_handle_set_dpi(). This is the same approach as
+ rsvg_handle_get_intrinsic_size_in_pixels().
+ </listitem>
+ <listitem>
+ Otherwise, if there is a <literal>viewBox</literal> attribute and both
+ <literal>width</literal> and <literal>height</literal> are set to
+ <literal>100%</literal> (or if they don't exist at all and thus default to 100%),
+ the function uses the width and height of the viewBox as a pixel size. This
+ produces a rendered document with the correct aspect ratio.
+ </listitem>
+ <listitem>
+ Otherwise, this function computes the extents of every graphical object in the SVG
+ document to find the total extents. This is moderately expensive, but no more expensive
+ than rendering the whole document, for example.
+ </listitem>
+ <listitem>
+ This function cannot deal with percentage-based units for <literal>width</literal>
+ and <literal>height</literal> because there is no viewport against which they could
+ be resolved; that is why it will compute the extents of objects in that case. This
+ is why we recommend that you use rsvg_handle_render_layer() instead, which takes
+ in a viewport and follows the sizing policy from the web platform.
+ </listitem>
+</itemizedlist>
+
+Drawing will occur with respect to the @cr's current transformation: for example, if
+the @cr has a rotated current transformation matrix, the whole SVG will be rotated in
+the rendered version.
+
+This function depends on the #RsvgHandle's DPI to compute dimensions in
+pixels, so you should call rsvg_handle_set_dpi() beforehand.
+
+Note that @cr must be a Cairo context that is not in an error state, that is,
+cairo_status() must return #CAIRO_STATUS_SUCCESS for it. Cairo can set a
+context to be in an error state in various situations, for example, if it was
+passed an invalid matrix or if it was created for an invalid surface.
+
+Element IDs should look like an URL fragment identifier; for example, pass
+"##foo" (hash <literal>foo</literal>) to get the geometry of the element that
+has an <literal>id="foo"</literal> attribute.</doc>
+ <doc-deprecated xml:space="preserve">Please use rsvg_handle_render_layer() instead; that function
lets
+you pass a viewport and obtain a good error message.</doc-deprecated>
+ <source-position filename="rsvg-cairo.h" line="167"/>
+ <return-value transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="160">%TRUE if drawing succeeded; %FALSE otherwise.</doc>
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="99">A #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="cr" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="100">A Cairo context</doc>
+ <type name="cairo.Context" c:type="cairo_t*"/>
+ </parameter>
+ <parameter name="id"
+ transfer-ownership="none"
+ nullable="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="101">An element's id within the SVG, starting with "##" (a single
+hash character), for example, "##layer1". This notation corresponds to a
+URL's fragment ID. Alternatively, pass %NULL to render the whole SVG.</doc>
+ <type name="utf8" c:type="const char*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="render_document"
+ c:identifier="rsvg_handle_render_document"
+ version="2.46"
+ throws="1">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="169">Renders the whole SVG document fitted to a viewport.
+
+The @viewport gives the position and size at which the whole SVG document will be
+rendered. The document is scaled proportionally to fit into this viewport.
+
+The @cr must be in a #CAIRO_STATUS_SUCCESS state, or this function will not
+render anything, and instead will return an error.
+
+API ordering: This function must be called on a fully-loaded @handle. See
+the section <ulink url="#API-ordering">API ordering</ulink> for details.
+
+Panics: this function will panic if the @handle is not fully-loaded.</doc>
+ <source-position filename="rsvg-cairo.h" line="192"/>
+ <return-value transfer-ownership="none">
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="171">An #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="cr" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="172">A Cairo context</doc>
+ <type name="cairo.Context" c:type="cairo_t*"/>
+ </parameter>
+ <parameter name="viewport" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="173">Viewport size at which the whole SVG would be fitted.</doc>
+ <type name="Rectangle" c:type="const RsvgRectangle*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="render_element"
+ c:identifier="rsvg_handle_render_element"
+ version="2.46"
+ throws="1">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="346">Renders a single SVG element to a given viewport
+
+This function can be used to extract individual element subtrees and render them,
+scaled to a given @element_viewport. This is useful for applications which have
+reusable objects in an SVG and want to render them individually; for example, an
+SVG full of icons that are meant to be be rendered independently of each other.
+
+Element IDs should look like an URL fragment identifier; for example, pass
+"##foo" (hash <literal>foo</literal>) to get the geometry of the element that
+has an <literal>id="foo"</literal> attribute.
+
+You can pass #NULL for the @id if you want to render all
+the elements in the SVG, i.e. to render everything from the
+root element.
+
+The `element_viewport` gives the position and size at which the named element will
+be rendered. FIXME: mention proportional scaling.
+
+API ordering: This function must be called on a fully-loaded @handle. See
+the section <ulink url="#API-ordering">API ordering</ulink> for details.
+
+Panics: this function will panic if the @handle is not fully-loaded.</doc>
+ <source-position filename="rsvg-cairo.h" line="382"/>
+ <return-value transfer-ownership="none">
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="348">An #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="cr" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="349">A Cairo context</doc>
+ <type name="cairo.Context" c:type="cairo_t*"/>
+ </parameter>
+ <parameter name="id"
+ transfer-ownership="none"
+ nullable="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="350">An element's id within the SVG, starting with "##" (a single
+hash character), for example, "##layer1". This notation corresponds to a
+URL's fragment ID. Alternatively, pass %NULL to render the whole SVG document tree.</doc>
+ <type name="utf8" c:type="const char*"/>
+ </parameter>
+ <parameter name="element_viewport" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="353">Viewport size in which to fit the element</doc>
+ <type name="Rectangle" c:type="const RsvgRectangle*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="render_layer"
+ c:identifier="rsvg_handle_render_layer"
+ version="2.46"
+ throws="1">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="247">Renders a single SVG element in the same place as for a whole SVG document.
+
+The @viewport gives the position and size at which the whole SVG document would be
+rendered. The document is scaled proportionally to fit into this viewport; hence the
+individual layer may be smaller than this.
+
+This is equivalent to rsvg_handle_render_document(), but it renders only a
+single element and its children, as if they composed an individual layer in
+the SVG. The element is rendered with the same transformation matrix as it
+has within the whole SVG document. Applications can use this to re-render a
+single element and repaint it on top of a previously-rendered document, for
+example.
+
+Element IDs should look like an URL fragment identifier; for example, pass
+"##foo" (hash <literal>foo</literal>) to get the geometry of the element that
+has an <literal>id="foo"</literal> attribute.
+
+You can pass #NULL for the @id if you want to render all
+the elements in the SVG, i.e. to render everything from the
+root element.
+
+API ordering: This function must be called on a fully-loaded @handle. See
+the section <ulink url="#API-ordering">API ordering</ulink> for details.
+
+Panics: this function will panic if the @handle is not fully-loaded.</doc>
+ <source-position filename="rsvg-cairo.h" line="286"/>
+ <return-value transfer-ownership="none">
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="249">An #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="cr" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="250">A Cairo context</doc>
+ <type name="cairo.Context" c:type="cairo_t*"/>
+ </parameter>
+ <parameter name="id"
+ transfer-ownership="none"
+ nullable="1"
+ allow-none="1">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="251">An element's id within the SVG, starting with "##" (a single
+hash character), for example, "##layer1". This notation corresponds to a
+URL's fragment ID. Alternatively, pass %NULL to render the whole SVG document tree.</doc>
+ <type name="utf8" c:type="const char*"/>
+ </parameter>
+ <parameter name="viewport" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg-cairo.h"
+ line="254">Viewport size at which the whole SVG would be fitted.</doc>
+ <type name="Rectangle" c:type="const RsvgRectangle*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="set_base_gfile"
+ c:identifier="rsvg_handle_set_base_gfile"
+ version="2.32">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1001">Set the base URI for @handle from @file.
+
+Note: This function may only be called before rsvg_handle_write() or
+rsvg_handle_read_stream_sync() have been called.</doc>
+ <source-position filename="rsvg.h" line="1014"/>
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1003">a #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="base_file" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1004">a #GFile</doc>
+ <type name="Gio.File" c:type="GFile*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="set_base_uri"
+ c:identifier="rsvg_handle_set_base_uri"
+ version="2.9">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="682">Set the base URI for this SVG.
+
+Note: This function may only be called before rsvg_handle_write() or
+rsvg_handle_read_stream_sync() have been called.</doc>
+ <source-position filename="rsvg.h" line="695"/>
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="684">A #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="base_uri" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="685">The base uri</doc>
+ <type name="utf8" c:type="const char*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="set_dpi" c:identifier="rsvg_handle_set_dpi" version="2.8">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="506">Sets the DPI at which the @handle will be rendered. Common values are
+75, 90, and 300 DPI.
+
+Passing a number <= 0 to @dpi will reset the DPI to whatever the default
+value happens to be, but since rsvg_set_default_dpi() is deprecated, please
+do not pass values <= 0 to this function.</doc>
+ <source-position filename="rsvg.h" line="521"/>
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="508">An #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="dpi" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="509">Dots Per Inch (i.e. as Pixels Per Inch)</doc>
+ <type name="gdouble" c:type="double"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="set_dpi_x_y"
+ c:identifier="rsvg_handle_set_dpi_x_y"
+ version="2.8">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="523">Sets the DPI at which the @handle will be rendered. Common values are
+75, 90, and 300 DPI.
+
+Passing a number <= 0 to @dpi will reset the DPI to whatever the default
+value happens to be, but since rsvg_set_default_dpi_x_y() is deprecated,
+please do not pass values <= 0 to this function.</doc>
+ <source-position filename="rsvg.h" line="539"/>
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="525">An #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="dpi_x" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="526">Dots Per Inch (i.e. Pixels Per Inch)</doc>
+ <type name="gdouble" c:type="double"/>
+ </parameter>
+ <parameter name="dpi_y" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="527">Dots Per Inch (i.e. Pixels Per Inch)</doc>
+ <type name="gdouble" c:type="double"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="set_stylesheet"
+ c:identifier="rsvg_handle_set_stylesheet"
+ version="2.48"
+ throws="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1139">Sets a CSS stylesheet to use for an SVG document.
+
+The @css_len argument is mandatory; this function will not compute the length
+of the @css string. This is because a provided stylesheet, which the calling
+program could read from a file, can have nul characters in it.
+
+During the CSS cascade, the specified stylesheet will be used with a "User"
+<ulink
+url="https://drafts.csswg.org/css-cascade-3/#cascading-origins">origin</ulink>.
+
+Note that `@import` rules will not be resolved, except for `data:` URLs.</doc>
+ <source-position filename="rsvg.h" line="1161"/>
+ <return-value transfer-ownership="none">
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1141">A #RsvgHandle.</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="css" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1142">String with CSS data; must be valid UTF-8.</doc>
+ <array length="1" zero-terminated="0" c:type="const guint8*">
+ <type name="guint8" c:type="guint8"/>
+ </array>
+ </parameter>
+ <parameter name="css_len" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="1143">Length of the @css data in bytes.</doc>
+ <type name="gsize" c:type="gsize"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="write"
+ c:identifier="rsvg_handle_write"
+ deprecated="1"
+ deprecated-version="2.46."
+ throws="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="570">Loads the next @count bytes of the image.
+
+Before calling this function for the first time, you may need to call
+rsvg_handle_set_base_uri() or rsvg_handle_set_base_gfile() to set the "base
+file" for resolving references to external resources. SVG elements like
+<literal>&lt;image&gt;</literal> which reference external resources will be
+resolved relative to the location you specify with those functions.</doc>
+ <doc-deprecated xml:space="preserve">Use rsvg_handle_read_stream_sync() or the constructor
+functions rsvg_handle_new_from_gfile_sync() or
+rsvg_handle_new_from_stream_sync(). This function is deprecated because it
+will accumulate data from the @buf in memory until rsvg_handle_close() gets
+called. To avoid a big temporary buffer, use the suggested functions, which
+take a #GFile or a #GInputStream and do not require a temporary buffer.</doc-deprecated>
+ <source-position filename="rsvg.h" line="595"/>
+ <return-value transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="585">%TRUE on success, or %FALSE on error.</doc>
+ <type name="gboolean" c:type="gboolean"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="handle" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="572">an #RsvgHandle</doc>
+ <type name="Handle" c:type="RsvgHandle*"/>
+ </instance-parameter>
+ <parameter name="buf" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="573">pointer to svg data</doc>
+ <array length="1" zero-terminated="0" c:type="const guchar*">
+ <type name="guint8"/>
+ </array>
+ </parameter>
+ <parameter name="count" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="574">length of the @buf buffer in bytes</doc>
+ <type name="gsize" c:type="gsize"/>
+ </parameter>
+ </parameters>
+ </method>
+ <property name="base-uri"
+ writable="1"
+ construct="1"
+ transfer-ownership="none">
+ <type name="utf8" c:type="gchar*"/>
+ </property>
+ <property name="desc"
+ deprecated="1"
+ deprecated-version="2.36."
+ transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="349">SVG's description.</doc>
+ <doc-deprecated xml:space="preserve">Reading this property always returns #NULL.</doc-deprecated>
+ <type name="utf8" c:type="gchar*"/>
+ </property>
+ <property name="dpi-x"
+ writable="1"
+ construct="1"
+ transfer-ownership="none">
+ <type name="gdouble" c:type="gdouble"/>
+ </property>
+ <property name="dpi-y"
+ writable="1"
+ construct="1"
+ transfer-ownership="none">
+ <type name="gdouble" c:type="gdouble"/>
+ </property>
+ <property name="em"
+ deprecated="1"
+ deprecated-version="2.46."
+ transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="317">Exact width, in pixels, of the rendered SVG before calling the size callback
+as specified by rsvg_handle_set_size_callback().</doc>
+ <doc-deprecated xml:space="preserve">Reading each of the size properties causes the size of the
+SVG to be recomputed, so reading both the <literal>em</literal> and
+<literal>ex</literal> properties will cause two such computations. Please
+use rsvg_handle_get_intrinsic_dimensions() instead.</doc-deprecated>
+ <type name="gdouble" c:type="gdouble"/>
+ </property>
+ <property name="ex"
+ deprecated="1"
+ deprecated-version="2.46."
+ transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="329">Exact height, in pixels, of the rendered SVG before calling the size callback
+as specified by rsvg_handle_set_size_callback().</doc>
+ <doc-deprecated xml:space="preserve">Reading each of the size properties causes the size of the
+SVG to be recomputed, so reading both the <literal>em</literal> and
+<literal>ex</literal> properties will cause two such computations. Please
+use rsvg_handle_get_intrinsic_dimensions() instead.</doc-deprecated>
+ <type name="gdouble" c:type="gdouble"/>
+ </property>
+ <property name="flags"
+ version="2.36"
+ writable="1"
+ construct-only="1"
+ transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="263">Flags from #RsvgHandleFlags.</doc>
+ <type name="HandleFlags"/>
+ </property>
+ <property name="height"
+ deprecated="1"
+ deprecated-version="2.46."
+ transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="303">Height, in pixels, of the rendered SVG after calling the size callback
+as specified by rsvg_handle_set_size_callback().</doc>
+ <doc-deprecated xml:space="preserve">For historical reasons, this property is of integer type,
+which cannot give the exact size of SVG images that are not pixel-aligned.
+Moreover, reading each of the size properties causes the size of the SVG to
+be recomputed, so reading both the <literal>width</literal> and
+<literal>height</literal> properties will cause two such computations.
+Please use rsvg_handle_get_intrinsic_dimensions() instead.</doc-deprecated>
+ <type name="gint" c:type="gint"/>
+ </property>
+ <property name="metadata"
+ deprecated="1"
+ deprecated-version="2.36."
+ transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="357">SVG's metadata</doc>
+ <doc-deprecated xml:space="preserve">Reading this property always returns #NULL.</doc-deprecated>
+ <type name="utf8" c:type="gchar*"/>
+ </property>
+ <property name="title"
+ deprecated="1"
+ deprecated-version="2.36."
+ transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="341">SVG's title.</doc>
+ <doc-deprecated xml:space="preserve">Reading this property always returns #NULL.</doc-deprecated>
+ <type name="utf8" c:type="gchar*"/>
+ </property>
+ <property name="width"
+ deprecated="1"
+ deprecated-version="2.46."
+ transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="289">Width, in pixels, of the rendered SVG after calling the size callback
+as specified by rsvg_handle_set_size_callback().</doc>
+ <doc-deprecated xml:space="preserve">For historical reasons, this property is of integer type,
+which cannot give the exact size of SVG images that are not pixel-aligned.
+Moreover, reading each of the size properties causes the size of the SVG to
+be recomputed, so reading both the <literal>width</literal> and
+<literal>height</literal> properties will cause two such computations.
+Please use rsvg_handle_get_intrinsic_dimensions() instead.</doc-deprecated>
+ <type name="gint" c:type="gint"/>
+ </property>
+ <field name="parent">
+ <type name="GObject.Object" c:type="GObject"/>
+ </field>
+ <field name="_abi_padding" readable="0" private="1">
+ <array zero-terminated="0" fixed-size="16">
+ <type name="gpointer" c:type="gpointer"/>
+ </array>
+ </field>
+ </class>
+ <record name="HandleClass"
+ c:type="RsvgHandleClass"
+ glib:is-gtype-struct-for="Handle">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="383">Class structure for #RsvgHandle.</doc>
+ <source-position filename="rsvg.h" line="394"/>
+ <field name="parent">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="385">parent class</doc>
+ <type name="GObject.ObjectClass" c:type="GObjectClass"/>
+ </field>
+ <field name="_abi_padding" readable="0" private="1">
+ <array zero-terminated="0" fixed-size="15">
+ <type name="gpointer" c:type="gpointer"/>
+ </array>
+ </field>
+ </record>
+ <bitfield name="HandleFlags"
+ glib:type-name="RsvgHandleFlags"
+ glib:get-type="rsvg_handle_flags_get_type"
+ c:type="RsvgHandleFlags">
+ <member name="flags_none"
+ value="0"
+ c:identifier="RSVG_HANDLE_FLAGS_NONE"
+ glib:nick="flags-none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="956">No flags are set.</doc>
+ </member>
+ <member name="flag_unlimited"
+ value="1"
+ c:identifier="RSVG_HANDLE_FLAG_UNLIMITED"
+ glib:nick="flag-unlimited">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="957">Disable safety limits in the XML parser.
+ Libxml2 has <ulink
+ url="https://gitlab.gnome.org/GNOME/libxml2/blob/master/include/libxml/parserInternals.h">several
+ limits</ulink> designed to keep malicious XML content from consuming too
+ much memory while parsing. For security reasons, this should only be used
+ for trusted input!
+ Since: 2.40.3</doc>
+ </member>
+ <member name="flag_keep_image_data"
+ value="2"
+ c:identifier="RSVG_HANDLE_FLAG_KEEP_IMAGE_DATA"
+ glib:nick="flag-keep-image-data">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="964">Use this if the Cairo surface to which you
+ are rendering is a PDF, PostScript, SVG, or Win32 Printing surface. This
+ will make librsvg and Cairo use the original, compressed data for images in
+ the final output, instead of passing uncompressed images. This will make a
+ Keeps the image data when loading images, for use by cairo when painting to
+ e.g. a PDF surface. For example, this will make the a resulting PDF file
+ smaller and faster. Please see <ulink
+ url="https://www.cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-set-mime-data">the
+ Cairo documentation</ulink> for details.
+ Since: 2.40.3</doc>
+ </member>
+ </bitfield>
+ <function-macro name="IS_HANDLE"
+ c:identifier="RSVG_IS_HANDLE"
+ introspectable="0">
+ <source-position filename="rsvg.h" line="370"/>
+ <parameters>
+ <parameter name="obj">
+ </parameter>
+ </parameters>
+ </function-macro>
+ <function-macro name="IS_HANDLE_CLASS"
+ c:identifier="RSVG_IS_HANDLE_CLASS"
+ introspectable="0">
+ <source-position filename="rsvg.h" line="371"/>
+ <parameters>
+ <parameter name="klass">
+ </parameter>
+ </parameters>
+ </function-macro>
+ <record name="Length" c:type="RsvgLength">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="815">#RsvgLength values are used in rsvg_handle_get_intrinsic_dimensions(), for
+example, to return the CSS length values of the <literal>width</literal> and
+<literal>height</literal> attributes of an <literal>&lt;svg&gt;</literal>
+element.
+
+This is equivalent to <ulink
+url="https://www.w3.org/TR/CSS21/syndata.html#length-units">CSS lengths</ulink>.
+
+It is up to the calling application to convert lengths in non-pixel units
+(i.e. those where the @unit field is not #RSVG_UNIT_PX) into something
+meaningful to the application. For example, if your application knows the
+dots-per-inch (DPI) it is using, it can convert lengths with @unit in
+#RSVG_UNIT_IN or other physical units.</doc>
+ <source-position filename="rsvg.h" line="837"/>
+ <field name="length" writable="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="817">numeric part of the length</doc>
+ <type name="gdouble" c:type="double"/>
+ </field>
+ <field name="unit" writable="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="818">unit part of the length</doc>
+ <type name="Unit" c:type="RsvgUnit"/>
+ </field>
+ </record>
+ <constant name="MAJOR_VERSION" value="2" c:type="LIBRSVG_MAJOR_VERSION">
+ <doc xml:space="preserve"
+ filename="rsvg-features.h"
+ line="25">This is a C macro that expands to a number with the major version
+of librsvg against which your program is compiled.
+
+For example, for librsvg-2.3.4, the major version is 2.
+
+C programs can use this as a compile-time check for the required
+version, but note that generally it is a better idea to do
+compile-time checks by calling <ulink
+url="https://www.freedesktop.org/wiki/Software/pkg-config/">pkg-config</ulink>
+in your build scripts.
+
+Note: for a run-time check on the version of librsvg that your
+program is running with (e.g. the version which the linker used for
+your program), or for programs not written in C, use
+@rsvg_major_version instead.</doc>
+ <source-position filename="rsvg-version.h" line="8"/>
+ <type name="gint" c:type="gint"/>
+ </constant>
+ <constant name="MICRO_VERSION" value="0" c:type="LIBRSVG_MICRO_VERSION">
+ <doc xml:space="preserve"
+ filename="rsvg-features.h"
+ line="65">This is a C macro that expands to a number with the micro version
+of librsvg against which your program is compiled.
+
+For example, for librsvg-2.3.4, the micro version is 4.
+
+C programs can use this as a compile-time check for the required
+version, but note that generally it is a better idea to do
+compile-time checks by calling <ulink
+url="https://www.freedesktop.org/wiki/Software/pkg-config/">pkg-config</ulink>
+in your build scripts.
+
+Note: for a run-time check on the version of librsvg that your
+program is running with (e.g. the version which the linker used for
+your program), or for programs not written in C, use
+@rsvg_micro_version instead.</doc>
+ <source-position filename="rsvg-version.h" line="10"/>
+ <type name="gint" c:type="gint"/>
+ </constant>
+ <constant name="MINOR_VERSION" value="51" c:type="LIBRSVG_MINOR_VERSION">
+ <doc xml:space="preserve"
+ filename="rsvg-features.h"
+ line="45">This is a C macro that expands to a number with the minor version
+of librsvg against which your program is compiled.
+
+For example, for librsvg-2.3.4, the minor version is 3.
+
+C programs can use this as a compile-time check for the required
+version, but note that generally it is a better idea to do
+compile-time checks by calling <ulink
+url="https://www.freedesktop.org/wiki/Software/pkg-config/">pkg-config</ulink>
+in your build scripts.
+
+Note: for a run-time check on the version of librsvg that your
+program is running with (e.g. the version which the linker used for
+your program), or for programs not written in C, use
+@rsvg_minor_version instead.</doc>
+ <source-position filename="rsvg-version.h" line="9"/>
+ <type name="gint" c:type="gint"/>
+ </constant>
+ <record name="PositionData"
+ c:type="RsvgPositionData"
+ deprecated="1"
+ deprecated-version="2.46.">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="429">Position of an SVG fragment from rsvg_handle_get_position_sub(). Please
+the deprecation documentation for that function.</doc>
+ <doc-deprecated xml:space="preserve">FIXME: point to deprecation documentation.</doc-deprecated>
+ <source-position filename="rsvg.h" line="442"/>
+ <field name="x" writable="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="431">position on the x axis</doc>
+ <type name="gint" c:type="int"/>
+ </field>
+ <field name="y" writable="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="432">position on the y axis</doc>
+ <type name="gint" c:type="int"/>
+ </field>
+ </record>
+ <record name="Rectangle" c:type="RsvgRectangle" version="2.46">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="444">A data structure for holding a rectangle.</doc>
+ <source-position filename="rsvg.h" line="460"/>
+ <field name="x" writable="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="446">X coordinate of the left side of the rectangle</doc>
+ <type name="gdouble" c:type="double"/>
+ </field>
+ <field name="y" writable="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="447">Y coordinate of the the top side of the rectangle</doc>
+ <type name="gdouble" c:type="double"/>
+ </field>
+ <field name="width" writable="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="448">width of the rectangle</doc>
+ <type name="gdouble" c:type="double"/>
+ </field>
+ <field name="height" writable="1">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="449">height of the rectangle</doc>
+ <type name="gdouble" c:type="double"/>
+ </field>
+ </record>
+ <enumeration name="Unit" c:type="RsvgUnit">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="787">Units for the #RsvgLength struct. These have the same meaning as <ulink
+url="https://www.w3.org/TR/CSS21/syndata.html#length-units">CSS length
+units</ulink>.</doc>
+ <source-position filename="rsvg.h" line="813"/>
+ <member name="percent" value="0" c:identifier="RSVG_UNIT_PERCENT">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="789">percentage values; where <literal>1.0</literal> means 100%.</doc>
+ </member>
+ <member name="px" value="1" c:identifier="RSVG_UNIT_PX">
+ <doc xml:space="preserve" filename="rsvg.h" line="790">pixels</doc>
+ </member>
+ <member name="em" value="2" c:identifier="RSVG_UNIT_EM">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="791">em, or the current font size</doc>
+ </member>
+ <member name="ex" value="3" c:identifier="RSVG_UNIT_EX">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="792">x-height of the current font</doc>
+ </member>
+ <member name="in" value="4" c:identifier="RSVG_UNIT_IN">
+ <doc xml:space="preserve" filename="rsvg.h" line="793">inches</doc>
+ </member>
+ <member name="cm" value="5" c:identifier="RSVG_UNIT_CM">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="794">centimeters</doc>
+ </member>
+ <member name="mm" value="6" c:identifier="RSVG_UNIT_MM">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="795">millimeters</doc>
+ </member>
+ <member name="pt" value="7" c:identifier="RSVG_UNIT_PT">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="796">points, or 1/72 inch</doc>
+ </member>
+ <member name="pc" value="8" c:identifier="RSVG_UNIT_PC">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="797">picas, or 1/6 inch (12 points)</doc>
+ </member>
+ </enumeration>
+ <constant name="VERSION" value="2.51.0" c:type="LIBRSVG_VERSION">
+ <doc xml:space="preserve"
+ filename="rsvg-features.h"
+ line="85">This is a C macro that expands to a string with the version of
+librsvg against which your program is compiled.
+
+For example, for librsvg-2.3.4, this macro expands to
+<literal>"2.3.4"</literal>.
+
+C programs can use this as a compile-time check for the required
+version, but note that generally it is a better idea to do
+compile-time checks by calling <ulink
+url="https://www.freedesktop.org/wiki/Software/pkg-config/">pkg-config</ulink>
+in your build scripts.
+
+Note: for a run-time check on the version of librsvg that your
+program is running with (e.g. the version which the linker used for
+your program), or for programs not written in C, use
+@rsvg_version instead.</doc>
+ <source-position filename="rsvg-version.h" line="11"/>
+ <type name="utf8" c:type="gchar*"/>
+ </constant>
+ <function name="cleanup"
+ c:identifier="rsvg_cleanup"
+ version="2.36"
+ deprecated="1"
+ deprecated-version="2.46">
+ <doc-deprecated xml:space="preserve">No-op. This function should not be called from normal
programs.</doc-deprecated>
+ <source-position filename="rsvg.h" line="469"/>
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ </function>
+ <function name="error_quark"
+ c:identifier="rsvg_error_quark"
+ moved-to="Error.quark">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="67">The error domain for RSVG</doc>
+ <return-value transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="72">The error domain</doc>
+ <type name="GLib.Quark" c:type="GQuark"/>
+ </return-value>
+ </function>
+ <docsection name="rsvg-features">
+ <doc xml:space="preserve"
+ filename="rsvg-features.h"
+ line="8">Librsvg provides a few C macros that C and C++ programs can use to
+check the version being used at compile-time, that is, the API that
+the program expects to have. This is useful for programs that need
+to conditionally compile code with <literal>#ifdef</literal> blocks
+depending on the version of librsvg that may be available during
+compilation.
+
+Librsvg also provides a few global constants that can be used to
+check the version of librsvg being used at run-time. This is
+useful to know which version of librsvg is actually being used on
+the system where the program is running.</doc>
+ </docsection>
+ <docsection name="rsvg-handle">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="81">This is the main entry point into the librsvg library. An RsvgHandle is an
+object that represents SVG data in memory. Your program creates an
+RsvgHandle from an SVG file, or from a memory buffer that contains SVG data,
+or in the most general form, from a #GInputStream that will provide SVG data.
+
+Librsvg can load SVG images and render them to Cairo surfaces,
+using a mixture of SVG's [static mode] and [secure static mode].
+Librsvg does not do animation nor scripting, and can load
+references to external data only in some situations; see below.
+
+Librsvg supports reading <ulink
+url="https://www.w3.org/TR/SVG11/">SVG 1.1</ulink> data, and is
+gradually adding support for features in <ulink
+url="https://www.w3.org/TR/SVG2/">SVG 2</ulink>. Librsvg also supports
+SVGZ files, which are just an SVG stream compressed with the GZIP algorithm.
+
+# The "base file" and resolving references to external files
+
+When you load an SVG, librsvg needs to know the location of the "base file"
+for it. This is so that librsvg can determine the location of referenced
+entities. For example, say you have an SVG in <filename>/foo/bar/foo.svg</filename>
+and that it has an image element like this:
+
+|[
+<image href="resources/foo.png" .../>
+]|
+
+In this case, librsvg needs to know the location of the toplevel
+<filename>/foo/bar/foo.svg</filename> so that it can generate the appropriate
+reference to <filename>/foo/bar/resources/foo.png</filename>.
+
+## Security and locations of referenced files
+
+When processing an SVG, librsvg will only load referenced files if they are
+in the same directory as the base file, or in a subdirectory of it. That is,
+if the base file is <filename>/foo/bar/baz.svg</filename>, then librsvg will
+only try to load referenced files (from SVG's
+<literal>&lt;image&gt;</literal> element, for example, or from content
+included through XML entities) if those files are in <filename>/foo/bar/<!--
+-->*</filename> or in <filename>/foo/bar/<!-- -->*<!-- -->/.../<!--
+-->*</filename>. This is so that malicious SVG files cannot include files
+that are in a directory above.
+
+The full set of rules for deciding which URLs may be loaded is as follows;
+they are applied in order. A referenced URL will not be loaded as soon as
+one of these rules fails:
+
+<orderedlist>
+ <listitem>
+ All <literal>data:</literal> URLs may be loaded. These are sometimes used
+ to include raster image data, encoded as base-64, directly in an SVG file.
+ </listitem>
+
+ <listitem>
+ All other URL schemes in references require a base URL. For
+ example, this means that if you load an SVG with
+ rsvg_handle_new_from_data() without calling rsvg_handle_set_base_uri(),
+ then any referenced files will not be allowed (e.g. raster images to be
+ loaded from other files will not work).
+ </listitem>
+
+ <listitem>
+ If referenced URLs are absolute, rather than relative, then they must
+ have the same scheme as the base URL. For example, if the base URL has a
+ "<literal>file</literal>" scheme, then all URL references inside the SVG must
+ also have the "<literal>file</literal>" scheme, or be relative references which
+ will be resolved against the base URL.
+ </listitem>
+
+ <listitem>
+ If referenced URLs have a "<literal>resource</literal>" scheme, that is,
+ if they are included into your binary program with GLib's resource
+ mechanism, they are allowed to be loaded (provided that the base URL is
+ also a "<literal>resource</literal>", per the previous rule).
+ </listitem>
+
+ <listitem>
+ Otherwise, non-<literal>file</literal> schemes are not allowed. For
+ example, librsvg will not load <literal>http</literal> resources, to keep
+ malicious SVG data from "phoning home".
+ </listitem>
+
+ <listitem>
+ A relative URL must resolve to the same directory as the base URL, or to
+ one of its subdirectories. Librsvg will canonicalize filenames, by
+ removing ".." path components and resolving symbolic links, to decide whether
+ files meet these conditions.
+ </listitem>
+</orderedlist>
+
+# Loading an SVG with GIO
+
+This is the easiest and most resource-efficient way of loading SVG data into
+an #RsvgHandle.
+
+If you have a #GFile that stands for an SVG file, you can simply call
+rsvg_handle_new_from_gfile_sync() to load an RsvgHandle from it.
+
+Alternatively, if you have a #GInputStream, you can use
+rsvg_handle_new_from_stream_sync().
+
+Both of those methods allow specifying a #GCancellable, so the loading
+process can be cancelled from another thread.
+
+## Loading an SVG from memory
+
+If you already have SVG data in a byte buffer in memory, you can create a
+memory input stream with g_memory_input_stream_new_from_data() and feed that
+to rsvg_handle_new_from_stream_sync().
+
+Note that in this case, it is important that you specify the base_file for
+the in-memory SVG data. Librsvg uses the base_file to resolve links to
+external content, like raster images.
+
+# Loading an SVG without GIO
+
+You can load an RsvgHandle from a simple filename or URI with
+rsvg_handle_new_from_file(). Note that this is a blocking operation; there
+is no way to cancel it if loading a remote URI takes a long time. Also, note that
+this method does not let you specify #RsvgHandleFlags.
+
+Otherwise, loading an SVG without GIO is not recommended, since librsvg will
+need to buffer your entire data internally before actually being able to
+parse it. The deprecated way of doing this is by creating a handle with
+rsvg_handle_new() or rsvg_handle_new_with_flags(), and then using
+rsvg_handle_write() and rsvg_handle_close() to feed the handle with SVG data.
+Still, please try to use the GIO stream functions instead.
+
+# Resolution of the rendered image (dots per inch, or DPI)
+
+SVG images can contain dimensions like "<literal>5 cm</literal>" or
+"<literal>2 pt</literal>" that must be converted from physical units into
+device units. To do this, librsvg needs to know the actual dots per inch
+(DPI) of your target device. You can call rsvg_handle_set_dpi() or
+rsvg_handle_set_dpi_x_y() on an RsvgHandle to set the DPI before rendering
+it.
+
+# Rendering
+
+The preferred way to render a whole SVG document is to use
+rsvg_handle_render_document(). Please see its documentation for
+details.
+
+# API ordering
+
+Due to the way the librsvg API evolved over time, an #RsvgHandle object is available
+for use as soon as it is constructed. However, not all of its methods can be
+called at any time. For example, an #RsvgHandle just constructed with rsvg_handle_new()
+is not loaded yet, and it does not make sense to call rsvg_handle_get_dimensions() on it
+just at that point.
+
+The documentation for the available methods in #RsvgHandle may mention that a particular
+method is only callable on a "fully loaded handle". This means either:
+
+<itemizedlist>
+ <listitem>
+ The handle was loaded with rsvg_handle_write() and rsvg_handle_close(), and
+ those functions returned no errors.
+ </listitem>
+ <listitem>
+ The handle was loaded with rsvg_handle_read_stream_sync() and that function
+ returned no errors.
+ </listitem>
+</itemizedlist>
+
+Before librsvg 2.46, the library did not fully verify that a handle was in a
+fully loaded state for the methods that require it. To preserve
+compatibility with old code which inadvertently called the API without
+checking for errors, or which called some methods outside of the expected
+order, librsvg will just emit a g_critical() message in those cases.
+
+New methods introduced in librsvg 2.46 and later will check for the correct
+ordering, and panic if they are called out of order. This will abort
+the program as if it had a failed assertion.</doc>
+ </docsection>
+ <function name="set_default_dpi"
+ c:identifier="rsvg_set_default_dpi"
+ version="2.8"
+ deprecated="1"
+ deprecated-version="2.42.3">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="471">Do not use this function. Create an #RsvgHandle and call
+rsvg_handle_set_dpi() on it instead.</doc>
+ <doc-deprecated xml:space="preserve">This function used to set a global default DPI. However,
+it only worked if it was called before any #RsvgHandle objects had been
+created; it would not work after that. To avoid global mutable state, please
+use rsvg_handle_set_dpi() instead.</doc-deprecated>
+ <source-position filename="rsvg.h" line="486"/>
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ <parameters>
+ <parameter name="dpi" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="473">Dots Per Inch (aka Pixels Per Inch)</doc>
+ <type name="gdouble" c:type="double"/>
+ </parameter>
+ </parameters>
+ </function>
+ <function name="set_default_dpi_x_y"
+ c:identifier="rsvg_set_default_dpi_x_y"
+ version="2.8"
+ deprecated="1"
+ deprecated-version="2.42.3">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="488">Do not use this function. Create an #RsvgHandle and call
+rsvg_handle_set_dpi_x_y() on it instead.</doc>
+ <doc-deprecated xml:space="preserve">This function used to set a global default DPI. However,
+it only worked if it was called before any #RsvgHandle objects had been
+created; it would not work after that. To avoid global mutable state, please
+use rsvg_handle_set_dpi() instead.</doc-deprecated>
+ <source-position filename="rsvg.h" line="504"/>
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ <parameters>
+ <parameter name="dpi_x" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="490">Dots Per Inch (aka Pixels Per Inch)</doc>
+ <type name="gdouble" c:type="double"/>
+ </parameter>
+ <parameter name="dpi_y" transfer-ownership="none">
+ <doc xml:space="preserve"
+ filename="rsvg.h"
+ line="491">Dots Per Inch (aka Pixels Per Inch)</doc>
+ <type name="gdouble" c:type="double"/>
+ </parameter>
+ </parameters>
+ </function>
+ </namespace>
+</repository>
diff --git a/tests/src/gir.rs b/tests/src/gir.rs
new file mode 100644
index 00000000..b338a247
--- /dev/null
+++ b/tests/src/gir.rs
@@ -0,0 +1,62 @@
+extern crate markup5ever_rcdom as rcdom;
+extern crate xml5ever;
+
+use std::default::Default;
+use std::fs::File;
+use std::path::Path;
+
+use rcdom::{Handle, NodeData, RcDom};
+use xml5ever::driver::parse_document;
+use xml5ever::tendril::TendrilSink;
+
+fn build_dir() -> &'static Path {
+ match option_env!("LIBRSVG_BUILD_DIR") {
+ Some(dir) => Path::new(dir),
+ None => Path::new(env!("CARGO_MANIFEST_DIR")),
+ }
+}
+
+fn parse(path: &Path) -> std::io::Result<RcDom> {
+ let mut file = File::open(path)?;
+ parse_document(RcDom::default(), Default::default())
+ .from_utf8()
+ .read_from(&mut file)
+}
+
+fn diff(a: &NodeData, b: &NodeData) -> Option<String> {
+ match a {
+ NodeData::Document if !matches!(b, NodeData::Document) => Some(String::from("root")),
+ NodeData::Text { contents: ref c } if !matches!(b, NodeData::Text { contents: ref d } if c.eq(d)) =>
{
+ Some(format!("text: {:?}", c))
+ }
+ NodeData::Element { name: ref c, .. } if !matches!(b, NodeData::Element { name: ref d, .. } if
c.eq(d)) => {
+ Some(format!("element: {:?}", c))
+ }
+ _ => None,
+ }
+}
+
+fn walk(a: &Handle, b: &Handle) {
+ if let Some(diff) = diff(&a.data, &b.data) {
+ panic!("files differ: {}", diff);
+ }
+
+ for (a, b) in a.children.borrow().iter().zip(b.children.borrow().iter()) {
+ walk(a, b);
+ }
+}
+
+fn escape_default(s: &str) -> String {
+ s.chars().flat_map(|c| c.escape_default()).collect()
+}
+
+#[test]
+fn gobject_introspection_matches_reference() {
+ let reference = Path::new("tests/fixtures/gir/Rsvg-2.0-ref.gir");
+ let generated = build_dir().join("Rsvg-2.0.gir");
+
+ let a = parse(&generated).unwrap();
+ let b = parse(&reference).unwrap();
+
+ walk(&a.document, &b.document);
+}
diff --git a/tests/src/main.rs b/tests/src/main.rs
index adfb52f2..b350bd38 100644
--- a/tests/src/main.rs
+++ b/tests/src/main.rs
@@ -14,6 +14,9 @@ mod cmdline;
#[cfg(test)]
mod errors;
+#[cfg(test)]
+mod gir;
+
#[cfg(test)]
mod intrinsic_dimensions;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]