[cairo] [Bug 90166] Add a way to specify units (in SVG output)

Antonio Ospite ao2 at ao2.it
Mon Oct 23 21:54:15 UTC 2017

On Mon, 23 Oct 2017 10:29:16 -0700
Bill Spitzak <spitzak at gmail.com> wrote:

> If I understand that right, "percent" is not allowed in the style attribute.

The focus here are the "width" and "height" attributes of the root
<svg/>, IIUC they are presentation attributes which allow percent as a
unit, to back up this argument I verified that files with percent as
unit in there do validate according to the "unofficial" XML schemas
available online:

See also one of my previous messages.

> Also it seems like the default is "user". By default I mean what svg
> does if you don't specify the unit at all. If cairo has been forcing
> that value to pt then I think Cairo is wrong.

It may very well be wrong, but that's the current behavior and
that's what users (either human or not) might expect, so I don't think
it'd be wise to change the default unit cairo uses for the generated

However having as CAIRO_SVG_UNIT_USER as first in the enum definition
makes sense following this rationale:

  1. The enum lists all the units allowed by the specification,
     regardless of where they are used in cairo.

  2. It's only the new API call cairo_svg_surface_set_document_unit()
     that refers specifically to the root <svg/> element.

So following to 1. this enum might be OK:

typedef enum _cairo_svg_unit {
} cairo_svg_unit_t;

This also seems to follow the specification[1] more naturally, i.e.:
explicit units match the optional pattern ("em" | "ex" | ... )?

I can add a comment when initializing the default document->unit to
CAIRO_SVG_UNIT_PT to stress out that this value is used for backward


[1] https://www.w3.org/TR/SVG/types.html#DataTypeLength

Antonio Ospite

A: Because it messes up the order in which people normally read text.
   See http://en.wikipedia.org/wiki/Posting_style
Q: Why is top-posting such a bad thing?

More information about the cairo mailing list